diff options
Diffstat (limited to 'org.eclipse.jgit.test/tst/org/eclipse')
-rw-r--r-- | org.eclipse.jgit.test/tst/org/eclipse/jgit/notes/NoteMapTest.java | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/notes/NoteMapTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/notes/NoteMapTest.java index f22b020989..d740ffaf15 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/notes/NoteMapTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/notes/NoteMapTest.java @@ -47,6 +47,7 @@ import java.io.IOException; import org.eclipse.jgit.junit.TestRepository; import org.eclipse.jgit.lib.CommitBuilder; +import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.MutableObjectId; import org.eclipse.jgit.lib.ObjectInserter; import org.eclipse.jgit.lib.ObjectReader; @@ -361,6 +362,46 @@ public class NoteMapTest extends RepositoryTestCase { .forPath(reader, "zoo-animals.txt", n.getTree()).getObjectId(0)); } + public void testLeafSplitsWhenFull() throws Exception { + RevBlob data1 = tr.blob("data1"); + MutableObjectId idBuf = new MutableObjectId(); + + RevCommit r = tr.commit() // + .add(data1.name(), data1) // + .create(); + tr.parseBody(r); + + NoteMap map = NoteMap.read(reader, r); + for (int i = 0; i < 254; i++) { + idBuf.setByte(Constants.OBJECT_ID_LENGTH - 1, i); + map.set(idBuf, data1); + } + + RevCommit n = commitNoteMap(map); + TreeWalk tw = new TreeWalk(reader); + tw.reset(n.getTree()); + while (tw.next()) + assertFalse("no fan-out subtree", tw.isSubtree()); + + for (int i = 254; i < 256; i++) { + idBuf.setByte(Constants.OBJECT_ID_LENGTH - 1, i); + map.set(idBuf, data1); + } + idBuf.setByte(Constants.OBJECT_ID_LENGTH - 2, 1); + map.set(idBuf, data1); + n = commitNoteMap(map); + + // The 00 bucket is fully split. + String path = fanout(38, idBuf.name()); + tw = TreeWalk.forPath(reader, path, n.getTree()); + assertNotNull("has " + path, tw); + + // The other bucket is not. + path = fanout(2, data1.name()); + tw = TreeWalk.forPath(reader, path, n.getTree()); + assertNotNull("has " + path, tw); + } + public void testRemoveDeletesTreeFanout2_38() throws Exception { RevBlob a = tr.blob("a"); RevBlob data1 = tr.blob("data1"); |