Commit 777b1010 by Romain Courteaud

Release version 3.2.0

1 parent 7407f357
......@@ -6335,7 +6335,11 @@ Query.searchTextToRegExp = searchTextToRegExp;
(function (jIO, RSVP, Rusha) {
"use strict";
var rusha = new Rusha();
var rusha = new Rusha(),
CONFLICT_THROW = 0,
CONFLICT_KEEP_LOCAL = 1,
CONFLICT_KEEP_REMOTE = 2,
CONFLICT_CONTINUE = 3;
/****************************************************
Use a local jIO to read/write/search documents
......@@ -6366,6 +6370,24 @@ Query.searchTextToRegExp = searchTextToRegExp;
});
this._use_remote_post = spec.use_remote_post || false;
this._conflict_handling = spec.conflict_handling || 0;
// 0: no resolution (ie, throw an Error)
// 1: keep the local state
// (overwrites the remote document with local content)
// (delete remote document if local is deleted)
// 2: keep the remote state
// (overwrites the local document with remote content)
// (delete local document if remote is deleted)
// 3: keep both copies (leave documents untouched, no signature update)
if ((this._conflict_handling !== CONFLICT_THROW) &&
(this._conflict_handling !== CONFLICT_KEEP_LOCAL) &&
(this._conflict_handling !== CONFLICT_KEEP_REMOTE) &&
(this._conflict_handling !== CONFLICT_CONTINUE)) {
throw new jIO.util.jIOError("Unsupported conflict handling: " +
this._conflict_handling, 400);
}
this._check_local_modification = spec.check_local_modification;
if (this._check_local_modification === undefined) {
this._check_local_modification = true;
......@@ -6521,6 +6543,13 @@ Query.searchTextToRegExp = searchTextToRegExp;
skip_document_dict[id] = null;
});
}
if (options.conflict_ignore === true) {
return;
}
if (options.conflict_force === true) {
return propagateModification(source, destination, doc, local_hash,
id, options);
}
// Already exists on destination
throw new jIO.util.jIOError("Conflict on '" + id + "'",
409);
......@@ -6592,7 +6621,8 @@ Query.searchTextToRegExp = searchTextToRegExp;
});
}
function checkSignatureDifference(queue, source, destination, id) {
function checkSignatureDifference(queue, source, destination, id,
conflict_force, conflict_ignore) {
queue
.push(function () {
return RSVP.all([
......@@ -6621,8 +6651,13 @@ Query.searchTextToRegExp = searchTextToRegExp;
skip_document_dict[id] = null;
});
}
throw new jIO.util.jIOError("Conflict on '" + id + "'",
409);
if (conflict_ignore === true) {
return;
}
if (conflict_force !== true) {
throw new jIO.util.jIOError("Conflict on '" + id + "'",
409);
}
}
return propagateModification(source, destination, doc,
local_hash, id);
......@@ -6697,7 +6732,9 @@ Query.searchTextToRegExp = searchTextToRegExp;
if (signature_dict.hasOwnProperty(key)) {
if (local_dict.hasOwnProperty(key)) {
if (options.check_modification === true) {
checkSignatureDifference(queue, source, destination, key);
checkSignatureDifference(queue, source, destination, key,
options.conflict_force,
options.conflict_ignore);
}
} else {
if (options.check_deletion === true) {
......@@ -6753,6 +6790,12 @@ Query.searchTextToRegExp = searchTextToRegExp;
context._remote_sub_storage,
{
use_post: context._use_remote_post,
conflict_force: (context._conflict_handling ===
CONFLICT_KEEP_LOCAL),
conflict_ignore: ((context._conflict_handling ===
CONFLICT_CONTINUE) ||
(context._conflict_handling ===
CONFLICT_KEEP_REMOTE)),
check_modification: context._check_local_modification,
check_creation: context._check_local_creation,
check_deletion: context._check_local_deletion
......@@ -6777,6 +6820,10 @@ Query.searchTextToRegExp = searchTextToRegExp;
return pushStorage(context._remote_sub_storage,
context._local_sub_storage, {
use_bulk_get: use_bulk_get,
conflict_force: (context._conflict_handling ===
CONFLICT_KEEP_REMOTE),
conflict_ignore: (context._conflict_handling ===
CONFLICT_CONTINUE),
check_modification: context._check_remote_modification,
check_creation: context._check_remote_creation,
check_deletion: context._check_remote_deletion
......
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
{
"name": "jio",
"version": "v3.1.0",
"version": "v3.2.0",
"license": "LGPLv3",
"author": "Nexedi SA",
"contributors": [
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!