You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by dp...@apache.org on 2012/02/28 13:31:58 UTC

svn commit: r1294623 - in /jackrabbit/sandbox/microkernel/src: main/java/org/apache/jackrabbit/mk/model/MutableCommit.java main/java/org/apache/jackrabbit/mk/store/PersistenceManager.java test/java/org/apache/jackrabbit/mk/store/CopyHeadRevisionTest.java

Author: dpfister
Date: Tue Feb 28 12:31:58 2012
New Revision: 1294623

URL: http://svn.apache.org/viewvc?rev=1294623&view=rev
Log:
Introduce unused revisions clean-up (WIP)
- complete copy test

Modified:
    jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/model/MutableCommit.java
    jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/PersistenceManager.java
    jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/store/CopyHeadRevisionTest.java

Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/model/MutableCommit.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/model/MutableCommit.java?rev=1294623&r1=1294622&r2=1294623&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/model/MutableCommit.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/model/MutableCommit.java Tue Feb 28 12:31:58 2012
@@ -24,6 +24,18 @@ public class MutableCommit extends Abstr
     public MutableCommit() {
     }
 
+    /**
+     * Copy constructor.
+     * 
+     * @param other other commit
+     */
+    public MutableCommit(Commit other) {
+        setParentId(other.getParentId());
+        setRootNodeId(other.getRootNodeId());
+        setCommitTS(other.getCommitTS());
+        setMsg(other.getMsg());
+    }
+
     public void setParentId(String parentId) {
         this.parentId = parentId;
     }

Modified: jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/PersistenceManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/PersistenceManager.java?rev=1294623&r1=1294622&r2=1294623&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/PersistenceManager.java (original)
+++ jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/store/PersistenceManager.java Tue Feb 28 12:31:58 2012
@@ -27,8 +27,8 @@ import org.apache.jackrabbit.mk.model.St
  * Defines the methods exposed by a persistence manager, that stores head
  * revision id, nodes, child node entries and blobs.
  * 
- * TODO: convert model type (e.g. Commit) arguments into byte arrays or similar
- *       primitive types (such as in #readNodeBinding).
+ * TODO: instead of deserializing objects on their own, return Binding
+ *       instances, such as in #readNodeBinding.
  */
 public interface PersistenceManager {
 

Modified: jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/store/CopyHeadRevisionTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/store/CopyHeadRevisionTest.java?rev=1294623&r1=1294622&r2=1294623&view=diff
==============================================================================
--- jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/store/CopyHeadRevisionTest.java (original)
+++ jackrabbit/sandbox/microkernel/src/test/java/org/apache/jackrabbit/mk/store/CopyHeadRevisionTest.java Tue Feb 28 12:31:58 2012
@@ -18,22 +18,31 @@ package org.apache.jackrabbit.mk.store;
 
 import java.io.File;
 import java.util.Iterator;
-import java.util.Map;
 
 import org.apache.jackrabbit.mk.MicroKernelImpl;
 import org.apache.jackrabbit.mk.Repository;
 import org.apache.jackrabbit.mk.fs.FileUtils;
+import org.apache.jackrabbit.mk.json.fast.Jsop;
+import org.apache.jackrabbit.mk.json.fast.JsopArray;
 import org.apache.jackrabbit.mk.model.ChildNode;
+import org.apache.jackrabbit.mk.model.Commit;
 import org.apache.jackrabbit.mk.model.MutableCommit;
+import org.apache.jackrabbit.mk.model.MutableNode;
 import org.apache.jackrabbit.mk.model.Node;
-import org.apache.jackrabbit.mk.model.StoredCommit;
 import org.junit.After;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
 /**
  * Use-case: start off a new revision store that contains just the head revision
- * and its nodes. 
+ * and its nodes.
+ * 
+ * TODO: when copying a head revision, including commit and nodes, to a new
+ *       store, the revision id will be different, which might be confusing
+ *       for an MK client. Cause for this is the digest computation of all
+ *       fields in a commit object, including the parent commit, which is 
+ *       obviously different.
  */
 public class CopyHeadRevisionTest {
 
@@ -57,29 +66,64 @@ public class CopyHeadRevisionTest {
         mkFrom.commit("/",  "+\"b\" : {}", mkFrom.getHeadRevision(), null);
         mkFrom.commit("/b", "+\"e\" : {}", mkFrom.getHeadRevision(), null);
 
-        StoredCommit commitFrom = rsFrom.getHeadCommit();
-        
         DefaultRevisionStore rsTo = new DefaultRevisionStore(); 
         rsTo.initialize(new File("target/mk2"));
 
-        MutableCommit commitTo = new MutableCommit();
-        commitTo.setCommitTS(commitFrom.getCommitTS());
-        commitTo.setMsg(commitFrom.getMsg());
-        commitTo.setParentId(commitTo.getParentId());
-        commitTo.setRootNodeId(commitFrom.getRootNodeId());
-        rsTo.putCommit(commitTo);
+        copyHeadRevision(rsFrom, rsTo);
 
         MicroKernelImpl mkTo = new MicroKernelImpl(new Repository(rsTo));
-//        System.out.println(mkTo.getNodes("/", mkTo.getHeadRevision(), 0, 0, -1));
+
+        // TODO: assert both old and new MK have same head revision
+        // Assert.assertEquals(mkFrom.getHeadRevision(), mkTo.getHeadRevision());
+        
+        // Assert both old and new MK have same contents
+        Assert.assertEquals(
+                mkFrom.getNodes("/", mkFrom.getHeadRevision(), 2, 0, -1),
+                mkTo.getNodes("/", mkTo.getHeadRevision(), 2, 0, -1));
+
+        // Assert new MK has only 2 revisions (initial and head)
+        JsopArray revs = (JsopArray) Jsop.parse(mkTo.getRevisions(0, Integer.MAX_VALUE));
+        Assert.assertEquals(2, revs.size());
     }
     
-    private void traverse(Node node) throws Exception {
-        Map<String,String> props = node.getProperties();
+    /**
+     * Copy the head revision (commit and nodes) from a source provider to a
+     * target store.
+     * 
+     * @param from source provider
+     * @param to target store
+     * @throws Exception if an error occurs
+     */
+    private void copyHeadRevision(RevisionProvider from, RevisionStore to)
+            throws Exception {
+        
+        Commit commitFrom = from.getHeadCommit();
+        
+        Node nodeFrom = from.getNode(commitFrom.getRootNodeId());
+        copy(nodeFrom, to);
+        
+        MutableCommit commitTo = new MutableCommit(commitFrom);
+        commitTo.setParentId(to.getHeadCommitId());
+        
+        String revId = to.putCommit(commitTo);
+        to.setHeadCommitId(revId);
+    }
+    
+    /**
+     * Copy a node and all its descendants into a target store
+     * @param node source node
+     * @param store target store
+     * @throws Exception if an error occurs
+     */
+    private void copy(Node node, RevisionStore store) 
+            throws Exception {
+
+        store.putNode(new MutableNode(node, store));
+        
         Iterator<ChildNode> iter = node.getChildNodes(0, -1);
         while (iter.hasNext()) {
             ChildNode c = iter.next();
-//            System.out.println(c.getName());
-            traverse(c.getNode());
+            copy(c.getNode(), store);
         }
     }
 }