@ -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 ) ;
}