diff options
Diffstat (limited to 'src/couchdb/couch_changes.erl')
-rw-r--r-- | src/couchdb/couch_changes.erl | 32 |
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}]; |