You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ga...@apache.org on 2013/07/02 10:46:42 UTC

[04/19] git commit: updated refs/heads/1828-duplicate-doc to 7a7db42

Restore rev handling for _bulk_docs with all_or_nothing

Commit 5b1430c120904181313848444dbfcdb60e42568b added this hunk;

-        {aborted, lists:map(
-            fun({{Id,{Pos, [RevId|_]}}, Error}) ->
-                {{Id, {Pos, RevId}}, Error};
-            ({{Id,{0, []}}, Error}) ->
-                {{Id, {0, <<>>}}, Error}
-            end, PreCommitFailures)};
+        {aborted,
+         lists:foldl(fun({#doc{id=Id,revs={Pos, RevIds}}, Ref},Acc) ->
+                         case lists:keyfind(Ref,1,PreCommitFailures) of
+                         {Ref, Error} ->
+                             [{{Id,{Pos,RevIds}}, Error} | Acc];
+                         false ->
+                             Acc
+                         end
+                     end,[],Docs3)};
+

This causes the full list of revisions to be passed to revid_to_str/1;

revid_to_str(RevId) when size(RevId) =:= 16 ->
    ?l2b(couch_util:to_hex(RevId));
revid_to_str(RevId) ->
    RevId.

This falls through to the second case, which in turn leads to invalid
JSON output when we convert the presumed iolist.

This patch restores the code that takes only the head of the revisions
list when present, and an artificial "0-" when it is not (in the case
that the validation fails for a new document rather than an update).

BugzID: 1772


Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/dfd39d57
Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/dfd39d57
Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/dfd39d57

Branch: refs/heads/1828-duplicate-doc
Commit: dfd39d570f5f841ae5e003fc8b4a2073c267e89a
Parents: 0bb6787
Author: Robert Newson <rn...@apache.org>
Authored: Mon Jun 17 11:05:01 2013 +0100
Committer: Robert Newson <rn...@apache.org>
Committed: Mon Jun 17 15:29:16 2013 +0100

----------------------------------------------------------------------
 src/couchdb/couch_db.erl | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb/blob/dfd39d57/src/couchdb/couch_db.erl
----------------------------------------------------------------------
diff --git a/src/couchdb/couch_db.erl b/src/couchdb/couch_db.erl
index 96f6719..11ea0fd 100644
--- a/src/couchdb/couch_db.erl
+++ b/src/couchdb/couch_db.erl
@@ -756,10 +756,15 @@ update_docs(Db, Docs, Options, interactive_edit) ->
 
     if (AllOrNothing) and (PreCommitFailures /= []) ->
         {aborted,
-         lists:foldl(fun({#doc{id=Id,revs={Pos, RevIds}}, Ref},Acc) ->
+         lists:foldl(fun({#doc{id=Id,revs=Revs}, Ref},Acc) ->
                          case lists:keyfind(Ref,1,PreCommitFailures) of
                          {Ref, Error} ->
-                             [{{Id,{Pos,RevIds}}, Error} | Acc];
+                             case Revs of
+                             {Pos, [RevId|_]} ->
+                                 [{{Id,{Pos, RevId}}, Error} | Acc];
+                             {0, []} ->
+                                 [{{Id,{0, <<>>}}, Error} | Acc]
+                             end;
                          false ->
                              Acc
                          end