couchdb-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From rnew...@apache.org
Subject [2/2] git commit: updated refs/heads/1.3.x to 5f4a26a
Date Mon, 17 Jun 2013 14:34:04 GMT
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/5f4a26ae
Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/5f4a26ae
Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/5f4a26ae

Branch: refs/heads/1.3.x
Commit: 5f4a26ae140844770569fa04bd68280a9f0369d1
Parents: 7542366
Author: Robert Newson <rnewson@apache.org>
Authored: Mon Jun 17 11:05:01 2013 +0100
Committer: Robert Newson <rnewson@apache.org>
Committed: Mon Jun 17 15:29:24 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/5f4a26ae/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


Mime
View raw message