From a1c614433cf2bc415f299f82146a178f61d306e1 Mon Sep 17 00:00:00 2001 From: Robin Rosenberg Date: Tue, 8 Nov 2011 22:07:59 +0100 Subject: [PATCH] Do not use the deprecated Tree class internally Replace it with DirCache, like we did to remove GitIndex. Change-Id: Ia354770cee5c68f19945279b34aef6de54697435 --- .../jgit/lib/DirCacheCheckoutTest.java | 82 +++++++++++-------- 1 file changed, 49 insertions(+), 33 deletions(-) diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutTest.java index 3001880d2..929753ab1 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutTest.java @@ -63,6 +63,7 @@ import org.eclipse.jgit.dircache.DirCacheCheckout; import org.eclipse.jgit.dircache.DirCacheEditor; import org.eclipse.jgit.dircache.DirCacheEntry; +import org.eclipse.jgit.dircache.DirCacheEditor.PathEdit; import org.eclipse.jgit.errors.CheckoutConflictException; import org.eclipse.jgit.errors.CorruptObjectException; import org.eclipse.jgit.errors.NoWorkTreeException; @@ -73,15 +74,15 @@ public class DirCacheCheckoutTest extends RepositoryTestCase { private DirCacheCheckout dco; - protected Tree theHead; - protected Tree theMerge; + protected ObjectId theHead; + protected ObjectId theMerge; private DirCache dirCache; - private void prescanTwoTrees(Tree head, Tree merge) + private void prescanTwoTrees(ObjectId head, ObjectId merge) throws IllegalStateException, IOException { DirCache dc = db.lockDirCache(); try { - dco = new DirCacheCheckout(db, head.getId(), dc, merge.getId()); + dco = new DirCacheCheckout(db, head, dc, merge); dco.preScanTwoTrees(); } finally { dc.unlock(); @@ -91,7 +92,7 @@ private void prescanTwoTrees(Tree head, Tree merge) private void checkout() throws IOException { DirCache dc = db.lockDirCache(); try { - dco = new DirCacheCheckout(db, theHead.getId(), dc, theMerge.getId()); + dco = new DirCacheCheckout(db, theHead, dc, theMerge); dco.checkout(); } finally { dc.unlock(); @@ -239,10 +240,11 @@ private void assertIndex(HashMap i) @Test public void testRules1thru3_NoIndexEntry() throws IOException { - Tree head = new Tree(db); - head = buildTree(mk("foo")); - ObjectId objectId = head.findBlobMember("foo").getId(); - Tree merge = new Tree(db); + ObjectId head = buildTree(mk("foo")); + TreeWalk tw = TreeWalk.forPath(db, "foo", head); + ObjectId objectId = tw.getObjectId(0); + ObjectId merge = db.newObjectInserter().insert(Constants.OBJ_TREE, + new byte[0]); prescanTwoTrees(head, merge); @@ -253,7 +255,8 @@ public void testRules1thru3_NoIndexEntry() throws IOException { assertEquals(objectId, getUpdated().get("foo")); merge = buildTree(mkmap("foo", "a")); - ObjectId anotherId = merge.findBlobMember("foo").getId(); + tw = TreeWalk.forPath(db, "foo", merge); + ObjectId anotherId = tw.getObjectId(0); prescanTwoTrees(head, merge); @@ -291,28 +294,41 @@ public void apply(DirCacheEntry ent) { } - private Tree buildTree(HashMap headEntries) throws IOException { - Tree tree = new Tree(db); - if (headEntries == null) - return tree; - FileTreeEntry fileEntry; - Tree parent; - ObjectInserter oi = db.newObjectInserter(); - try { - for (java.util.Map.Entry e : headEntries.entrySet()) { - fileEntry = tree.addFile(e.getKey()); - fileEntry.setId(genSha1(e.getValue())); - parent = fileEntry.getParent(); - while (parent != null) { - parent.setId(oi.insert(Constants.OBJ_TREE, parent.format())); - parent = parent.getParent(); - } - } - oi.flush(); - } finally { - oi.release(); + static final class AddEdit extends PathEdit { + + private final ObjectId data; + + private final long length; + + public AddEdit(String entryPath, ObjectId data, long length) { + super(entryPath); + this.data = data; + this.length = length; } - return tree; + + @Override + public void apply(DirCacheEntry ent) { + ent.setFileMode(FileMode.REGULAR_FILE); + ent.setLength(length); + ent.setObjectId(data); + } + + } + + private ObjectId buildTree(HashMap headEntries) + throws IOException { + DirCache lockDirCache = DirCache.newInCore(); + // assertTrue(lockDirCache.lock()); + DirCacheEditor editor = lockDirCache.editor(); + if (headEntries != null) { + for (java.util.Map.Entry e : headEntries.entrySet()) { + AddEdit addEdit = new AddEdit(e.getKey(), + genSha1(e.getValue()), e.getValue().length()); + editor.add(addEdit); + } + } + editor.finish(); + return lockDirCache.writeTree(db.newObjectInserter()); } ObjectId genSha1(String data) { @@ -463,8 +479,8 @@ private void assertAllEmpty() { */ @Test public void testDirectoryFileSimple() throws IOException { - Tree treeDF = buildTree(mkmap("DF", "DF")); - Tree treeDFDF = buildTree(mkmap("DF/DF", "DF/DF")); + ObjectId treeDF = buildTree(mkmap("DF", "DF")); + ObjectId treeDFDF = buildTree(mkmap("DF/DF", "DF/DF")); buildIndex(mkmap("DF", "DF")); prescanTwoTrees(treeDF, treeDFDF);