|
|
|
@ -49,6 +49,7 @@ import static org.junit.Assert.assertNotNull;
|
|
|
|
|
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.DirCacheEditor;
|
|
|
|
|
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 class FileTreeIteratorTest extends RepositoryTestCase {
|
|
|
|
|
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); |
|
|
|
|
} |
|
|
|
|