diff options
author | Damien F. Katz <damien@apache.org> | 2009-07-17 21:33:41 +0000 |
---|---|---|
committer | Damien F. Katz <damien@apache.org> | 2009-07-17 21:33:41 +0000 |
commit | 91bf33fdc69c2087707795b8822b0fa7617f8709 (patch) | |
tree | f01ba98e03b77923d8256e9dd7cdca997ba06cf2 /src/couchdb/couch_key_tree.erl | |
parent | 627562eef0290bcf07659f40d7ba85c333978ce6 (diff) |
Deterministic revids, MD5 checking of documents, added tracking of rev when an attachment is edited to allow attachment level replication.
git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@795232 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/couchdb/couch_key_tree.erl')
-rw-r--r-- | src/couchdb/couch_key_tree.erl | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/couchdb/couch_key_tree.erl b/src/couchdb/couch_key_tree.erl index 647a3455..830820f3 100644 --- a/src/couchdb/couch_key_tree.erl +++ b/src/couchdb/couch_key_tree.erl @@ -278,13 +278,20 @@ count_leafs_simple([{_Key, _Value, SubTree} | RestTree]) -> map(_Fun, []) -> []; map(Fun, [{Pos, Tree}|Rest]) -> - [NewTree] = map_simple(Fun, Pos, [Tree]), - [{Pos, NewTree} | map(Fun, Rest)]. + case erlang:fun_info(Fun, arity) of + {arity, 2} -> + [NewTree] = map_simple(fun(A,B,_C) -> Fun(A,B) end, Pos, [Tree]), + [{Pos, NewTree} | map(Fun, Rest)]; + {arity, 3} -> + [NewTree] = map_simple(Fun, Pos, [Tree]), + [{Pos, NewTree} | map(Fun, Rest)] + end. map_simple(_Fun, _Pos, []) -> []; map_simple(Fun, Pos, [{Key, Value, SubTree} | RestTree]) -> - Value2 = Fun({Pos, Key}, Value), + Value2 = Fun({Pos, Key}, Value, + if SubTree == [] -> leaf; true -> branch end), [{Key, Value2, map_simple(Fun, Pos + 1, SubTree)} | map_simple(Fun, Pos, RestTree)]. |