Merge "Fix for Iff768422c, use offset 0 when going back to work tree iterator"

This commit is contained in:
Shawn Pearce 2012-10-25 17:55:22 -04:00 committed by Gerrit Code Review @ Eclipse.org
commit 4e6e267b8a
2 changed files with 43 additions and 0 deletions

View File

@ -49,6 +49,7 @@
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.IOException;
import java.security.MessageDigest;
import org.eclipse.jgit.api.Git;
@ -58,6 +59,9 @@
import org.eclipse.jgit.dircache.DirCacheEntry;
import org.eclipse.jgit.dircache.DirCacheIterator;
import org.eclipse.jgit.dircache.DirCacheEditor.PathEdit;
import org.eclipse.jgit.errors.CorruptObjectException;
import org.eclipse.jgit.errors.IncorrectObjectTypeException;
import org.eclipse.jgit.errors.MissingObjectException;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.FileMode;
import org.eclipse.jgit.lib.ObjectId;
@ -429,6 +433,43 @@ public void apply(DirCacheEntry ent) {
assertTrue(indexIter.idEqual(workTreeIter));
}
@Test
public void idOffset() throws Exception {
Git git = new Git(db);
writeTrashFile("fileAinfsonly", "A");
File fileBinindex = writeTrashFile("fileBinindex", "B");
fsTick(fileBinindex);
git.add().addFilepattern("fileBinindex").call();
writeTrashFile("fileCinfsonly", "C");
TreeWalk tw = new TreeWalk(db);
DirCacheIterator indexIter = new DirCacheIterator(db.readDirCache());
FileTreeIterator workTreeIter = new FileTreeIterator(db);
tw.addTree(indexIter);
tw.addTree(workTreeIter);
workTreeIter.setDirCacheIterator(tw, 0);
assertEntry("d46c305e85b630558ee19cc47e73d2e5c8c64cdc", "a,", tw);
assertEntry("58ee403f98538ec02409538b3f80adf610accdec", "a,b", tw);
assertEntry("0000000000000000000000000000000000000000", "a", tw);
assertEntry("b8d30ff397626f0f1d3538d66067edf865e201d6", "a0b", tw);
// The reason for adding this test. Check that the id is correct for
// mixed
assertEntry("8c7e5a667f1b771847fe88c01c3de34413a1b220",
"fileAinfsonly", tw);
assertEntry("7371f47a6f8bd23a8fa1a8b2a9479cdd76380e54", "fileBinindex",
tw);
assertEntry("96d80cd6c4e7158dbebd0849f4fb7ce513e5828c",
"fileCinfsonly", tw);
assertFalse(tw.next());
}
private void assertEntry(String sha1string, String path, TreeWalk tw)
throws MissingObjectException, IncorrectObjectTypeException,
CorruptObjectException, IOException {
assertTrue(tw.next());
assertEquals(path, tw.getPathString());
assertEquals(sha1string, tw.getObjectId(1).getName() /* 1=filetree here */);
}
private static String nameOf(final AbstractTreeIterator i) {
return RawParseUtils.decode(Constants.CHARSET, i.path, 0, i.pathLen);
}

View File

@ -243,6 +243,8 @@ public byte[] idBuffer() {
return contentId = i.idBuffer();
}
contentIdOffset = 0;
} else {
contentIdOffset = 0;
}
}
switch (mode & FileMode.TYPE_MASK) {