assertEquals(expect, top.getEntryObjectId());
}
+ @Test
+ public void testDirCacheMatchingId() throws Exception {
+ File f = writeTrashFile("file", "content");
+ Git git = new Git(db);
+ writeTrashFile("file", "content");
+ fsTick(f);
+ git.add().addFilepattern("file").call();
+ DirCacheEntry dce = db.readDirCache().getEntry("file");
+ TreeWalk tw = new TreeWalk(db);
+ FileTreeIterator fti = new FileTreeIterator(trash, db.getFS(), db
+ .getConfig().get(WorkingTreeOptions.KEY));
+ tw.addTree(fti);
+ DirCacheIterator dci = new DirCacheIterator(db.readDirCache());
+ tw.addTree(dci);
+ fti.setDirCacheIterator(tw, 1);
+ while (tw.next() && !tw.getPathString().equals("file")) {
+ //
+ }
+ assertEquals(MetadataDiff.EQUAL, fti.compareMetadata(dce));
+ ObjectId fromRaw = ObjectId.fromRaw(fti.idBuffer(), fti.idOffset());
+ assertEquals("6b584e8ece562ebffc15d38808cd6b98fc3d97ea",
+ fromRaw.getName());
+ assertFalse(fti.isModified(dce, false));
+ }
+
@Test
public void testIsModifiedSymlink() throws Exception {
File f = writeTrashFile("symlink", "content");
/** Cached canonical length, initialized from {@link #idBuffer()} */
private long canonLen = -1;
+ /** The offset of the content id in {@link #idBuffer()} */
+ private int contentIdOffset;
+
/**
* Create a new iterator with no parent.
*
DirCacheIterator.class);
if (i != null) {
DirCacheEntry ent = i.getDirCacheEntry();
- if (ent != null && compareMetadata(ent) == MetadataDiff.EQUAL)
- return i.idBuffer();
+ if (ent != null && compareMetadata(ent) == MetadataDiff.EQUAL) {
+ contentIdOffset = i.idOffset();
+ contentIdFromPtr = ptr;
+ return contentId = i.idBuffer();
+ }
+ contentIdOffset = 0;
}
}
-
switch (mode & FileMode.TYPE_MASK) {
case FileMode.TYPE_FILE:
contentIdFromPtr = ptr;
@Override
public int idOffset() {
- return 0;
+ return contentIdOffset;
}
@Override