Browse Source

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

stable-2.2
Shawn Pearce 12 years ago committed by Gerrit Code Review @ Eclipse.org
parent
commit
4e6e267b8a
  1. 41
      org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/FileTreeIteratorTest.java
  2. 2
      org.eclipse.jgit/src/org/eclipse/jgit/treewalk/WorkingTreeIterator.java

41
org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/FileTreeIteratorTest.java

@ -49,6 +49,7 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.security.MessageDigest; import java.security.MessageDigest;
import org.eclipse.jgit.api.Git; 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.DirCacheEntry;
import org.eclipse.jgit.dircache.DirCacheIterator; import org.eclipse.jgit.dircache.DirCacheIterator;
import org.eclipse.jgit.dircache.DirCacheEditor.PathEdit; 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.Constants;
import org.eclipse.jgit.lib.FileMode; import org.eclipse.jgit.lib.FileMode;
import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ObjectId;
@ -429,6 +433,43 @@ public class FileTreeIteratorTest extends RepositoryTestCase {
assertTrue(indexIter.idEqual(workTreeIter)); 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) { private static String nameOf(final AbstractTreeIterator i) {
return RawParseUtils.decode(Constants.CHARSET, i.path, 0, i.pathLen); return RawParseUtils.decode(Constants.CHARSET, i.path, 0, i.pathLen);
} }

2
org.eclipse.jgit/src/org/eclipse/jgit/treewalk/WorkingTreeIterator.java

@ -243,6 +243,8 @@ public abstract class WorkingTreeIterator extends AbstractTreeIterator {
return contentId = i.idBuffer(); return contentId = i.idBuffer();
} }
contentIdOffset = 0; contentIdOffset = 0;
} else {
contentIdOffset = 0;
} }
} }
switch (mode & FileMode.TYPE_MASK) { switch (mode & FileMode.TYPE_MASK) {

Loading…
Cancel
Save