You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by mr...@apache.org on 2015/10/08 11:57:18 UTC
svn commit: r1707467 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/plugins/document/
test/java/org/apache/jackrabbit/oak/plugins/document/
Author: mreutegg
Date: Thu Oct 8 09:57:18 2015
New Revision: 1707467
URL: http://svn.apache.org/viewvc?rev=1707467&view=rev
Log:
OAK-3497: Remove DocumentNodeStore.diff()
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentMK.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/SimpleTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentMK.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentMK.java?rev=1707467&r1=1707466&r2=1707467&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentMK.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentMK.java Thu Oct 8 09:57:18 2015
@@ -42,6 +42,7 @@ import org.apache.jackrabbit.oak.commons
import org.apache.jackrabbit.oak.commons.json.JsopReader;
import org.apache.jackrabbit.oak.commons.json.JsopStream;
import org.apache.jackrabbit.oak.commons.json.JsopTokenizer;
+import org.apache.jackrabbit.oak.json.JsopDiff;
import org.apache.jackrabbit.oak.plugins.blob.ReferencedBlob;
import org.apache.jackrabbit.oak.plugins.document.DocumentNodeState.Children;
import org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore;
@@ -171,11 +172,21 @@ public class DocumentMK {
if (path == null || path.equals("")) {
path = "/";
}
- try {
- return nodeStore.diff(fromRevisionId, toRevisionId, path);
- } catch (DocumentStoreException e) {
- throw new DocumentStoreException(e);
+ Revision fromRev = Revision.fromString(fromRevisionId);
+ Revision toRev = Revision.fromString(toRevisionId);
+ final DocumentNodeState before = nodeStore.getNode(path, fromRev);
+ final DocumentNodeState after = nodeStore.getNode(path, toRev);
+ if (before == null || after == null) {
+ // TODO implement correct behavior if the node doesn't/didn't exist
+ String msg = String.format("Diff is only supported if the node exists in both cases. " +
+ "Node [%s], fromRev [%s] -> %s, toRev [%s] -> %s",
+ path, fromRev, before != null, toRev, after != null);
+ throw new DocumentStoreException(msg);
}
+
+ JsopDiff diff = new JsopDiff(path, depth);
+ after.compareAgainstBaseState(before, diff);
+ return diff.toString();
}
public boolean nodeExists(String path, String revisionId)
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java?rev=1707467&r1=1707466&r2=1707467&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java Thu Oct 8 09:57:18 2015
@@ -75,7 +75,6 @@ import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.common.util.concurrent.UncheckedExecutionException;
-import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.commons.IOUtils;
import org.apache.jackrabbit.oak.commons.jmx.AnnotatedStandardMBean;
import org.apache.jackrabbit.oak.commons.json.JsopReader;
@@ -1432,58 +1431,6 @@ public final class DocumentNodeStore
}), node, base, diff);
}
- String diff(@Nonnull final String fromRevisionId,
- @Nonnull final String toRevisionId,
- @Nonnull final String path) throws DocumentStoreException {
- if (fromRevisionId.equals(toRevisionId)) {
- return "";
- }
- Revision fromRev = Revision.fromString(fromRevisionId);
- Revision toRev = Revision.fromString(toRevisionId);
- final DocumentNodeState from = getNode(path, fromRev);
- final DocumentNodeState to = getNode(path, toRev);
- if (from == null || to == null) {
- // TODO implement correct behavior if the node doesn't/didn't exist
- String msg = String.format("Diff is only supported if the node exists in both cases. " +
- "Node [%s], fromRev [%s] -> %s, toRev [%s] -> %s",
- path, fromRev, from != null, toRev, to != null);
- throw new DocumentStoreException(msg);
- }
- String compactDiff = diffCache.getChanges(fromRev, toRev, path,
- new DiffCache.Loader() {
- @Override
- public String call() {
- // calculate the diff
- return diffImpl(from, to);
- }
- });
- JsopWriter writer = new JsopStream();
- diffProperties(from, to, writer);
- JsopTokenizer t = new JsopTokenizer(compactDiff);
- int r;
- do {
- r = t.read();
- switch (r) {
- case '+':
- case '^': {
- String name = t.readString();
- t.read(':');
- t.read('{');
- t.read('}');
- writer.tag((char) r).key(concat(path, name));
- writer.object().endObject().newline();
- break;
- }
- case '-': {
- String name = t.readString();
- writer.tag('-').value(concat(path, name));
- writer.newline();
- }
- }
- } while (r != JsopReader.END);
- return writer.toString();
- }
-
/**
* Creates a tracker for the given commit revision.
*
@@ -2255,31 +2202,6 @@ public final class DocumentNodeStore
return false;
}
- private static void diffProperties(DocumentNodeState from,
- DocumentNodeState to,
- JsopWriter w) {
- for (PropertyState fromValue : from.getProperties()) {
- String name = fromValue.getName();
- // changed or removed properties
- PropertyState toValue = to.getProperty(name);
- if (!fromValue.equals(toValue)) {
- w.tag('^').key(concat(from.getPath(), name));
- if (toValue == null) {
- w.value(null);
- } else {
- w.encodedValue(to.getPropertyAsString(name)).newline();
- }
- }
- }
- for (String name : to.getPropertyNames()) {
- // added properties
- if (!from.hasProperty(name)) {
- w.tag('^').key(concat(from.getPath(), name))
- .encodedValue(to.getPropertyAsString(name)).newline();
- }
- }
- }
-
private String diffImpl(DocumentNodeState from, DocumentNodeState to)
throws DocumentStoreException {
JsopWriter w = new JsopStream();
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java?rev=1707467&r1=1707466&r2=1707467&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java Thu Oct 8 09:57:18 2015
@@ -841,8 +841,9 @@ public class DocumentNodeStoreTest {
indexedProperty, startValue, limit);
}
};
- final DocumentNodeStore ns = builderProvider.newBuilder()
- .setDocumentStore(store).getNodeStore();
+ final DocumentMK mk = builderProvider.newBuilder()
+ .setDocumentStore(store).open();
+ final DocumentNodeStore ns = mk.getNodeStore();
NodeBuilder builder = ns.getRoot().builder();
// make sure we have enough children to trigger diffManyChildren
for (int i = 0; i < DocumentMK.MANY_CHILDREN_THRESHOLD * 2; i++) {
@@ -864,7 +865,7 @@ public class DocumentNodeStoreTest {
try {
ready.countDown();
go.await();
- ns.diff(head.toString(), to.toString(), "/");
+ mk.diff(head.toString(), to.toString(), "/", 0);
} catch (InterruptedException e) {
// ignore
}
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/SimpleTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/SimpleTest.java?rev=1707467&r1=1707466&r2=1707467&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/SimpleTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/SimpleTest.java Thu Oct 8 09:57:18 2015
@@ -159,7 +159,7 @@ public class SimpleTest {
String diff23 = mk.diff(rev2, rev3, "/", 0).trim();
assertEquals("+\"/t3\":{}", diff23);
String diff13 = mk.diff(rev1, rev3, "/", 0).trim();
- assertEquals("+\"/t2\":{}\n+\"/t3\":{}", diff13);
+ assertEquals("+\"/t2\":{}+\"/t3\":{}", diff13);
String diff34 = mk.diff(rev3, rev4, "/", 0).trim();
assertEquals("^\"/t3\":{}", diff34);
}