summaryrefslogtreecommitdiff
path: root/src/couchdb/couch_changes.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/couchdb/couch_changes.erl')
-rw-r--r--src/couchdb/couch_changes.erl32
1 files changed, 18 insertions, 14 deletions
diff --git a/src/couchdb/couch_changes.erl b/src/couchdb/couch_changes.erl
index 6baaf7ec..2241e554 100644
--- a/src/couchdb/couch_changes.erl
+++ b/src/couchdb/couch_changes.erl
@@ -59,7 +59,7 @@ handle_changes(#changes_args{style=Style}=Args1, Req, Db) ->
fun(CallbackAcc) ->
{Callback, UserAcc} = get_callback_acc(CallbackAcc),
UserAcc2 = start_sending_changes(Callback, UserAcc, Feed),
- {ok, {_, LastSeq, _Prepend, _, _, UserAcc3, _, _, _}} =
+ {ok, {_, LastSeq, _Prepend, _, _, UserAcc3, _, _, _, _}} =
send_changes(
Args#changes_args{feed="normal"},
Callback,
@@ -199,6 +199,7 @@ send_changes(Args, Callback, UserAcc, Db, StartSeq, Prepend) ->
#changes_args{
style = Style,
include_docs = IncludeDocs,
+ conflicts = Conflicts,
limit = Limit,
feed = ResponseType,
dir = Dir,
@@ -211,7 +212,7 @@ send_changes(Args, Callback, UserAcc, Db, StartSeq, Prepend) ->
fun changes_enumerator/2,
[{dir, Dir}],
{Db, StartSeq, Prepend, FilterFun, Callback, UserAcc, ResponseType,
- Limit, IncludeDocs}
+ Limit, IncludeDocs, Conflicts}
).
keep_sending_changes(Args, Callback, UserAcc, Db, StartSeq, Prepend, Timeout,
@@ -222,7 +223,7 @@ keep_sending_changes(Args, Callback, UserAcc, Db, StartSeq, Prepend, Timeout,
db_open_options = DbOptions
} = Args,
% ?LOG_INFO("send_changes start ~p",[StartSeq]),
- {ok, {_, EndSeq, Prepend2, _, _, UserAcc2, _, NewLimit, _}} = send_changes(
+ {ok, {_, EndSeq, Prepend2, _, _, UserAcc2, _, NewLimit, _, _}} = send_changes(
Args#changes_args{dir=fwd}, Callback, UserAcc, Db, StartSeq, Prepend
),
% ?LOG_INFO("send_changes last ~p",[EndSeq]),
@@ -259,7 +260,7 @@ end_sending_changes(Callback, UserAcc, EndSeq, ResponseType) ->
Callback({stop, EndSeq}, ResponseType, UserAcc).
changes_enumerator(DocInfo, {Db, _, _, FilterFun, Callback, UserAcc,
- "continuous", Limit, IncludeDocs}) ->
+ "continuous", Limit, IncludeDocs, Conflicts}) ->
#doc_info{high_seq = Seq} = DocInfo,
Results0 = FilterFun(DocInfo),
@@ -268,17 +269,17 @@ changes_enumerator(DocInfo, {Db, _, _, FilterFun, Callback, UserAcc,
case Results of
[] ->
{Go, {Db, Seq, nil, FilterFun, Callback, UserAcc, "continuous", Limit,
- IncludeDocs}
+ IncludeDocs, Conflicts}
};
_ ->
- ChangesRow = changes_row(Db, Results, DocInfo, IncludeDocs),
+ ChangesRow = changes_row(Db, Results, DocInfo, IncludeDocs, Conflicts),
UserAcc2 = Callback({change, ChangesRow, <<>>}, "continuous", UserAcc),
{Go, {Db, Seq, nil, FilterFun, Callback, UserAcc2, "continuous",
- Limit - 1, IncludeDocs}
+ Limit - 1, IncludeDocs, Conflicts}
}
end;
changes_enumerator(DocInfo, {Db, _, Prepend, FilterFun, Callback, UserAcc,
- ResponseType, Limit, IncludeDocs}) ->
+ ResponseType, Limit, IncludeDocs, Conflicts}) ->
#doc_info{high_seq = Seq} = DocInfo,
Results0 = FilterFun(DocInfo),
@@ -287,25 +288,28 @@ changes_enumerator(DocInfo, {Db, _, Prepend, FilterFun, Callback, UserAcc,
case Results of
[] ->
{Go, {Db, Seq, Prepend, FilterFun, Callback, UserAcc, ResponseType,
- Limit, IncludeDocs}
+ Limit, IncludeDocs, Conflicts}
};
_ ->
- ChangesRow = changes_row(Db, Results, DocInfo, IncludeDocs),
+ ChangesRow = changes_row(Db, Results, DocInfo, IncludeDocs, Conflicts),
UserAcc2 = Callback({change, ChangesRow, Prepend}, ResponseType, UserAcc),
{Go, {Db, Seq, <<",\n">>, FilterFun, Callback, UserAcc2, ResponseType,
- Limit - 1, IncludeDocs}
+ Limit - 1, IncludeDocs, Conflicts}
}
end.
-changes_row(Db, Results, DocInfo, IncludeDoc) ->
+changes_row(Db, Results, DocInfo, IncludeDoc, Conflicts) ->
#doc_info{
id = Id, high_seq = Seq, revs = [#rev_info{deleted = Del} | _]
} = DocInfo,
{[{<<"seq">>, Seq}, {<<"id">>, Id}, {<<"changes">>, Results}] ++
deleted_item(Del) ++ case IncludeDoc of
- true -> couch_httpd_view:doc_member(Db, DocInfo);
- false -> []
+ true ->
+ Options = if Conflicts -> [conflicts]; true -> [] end,
+ couch_httpd_view:doc_member(Db, DocInfo, Options);
+ false ->
+ []
end}.
deleted_item(true) -> [{<<"deleted">>, true}];