summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--share/www/script/test/replication.js22
-rw-r--r--src/couchdb/couch_doc.erl9
2 files changed, 28 insertions, 3 deletions
diff --git a/share/www/script/test/replication.js b/share/www/script/test/replication.js
index 944c8e47..f069dc89 100644
--- a/share/www/script/test/replication.js
+++ b/share/www/script/test/replication.js
@@ -72,6 +72,7 @@ couchTests.replication = function(debug) {
},
deletes_test: new function () {
+ // make sure deletes are replicated
this.init = function(dbA, dbB) {
T(dbA.save({_id:"foo1",value:"a"}).ok);
};
@@ -90,6 +91,27 @@ couchTests.replication = function(debug) {
};
},
+ deleted_test : new function() {
+ // docs created and deleted on a single node are also replicated
+ this.init = function(dbA, dbB) {
+ T(dbA.save({_id:"del1",value:"a"}).ok);
+ var docA = dbA.open("del1");
+ dbA.deleteDoc(docA);
+ };
+
+ this.afterAB1 = function(dbA, dbB) {
+ var rows = dbB.allDocsBySeq().rows;
+ var rowCnt = 0;
+ for (var i=0; i < rows.length; i++) {
+ if (rows[i].id == "del1") {
+ rowCnt += 1;
+ T(rows[i].value.deleted == true);
+ }
+ };
+ T(rowCnt == 1);
+ };
+ },
+
slashes_in_ids_test: new function () {
// make sure docs with slashes in id replicate properly
this.init = function(dbA, dbB) {
diff --git a/src/couchdb/couch_doc.erl b/src/couchdb/couch_doc.erl
index fc817d56..3c4fd98c 100644
--- a/src/couchdb/couch_doc.erl
+++ b/src/couchdb/couch_doc.erl
@@ -129,9 +129,12 @@ from_json_obj(_Other) ->
parse_rev(Rev) when is_binary(Rev) ->
parse_rev(?b2l(Rev));
parse_rev(Rev) ->
- {Pos, [$- | RevId]} = lists:splitwith(fun($-) -> false; (_) -> true end, Rev),
- {list_to_integer(Pos), ?l2b(RevId)}.
-
+ SplitRev = lists:splitwith(fun($-) -> false; (_) -> true end, Rev),
+ case SplitRev of
+ {Pos, [$- | RevId]} -> {list_to_integer(Pos), ?l2b(RevId)};
+ _Else -> throw({bad_request, <<"Invalid rev format">>})
+ end.
+
parse_revs([]) ->
[];
parse_revs([Rev | Rest]) ->