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/04/20 17:18:20 UTC

svn commit: r1328397 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/mk/simple/ oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/ oak-mk/src/main/java/org/apache/jackrabbit/mk/core/ oak-mk/src/main/java/org/apache/jackrabb...

Author: stefan
Date: Fri Apr 20 15:18:19 2012
New Revision: 1328397

URL: http://svn.apache.org/viewvc?rev=1328397&view=rev
Log:
 OAK-45: Add support for branching and merging of private copies to MicroKernel 
 
 - added basic test case for branch & merge 
 - fixed a bug in StoredCommit which caused getJournal to fail
 - integration tests currently fail with UnsupportedOperationException when using the non-default mk impl in oak-core

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/simple/SimpleKernelImpl.java
    jackrabbit/oak/trunk/oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/MicroKernelIT.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/StoredCommit.java

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=1328397&r1=1328396&r2=1328397&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 Apr 20 15:18:19 2012
@@ -130,6 +130,8 @@ public class SimpleKernelImpl extends Mi
     }
 
     public synchronized String commitStream(String rootPath, JsopReader jsonDiff, String revisionId, String message) {
+        revisionId = revisionId == null ? headRevision : revisionId;
+
         // TODO message should be json
         // TODO read / write version
         // TODO getJournal and getRevision don't have a path,
@@ -380,6 +382,9 @@ public class SimpleKernelImpl extends Mi
     }
 
     public JsopReader getJournalStream(String fromRevisionId, String toRevisionId, String filter) {
+        fromRevisionId = fromRevisionId == null ? headRevision : fromRevisionId;
+        toRevisionId = toRevisionId == null ? headRevision : toRevisionId;
+
         long fromRev = Revision.parseId(fromRevisionId);
         long toRev = Revision.parseId(toRevisionId);
         NodeImpl node = getRoot();
@@ -444,6 +449,8 @@ public class SimpleKernelImpl extends Mi
 
 
     public JsopReader diffStream(String fromRevisionId, String toRevisionId, String filter) {
+        fromRevisionId = fromRevisionId == null ? headRevision : fromRevisionId;
+        toRevisionId = toRevisionId == null ? headRevision : toRevisionId;
         // TODO implement if required
         return new JsopStream();
     }
@@ -463,6 +470,8 @@ public class SimpleKernelImpl extends Mi
     }
 
     public JsopReader getNodesStream(String path, String revisionId, int depth, long offset, int count, String filter) {
+        revisionId = revisionId == null ? headRevision : revisionId;
+
         // TODO offset > 0 should mean the properties are not included
         if (count < 0) {
             count = nodeMap.getMaxMemoryChildren();
@@ -520,6 +529,8 @@ public class SimpleKernelImpl extends Mi
     }
 
     public boolean nodeExists(String path, String revisionId) {
+        revisionId = revisionId == null ? headRevision : revisionId;
+
         if (!PathUtils.isAbsolute(path)) {
             throw ExceptionFactory.get("Not an absolute path: " + path);
         }
@@ -532,6 +543,8 @@ public class SimpleKernelImpl extends Mi
     }
 
     public long getChildNodeCount(String path, String revisionId) {
+        revisionId = revisionId == null ? headRevision : revisionId;
+
         if (!PathUtils.isAbsolute(path)) {
             throw ExceptionFactory.get("Not an absolute path: " + path);
         }
@@ -569,6 +582,8 @@ public class SimpleKernelImpl extends Mi
     }
 
     public String branch(String trunkRevisionId) throws MicroKernelException {
+        trunkRevisionId = trunkRevisionId == null ? headRevision : trunkRevisionId;
+
         // TODO OAK-45 support
         throw new UnsupportedOperationException();
     }

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=1328397&r1=1328396&r2=1328397&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 Apr 20 15:18:19 2012
@@ -284,4 +284,39 @@ public class MicroKernelIT extends Abstr
         String json = mk.getNodes('/' + node, head);
         assertEquals("{\":childNodeCount\":0}", json);
     }
+
+    @Test
+    public void branchAndMerge() {
+        // make sure /branch doesn't exist in head
+        assertFalse(mk.nodeExists("/branch", null));
+
+        // create a branch on head
+        String branchRev = mk.branch(null);
+
+        // add a node /branch in branchRev
+        branchRev = mk.commit("", "+\"/branch\":{}", branchRev, "");
+        // make sure /branch doesn't exist in head
+        assertFalse(mk.nodeExists("/branch", null));
+        // make sure /branch does exist in branchRev
+        assertTrue(mk.nodeExists("/branch", branchRev));
+
+        // add a node /branch/foo in branchRev
+        branchRev = mk.commit("", "+\"/branch/foo\":{}", branchRev, "");
+
+        String hist = mk.getRevisionHistory(0, -1);
+        // make sure branchRev doesn't show up in revision history
+        assertFalse(hist.contains(branchRev));
+
+        // add a node /test123 in head
+        mk.commit("", "+\"/test123\":{}", null, "");
+        // make sure /test123 doesn't exist in branchRev
+        assertFalse(mk.nodeExists("/test123", branchRev));
+
+        // merge branchRev with head
+        mk.merge(branchRev, "");
+        // make sure /test123 still exists in head
+        assertTrue(mk.nodeExists("/test123", null));
+        // make sure /branch/foo does now exist in head
+        assertTrue(mk.nodeExists("/branch/foo", null));
+    }
 }

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=1328397&r1=1328396&r2=1328397&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 Apr 20 15:18:19 2012
@@ -187,12 +187,12 @@ public class MicroKernelImpl implements 
                 }
                 Id commitId = commit.getParentId();
                 if (commitId == null) {
-                    // shouldn't get here, ignore
+                    // inconsistent revision history, ignore silently...
                     break;
                 }
                 commit = rep.getCommit(commitId);
                 if (commit.getCommitTS() < fromCommit.getCommitTS()) {
-                    // shouldn't get here, ignore
+                    // inconsistent revision history, ignore silently...
                     break;
                 }
             }

Modified: jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/StoredCommit.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/StoredCommit.java?rev=1328397&r1=1328396&r2=1328397&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/StoredCommit.java (original)
+++ jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/StoredCommit.java Fri Apr 20 15:18:19 2012
@@ -34,7 +34,7 @@ public class StoredCommit extends Abstra
         String branchRootId = binding.readStringValue("branchRootId");
         return new StoredCommit(id, "".equals(parentId) ? null : Id.fromString(parentId),
                 commitTS, rootNodeId, "".equals(msg) ? null : msg, changes,
-                "".equals(parentId) ? null : Id.fromString(branchRootId));
+                "".equals(branchRootId) ? null : Id.fromString(branchRootId));
     }
 
     public StoredCommit(Id id, Id parentId, long commitTS, Id rootNodeId, String msg, String changes, Id branchRootId) {