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 st...@apache.org on 2012/08/03 17:18:11 UTC
svn commit: r1369019 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/mk/index/
oak-core/src/main/java/org/apache/jackrabbit/mk/simple/
oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/
oak-it/mk/src/main/java/org/apache/...
Author: stefan
Date: Fri Aug 3 15:18:11 2012
New Revision: 1369019
URL: http://svn.apache.org/viewvc?rev=1369019&view=rev
Log:
OAK-227: MicroKernel API: add depth parameter to diff method
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/SimpleKernelImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/LogWrapper.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/MicroKernelWrapper.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/MicroKernelWrapperBase.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/SecurityWrapper.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/VirtualRepositoryWrapper.java
jackrabbit/oak/trunk/oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/MicroKernelIT.java
jackrabbit/oak/trunk/oak-mk-api/src/main/java/org/apache/jackrabbit/mk/api/MicroKernel.java
jackrabbit/oak/trunk/oak-mk-remote/src/main/java/org/apache/jackrabbit/mk/client/Client.java
jackrabbit/oak/trunk/oak-mk-remote/src/main/java/org/apache/jackrabbit/mk/server/MicroKernelServlet.java
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/core/MicroKernelImpl.java
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/CommitBuilder.java
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/tree/DiffBuilder.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java?rev=1369019&r1=1369018&r2=1369019&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/IndexWrapper.java Fri Aug 3 15:18:11 2012
@@ -172,8 +172,8 @@ public class IndexWrapper extends MicroK
}
@Override
- public JsopReader diffStream(String fromRevisionId, String toRevisionId, String path) {
- return mk.diffStream(fromRevisionId, toRevisionId, path);
+ public JsopReader diffStream(String fromRevisionId, String toRevisionId, String path, int depth) {
+ return mk.diffStream(fromRevisionId, toRevisionId, path, depth);
}
@Override
@@ -182,11 +182,6 @@ public class IndexWrapper extends MicroK
}
@Override
- public JsopReader getNodesStream(String path, String revisionId) {
- return getNodesStream(path, revisionId, 1, 0, -1, null);
- }
-
- @Override
public JsopReader getRevisionsStream(long since, int maxEntries, String path) {
return mk.getRevisionsStream(since, maxEntries, path);
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/SimpleKernelImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/SimpleKernelImpl.java?rev=1369019&r1=1369018&r2=1369019&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/SimpleKernelImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/SimpleKernelImpl.java Fri Aug 3 15:18:11 2012
@@ -453,7 +453,7 @@ public class SimpleKernelImpl extends Mi
@Override
- public JsopReader diffStream(String fromRevisionId, String toRevisionId, String path) {
+ public JsopReader diffStream(String fromRevisionId, String toRevisionId, String path, int depth) {
fromRevisionId = fromRevisionId == null ? headRevision : fromRevisionId;
toRevisionId = toRevisionId == null ? headRevision : toRevisionId;
// TODO implement if required
@@ -471,11 +471,6 @@ public class SimpleKernelImpl extends Mi
* @return the json string
*/
@Override
- public JsopReader getNodesStream(String path, String revisionId) {
- return getNodesStream(path, revisionId, 1, 0, -1, null);
- }
-
- @Override
public JsopReader getNodesStream(String path, String revisionId, int depth, long offset, int count, String filter) {
revisionId = revisionId == null ? headRevision : revisionId;
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/LogWrapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/LogWrapper.java?rev=1369019&r1=1369018&r2=1369019&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/LogWrapper.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/LogWrapper.java Fri Aug 3 15:18:11 2012
@@ -82,10 +82,10 @@ public class LogWrapper implements Micro
}
@Override
- public String diff(String fromRevisionId, String toRevisionId, String path) {
+ public String diff(String fromRevisionId, String toRevisionId, String path, int depth) {
try {
logMethod("diff", fromRevisionId, toRevisionId, path);
- String result = mk.diff(fromRevisionId, toRevisionId, path);
+ String result = mk.diff(fromRevisionId, toRevisionId, path, depth);
logResult(result);
return result;
} catch (Exception e) {
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/MicroKernelWrapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/MicroKernelWrapper.java?rev=1369019&r1=1369018&r2=1369019&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/MicroKernelWrapper.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/MicroKernelWrapper.java Fri Aug 3 15:18:11 2012
@@ -30,12 +30,10 @@ public interface MicroKernelWrapper exte
JsopReader getJournalStream(String fromRevisionId, String toRevisionId, String path) throws MicroKernelException;
- JsopReader getNodesStream(String path, String revisionId) throws MicroKernelException;
-
JsopReader getNodesStream(String path, String revisionId, int depth, long offset, int count, String filter) throws MicroKernelException;
String commitStream(String path, JsopReader jsonDiff, String revisionId, String message) throws MicroKernelException;
- JsopReader diffStream(String fromRevisionId, String toRevisionId, String path);
+ JsopReader diffStream(String fromRevisionId, String toRevisionId, String path, int depth);
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/MicroKernelWrapperBase.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/MicroKernelWrapperBase.java?rev=1369019&r1=1369018&r2=1369019&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/MicroKernelWrapperBase.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/MicroKernelWrapperBase.java Fri Aug 3 15:18:11 2012
@@ -50,8 +50,8 @@ public abstract class MicroKernelWrapper
}
@Override
- public final String diff(String fromRevisionId, String toRevisionId, String path) {
- return diffStream(fromRevisionId, toRevisionId, path).toString();
+ public final String diff(String fromRevisionId, String toRevisionId, String path, int depth) {
+ return diffStream(fromRevisionId, toRevisionId, path, depth).toString();
}
@Override
@@ -115,16 +115,6 @@ public abstract class MicroKernelWrapper
}
@Override
- public JsopReader getNodesStream(String path, String revisionId) {
- String json = wrapped.getNodes(path, revisionId, 1, 0, -1, null);
- if (json != null) {
- return new JsopTokenizer(json);
- } else {
- return null;
- }
- }
-
- @Override
public JsopReader getNodesStream(String path, String revisionId, int depth, long offset, int count, String filter) {
String json = wrapped.getNodes(
path, revisionId, depth, offset, count, filter);
@@ -141,8 +131,8 @@ public abstract class MicroKernelWrapper
}
@Override
- public JsopReader diffStream(String fromRevisionId, String toRevisionId, String path) {
- return new JsopTokenizer(wrapped.diff(fromRevisionId, toRevisionId, path));
+ public JsopReader diffStream(String fromRevisionId, String toRevisionId, String path, int depth) {
+ return new JsopTokenizer(wrapped.diff(fromRevisionId, toRevisionId, path, depth));
}
@Override
@@ -161,8 +151,8 @@ public abstract class MicroKernelWrapper
}
@Override
- public String diff(String fromRevisionId, String toRevisionId, String path) {
- return wrapped.diff(fromRevisionId, toRevisionId, path);
+ public String diff(String fromRevisionId, String toRevisionId, String path, int depth) {
+ return wrapped.diff(fromRevisionId, toRevisionId, path, depth);
}
@Override
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/SecurityWrapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/SecurityWrapper.java?rev=1369019&r1=1369018&r2=1369019&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/SecurityWrapper.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/SecurityWrapper.java Fri Aug 3 15:18:11 2012
@@ -150,9 +150,9 @@ public class SecurityWrapper extends Mic
}
@Override
- public JsopReader diffStream(String fromRevisionId, String toRevisionId, String path) {
+ public JsopReader diffStream(String fromRevisionId, String toRevisionId, String path, int depth) {
rightsRevision = getHeadRevision();
- JsopReader diff = mk.diffStream(fromRevisionId, toRevisionId, path);
+ JsopReader diff = mk.diffStream(fromRevisionId, toRevisionId, path, depth);
if (admin) {
return diff;
}
@@ -285,11 +285,6 @@ public class SecurityWrapper extends Mic
}
@Override
- public JsopReader getNodesStream(String path, String revisionId) {
- return getNodesStream(path, revisionId, 1, 0, -1, null);
- }
-
- @Override
public JsopReader getNodesStream(String path, String revisionId, int depth, long offset, int count, String filter) {
rightsRevision = getHeadRevision();
if (!checkRights(path, false)) {
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/VirtualRepositoryWrapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/VirtualRepositoryWrapper.java?rev=1369019&r1=1369018&r2=1369019&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/VirtualRepositoryWrapper.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/wrapper/VirtualRepositoryWrapper.java Fri Aug 3 15:18:11 2012
@@ -261,8 +261,8 @@ public class VirtualRepositoryWrapper ex
}
@Override
- public JsopReader diffStream(String fromRevisionId, String toRevisionId, String path) throws MicroKernelException {
- return mk.diffStream(fromRevisionId, toRevisionId, path);
+ public JsopReader diffStream(String fromRevisionId, String toRevisionId, String path, int depth) throws MicroKernelException {
+ return mk.diffStream(fromRevisionId, toRevisionId, path, depth);
}
@Override
@@ -271,11 +271,6 @@ public class VirtualRepositoryWrapper ex
}
@Override
- public JsopReader getNodesStream(String path, String revisionId) {
- return getNodesStream(path, revisionId, 1, 0, -1, null);
- }
-
- @Override
public JsopReader getNodesStream(String path, String revisionId, int depth, long offset, int count, String filter) {
String mount = getMount(path);
if (mount == null) {
Modified: jackrabbit/oak/trunk/oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/MicroKernelIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/MicroKernelIT.java?rev=1369019&r1=1369018&r2=1369019&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/MicroKernelIT.java (original)
+++ jackrabbit/oak/trunk/oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/MicroKernelIT.java Fri Aug 3 15:18:11 2012
@@ -210,7 +210,7 @@ public class MicroKernelIT extends Abstr
assertTrue(mk.nodeExists("/test/target", null));
// get reverse diff
- String reverseDiff = mk.diff(rev1, rev0, null);
+ String reverseDiff = mk.diff(rev1, rev0, null, -1);
assertNotNull(reverseDiff);
assertTrue(reverseDiff.length() > 0);
@@ -219,7 +219,7 @@ public class MicroKernelIT extends Abstr
assertFalse(mk.nodeExists("/test/target", null));
// diff of rev0->rev2 should be empty
- assertEquals("", mk.diff(rev0, rev2, null));
+ assertEquals("", mk.diff(rev0, rev2, null, -1));
}
@Test
@@ -230,7 +230,7 @@ public class MicroKernelIT extends Abstr
String rev2 = mk.commit("/test/bar", "^\"p2\":456", null, "");
// test with path filter
- String diff = mk.diff(rev0, rev2, "/test");
+ String diff = mk.diff(rev0, rev2, "/test", -1);
assertNotNull(diff);
assertFalse(diff.isEmpty());
assertTrue(diff.contains("foo"));
@@ -238,7 +238,7 @@ public class MicroKernelIT extends Abstr
assertTrue(diff.contains("123"));
assertTrue(diff.contains("456"));
- diff = mk.diff(rev0, rev2, "/test/foo");
+ diff = mk.diff(rev0, rev2, "/test/foo", -1);
assertNotNull(diff);
assertFalse(diff.isEmpty());
assertTrue(diff.contains("foo"));
@@ -247,12 +247,55 @@ public class MicroKernelIT extends Abstr
assertFalse(diff.contains("456"));
// non-matching filter
- diff = mk.diff(rev0, rev2, "/blah");
+ diff = mk.diff(rev0, rev2, "/blah", -1);
assertNotNull(diff);
assertTrue(diff.isEmpty());
}
@Test
+ public void diffDepthLimited() {
+ // initial content (/test/foo)
+ String rev0 = mk.commit("/test", "+\"foo\":{}", null, "");
+
+ // add /test/foo/bar
+ String rev1 = mk.commit("/test/foo", "+\"bar\":{\"p1\":123}", null, "");
+
+ // modify property /test/foo/bar/p1
+ String rev2 = mk.commit("/test/foo/bar", "^\"p1\":456", null, "");
+
+ // diff with depth -1
+ assertEquals(mk.diff(rev0, rev2, "/", Integer.MAX_VALUE), mk.diff(rev0, rev2, "/", -1));
+
+ // diff with depth 5
+ String diff = mk.diff(rev0, rev2, "/", 5);
+ // returned +"/test/foo/bar":{"p1":456}
+ assertNotNull(diff);
+ assertFalse(diff.isEmpty());
+ assertTrue(diff.contains("/test/foo/bar"));
+ assertTrue(diff.contains("456"));
+
+ // diff with depth 0
+ diff = mk.diff(rev0, rev2, "/", 0);
+ // returned ^"/test", indicating that there are changes below /test
+ assertNotNull(diff);
+ assertFalse(diff.isEmpty());
+ assertFalse(diff.contains("/test/foo"));
+ assertFalse(diff.contains("456"));
+ assertTrue(diff.contains("/test"));
+ assertTrue(diff.startsWith("^"));
+
+ // diff with depth 1
+ diff = mk.diff(rev0, rev2, "/", 1);
+ // returned ^"/test/foo", indicating that there are changes below /test/foo
+ assertNotNull(diff);
+ assertFalse(diff.isEmpty());
+ assertFalse(diff.contains("/test/foo/bar"));
+ assertFalse(diff.contains("456"));
+ assertTrue(diff.contains("/test/foo"));
+ assertTrue(diff.startsWith("^"));
+ }
+
+ @Test
public void snapshotIsolation() {
final int NUM_COMMITS = 1000;
Modified: jackrabbit/oak/trunk/oak-mk-api/src/main/java/org/apache/jackrabbit/mk/api/MicroKernel.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk-api/src/main/java/org/apache/jackrabbit/mk/api/MicroKernel.java?rev=1369019&r1=1369018&r2=1369019&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mk-api/src/main/java/org/apache/jackrabbit/mk/api/MicroKernel.java (original)
+++ jackrabbit/oak/trunk/oak-mk-api/src/main/java/org/apache/jackrabbit/mk/api/MicroKernel.java Fri Aug 3 15:18:11 2012
@@ -103,7 +103,7 @@ public interface MicroKernel {
* @param maxEntries maximum #entries to be returned;
* if < 0, no limit will be applied.
* @param path optional path filter; if {@code null} or {@code ""} the
- * default ({@code"/"}) will be assumed, i.e. no filter
+ * default ({@code "/"}) will be assumed, i.e. no filter
* will be applied
* @return a list of revisions in chronological order in JSON format.
* @throws MicroKernelException if an error occurs
@@ -165,7 +165,7 @@ public interface MicroKernel {
* @param toRevisionId id of last revision to be returned in journal,
* if {@code null} the current head revision is assumed
* @param path optional path filter; if {@code null} or {@code ""}
- * the default ({@code"/"}) will be assumed, i.e. no
+ * the default ({@code "/"}) will be assumed, i.e. no
* filter will be applied
* @return a chronological list of revisions in JSON format
* @throws MicroKernelException if an error occurs
@@ -183,17 +183,41 @@ public interface MicroKernel {
* The {@code path} parameter allows to filter the changes included in the
* JSON diff, i.e. only those changes that affected the subtree rooted at
* {@code path} will be included.
+ * <p/>
+ * The {@code depth} limit applies to the subtree rooted at {@code path}.
+ * It allows to limit the depth of the diff, i.e. only changes up to the
+ * specified depth will be included in full detail. changes at paths exceeding
+ * the specified depth limit will be reported as {@code ^"/some/path"},
+ * indicating that there are unspecified changes below that path.
+ * <table border="1">
+ * <tr>
+ * <th>{@code depth} value</th><th>scope of detailed diff</th>
+ * </tr>
+ * <tr>
+ * <td>-1</td><td>no limit will be applied</td>
+ * </tr>
+ * <tr>
+ * <td>0</td><td>changes affecting the properties and child node names of the node at {@code path}</td>
+ * </tr>
+ * <tr>
+ * <td>1</td><td>changes affecting the properties and child node names of the node at {@code path} and its direct descendants</td>
+ * </tr>
+ * <tr>
+ * <td>...</td><td>...</td>
+ * </tr>
+ * </table>
*
* @param fromRevisionId a revision id, if {@code null} the current head revision is assumed
* @param toRevisionId another revision id, if {@code null} the current head revision is assumed
* @param path optional path filter; if {@code null} or {@code ""}
- * the default ({@code"/"}) will be assumed, i.e. no
+ * the default ({@code "/"}) will be assumed, i.e. no
* filter will be applied
+ * @param depth depth limit; if {@code -1} no limit will be applied
* @return JSON diff representation of the changes
* @throws MicroKernelException if an error occurs
*/
String /* JSON diff */ diff(String fromRevisionId, String toRevisionId,
- String path)
+ String path, int depth)
throws MicroKernelException;
//-------------------------------------------------------------< READ ops >
@@ -287,7 +311,7 @@ public interface MicroKernel {
* specified.
* <p/>
* The order of the child nodes is stable for any given {@code revisionId},
- * i.e. calling {@link #getNodes} repeatedly with the same {@code revisionId}
+ * i.e. calling {@code getNodes} repeatedly with the same {@code revisionId}
* is guaranteed to return the child nodes in the same order, but the
* specific order used is implementation-dependent and may change across
* different revisions of the same node.
Modified: jackrabbit/oak/trunk/oak-mk-remote/src/main/java/org/apache/jackrabbit/mk/client/Client.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk-remote/src/main/java/org/apache/jackrabbit/mk/client/Client.java?rev=1369019&r1=1369018&r2=1369019&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mk-remote/src/main/java/org/apache/jackrabbit/mk/client/Client.java (original)
+++ jackrabbit/oak/trunk/oak-mk-remote/src/main/java/org/apache/jackrabbit/mk/client/Client.java Fri Aug 3 15:18:11 2012
@@ -166,7 +166,7 @@ public class Client implements MicroKern
}
@Override
- public String diff(String fromRevisionId, String toRevisionId, String path)
+ public String diff(String fromRevisionId, String toRevisionId, String path, int depth)
throws MicroKernelException {
Request request = null;
@@ -175,6 +175,7 @@ public class Client implements MicroKern
request.addParameter("from_revision_id", fromRevisionId);
request.addParameter("to_revision_id", toRevisionId);
request.addParameter("path", path);
+ request.addParameter("depth", depth);
return request.getString();
} catch (IOException e) {
throw toMicroKernelException(e);
Modified: jackrabbit/oak/trunk/oak-mk-remote/src/main/java/org/apache/jackrabbit/mk/server/MicroKernelServlet.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk-remote/src/main/java/org/apache/jackrabbit/mk/server/MicroKernelServlet.java?rev=1369019&r1=1369018&r2=1369019&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mk-remote/src/main/java/org/apache/jackrabbit/mk/server/MicroKernelServlet.java (original)
+++ jackrabbit/oak/trunk/oak-mk-remote/src/main/java/org/apache/jackrabbit/mk/server/MicroKernelServlet.java Fri Aug 3 15:18:11 2012
@@ -175,9 +175,10 @@ class MicroKernelServlet {
String fromRevisionId = request.getParameter("from_revision_id", headRevision);
String toRevisionId = request.getParameter("to_revision_id", headRevision);
String path = request.getParameter("path", "");
+ int depth = request.getParameter("depth", 1);
response.setContentType("application/json");
- String json = mk.diff(fromRevisionId, toRevisionId, path);
+ String json = mk.diff(fromRevisionId, toRevisionId, path, depth);
if (request.getHeaders().containsKey("User-Agent")) {
json = JsopBuilder.prettyPrint(json);
}
Modified: jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/core/MicroKernelImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/core/MicroKernelImpl.java?rev=1369019&r1=1369018&r2=1369019&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/core/MicroKernelImpl.java (original)
+++ jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/core/MicroKernelImpl.java Fri Aug 3 15:18:11 2012
@@ -130,7 +130,7 @@ public class MicroKernelImpl implements
String diff = new DiffBuilder(
rep.getNodeState(commit.getParentId(), "/"),
rep.getNodeState(commit.getId(), "/"),
- "/", rep.getRevisionStore(), path).build();
+ "/", -1, rep.getRevisionStore(), path).build();
if (!diff.isEmpty()) {
history.add(commit);
}
@@ -237,7 +237,7 @@ public class MicroKernelImpl implements
diff = new DiffBuilder(
rep.getNodeState(commit.getParentId(), "/"),
rep.getNodeState(commit.getId(), "/"),
- "/", rep.getRevisionStore(), path).build();
+ "/", -1, rep.getRevisionStore(), path).build();
if (diff.isEmpty()) {
continue;
}
@@ -254,9 +254,13 @@ public class MicroKernelImpl implements
return commitBuff.endArray().toString();
}
- public String diff(String fromRevision, String toRevision, String path) throws MicroKernelException {
+ public String diff(String fromRevision, String toRevision, String path, int depth) throws MicroKernelException {
path = (path == null || "".equals(path)) ? "/" : path;
+ if (depth < -1) {
+ throw new IllegalArgumentException("depth");
+ }
+
Id fromRevisionId, toRevisionId;
if (fromRevision == null || toRevision == null) {
Id head = getHeadRevisionId();
@@ -283,7 +287,7 @@ public class MicroKernelImpl implements
NodeState before = rep.getNodeState(fromRevisionId, path);
NodeState after = rep.getNodeState(toRevisionId, path);
- return new DiffBuilder(before, after, path, rep.getRevisionStore(), path).build();
+ return new DiffBuilder(before, after, path, depth, rep.getRevisionStore(), path).build();
} catch (Exception e) {
throw new MicroKernelException(e);
}
Modified: jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/CommitBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/CommitBuilder.java?rev=1369019&r1=1369018&r2=1369019&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/CommitBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/CommitBuilder.java Fri Aug 3 15:18:11 2012
@@ -224,7 +224,7 @@ public class CommitBuilder {
String diff = new DiffBuilder(
store.getNodeState(store.getRootNode(currentHead)),
store.getNodeState(store.getNode(rootNodeId)),
- "/", store, "").build();
+ "/", -1, store, "").build();
newCommit.setChanges(diff);
newCommit.setRootNodeId(rootNodeId);
newCommit.setBranchRootId(null);
Modified: jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/tree/DiffBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/tree/DiffBuilder.java?rev=1369019&r1=1369018&r2=1369019&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/tree/DiffBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/tree/DiffBuilder.java Fri Aug 3 15:18:11 2012
@@ -30,17 +30,18 @@ public class DiffBuilder {
private final NodeState before;
private final NodeState after;
private final String path;
+ private final int depth;
private final String pathFilter;
private final NodeStore store;
- public DiffBuilder(NodeState before, NodeState after, String path,
+ public DiffBuilder(NodeState before, NodeState after, String path, int depth,
NodeStore store, String pathFilter) {
this.before = before;
this.after = after;
this.path = path;
+ this.depth = depth;
this.store = store;
this.pathFilter = (pathFilter == null || "".equals(pathFilter)) ? "/" : pathFilter;
-
}
public String build() throws Exception {
@@ -72,6 +73,7 @@ public class DiffBuilder {
}
TraversingNodeDiffHandler diffHandler = new TraversingNodeDiffHandler(store) {
+ int levels = depth < 0 ? Integer.MAX_VALUE : depth;
@Override
public void propertyAdded(PropertyState after) {
String p = PathUtils.concat(getCurrentPath(), after.getName());
@@ -136,7 +138,16 @@ public class DiffBuilder {
String p = PathUtils.concat(getCurrentPath(), name);
if (PathUtils.isAncestor(p, pathFilter)
|| p.startsWith(pathFilter)) {
- super.childNodeChanged(name, before, after);
+ --levels;
+ if (levels >= 0) {
+ // recurse
+ super.childNodeChanged(name, before, after);
+ } else {
+ buff.tag('^');
+ buff.value(p);
+ buff.newline();
+ }
+ ++levels;
}
}
};
@@ -156,6 +167,7 @@ public class DiffBuilder {
// TODO refactor code, avoid duplication
diffHandler = new TraversingNodeDiffHandler(store) {
+ int levels = depth < 0 ? Integer.MAX_VALUE : depth;
@Override
public void propertyAdded(PropertyState after) {
String p = PathUtils.concat(getCurrentPath(), after.getName());
@@ -226,7 +238,16 @@ public class DiffBuilder {
String p = PathUtils.concat(getCurrentPath(), name);
if (PathUtils.isAncestor(p, pathFilter)
|| p.startsWith(pathFilter)) {
- super.childNodeChanged(name, before, after);
+ --levels;
+ if (levels >= 0) {
+ // recurse
+ super.childNodeChanged(name, before, after);
+ } else {
+ buff.tag('^');
+ buff.value(p);
+ buff.newline();
+ }
+ ++levels;
}
}
};