### Eclipse Workspace Patch 1.0 #P oak-mk Index: src/main/java/org/apache/jackrabbit/mk/model/tree/DiffBuilder.java =================================================================== --- src/main/java/org/apache/jackrabbit/mk/model/tree/DiffBuilder.java (revision 1433354) +++ src/main/java/org/apache/jackrabbit/mk/model/tree/DiffBuilder.java (working copy) @@ -60,7 +60,7 @@ if (before == null) { if (after != null) { buff.tag('+').key(path).object(); - toJson(buff, after); + toJson(buff, after, depth); return buff.endObject().newline().toString(); } else { // path doesn't exist in the specified revisions @@ -117,7 +117,7 @@ addedNodes.put(after, p); buff.tag('+'). key(p).object(); - toJson(buff, after); + toJson(buff, after, depth); buff.endObject().newline(); } } @@ -215,7 +215,7 @@ if (p.startsWith(pathFilter)) { buff.tag('+'). key(p).object(); - toJson(buff, after); + toJson(buff, after, depth); buff.endObject().newline(); } } @@ -267,14 +267,16 @@ return buff.toString(); } - private void toJson(JsopBuilder builder, NodeState node) { + private void toJson(JsopBuilder builder, NodeState node, int depth) { for (PropertyState property : node.getProperties()) { builder.key(property.getName()).encodedValue(property.getEncodedValue()); } - for (ChildNode entry : node.getChildNodeEntries(0, -1)) { - builder.key(entry.getName()).object(); - toJson(builder, entry.getNode()); - builder.endObject(); + if (depth != 0) { + for (ChildNode entry : node.getChildNodeEntries(0, -1)) { + builder.key(entry.getName()).object(); + toJson(builder, entry.getNode(), depth < 0 ? depth : depth - 1); + builder.endObject(); + } } } } Index: src/test/java/org/apache/jackrabbit/mk/MicroKernelImplTest.java =================================================================== --- src/test/java/org/apache/jackrabbit/mk/MicroKernelImplTest.java (revision 1433354) +++ src/test/java/org/apache/jackrabbit/mk/MicroKernelImplTest.java (working copy) @@ -63,4 +63,15 @@ headRev = mk.commit("/", "+\"b\" : {}", mk.getHeadRevision(), null); assertFalse("Commit must not have same id as branch", headRev.equals(branchRev)); } + + @Test + public void diffWithDepth() { + String head = mk.getHeadRevision(); + String r1 = mk.commit("/", "+\"a\" : { \"l\": 1, \"x\": { \"l\": 2, \"y\": {} } }", head, null); + String r2 = mk.commit("/", ">\"a\" : \"b\"", r1, null); + assertEquals("+\"/b\":{\"l\":1}", mk.diff(r1, r2, "/b", 0).trim()); + assertEquals("+\"/b\":{\"l\":1,\"x\":{\"l\":2}}", mk.diff(r1, r2, "/b", 1).trim()); + assertEquals("+\"/b\":{\"l\":1,\"x\":{\"l\":2,\"y\":{}}}", mk.diff(r1, r2, "/b", -1).trim()); + } + }