Browse Source

Don't check lastModified, length on folders for submodules

The metadata comparison of submodules is not reliable because of the
last modified timestamp and directory length.

Bug: 498759
Change-Id: If5db69ef3868e475ac477d3e8a7750b268799b0c
stable-4.5
Christian Halstrick 8 years ago committed by Andrey Loskutov
parent
commit
da9eef85e7
  1. 16
      org.eclipse.jgit/src/org/eclipse/jgit/treewalk/WorkingTreeIterator.java

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

@ -268,7 +268,9 @@ public abstract class WorkingTreeIterator extends AbstractTreeIterator {
DirCacheIterator.class); DirCacheIterator.class);
if (i != null) { if (i != null) {
DirCacheEntry ent = i.getDirCacheEntry(); DirCacheEntry ent = i.getDirCacheEntry();
if (ent != null && compareMetadata(ent) == MetadataDiff.EQUAL) { if (ent != null && compareMetadata(ent) == MetadataDiff.EQUAL
&& ((ent.getFileMode().getBits()
& FileMode.TYPE_MASK) != FileMode.TYPE_GITLINK)) {
contentIdOffset = i.idOffset(); contentIdOffset = i.idOffset();
contentIdFromPtr = ptr; contentIdFromPtr = ptr;
return contentId = i.idBuffer(); return contentId = i.idBuffer();
@ -843,10 +845,15 @@ public abstract class WorkingTreeIterator extends AbstractTreeIterator {
if (entry.isUpdateNeeded()) if (entry.isUpdateNeeded())
return MetadataDiff.DIFFER_BY_METADATA; return MetadataDiff.DIFFER_BY_METADATA;
if (!entry.isSmudged() && entry.getLength() != (int) getEntryLength()) if (isModeDifferent(entry.getRawMode()))
return MetadataDiff.DIFFER_BY_METADATA; return MetadataDiff.DIFFER_BY_METADATA;
if (isModeDifferent(entry.getRawMode())) // Don't check for length or lastmodified on folders
int type = mode & FileMode.TYPE_MASK;
if (type == FileMode.TYPE_TREE || type == FileMode.TYPE_GITLINK)
return MetadataDiff.EQUAL;
if (!entry.isSmudged() && entry.getLength() != (int) getEntryLength())
return MetadataDiff.DIFFER_BY_METADATA; return MetadataDiff.DIFFER_BY_METADATA;
// Git under windows only stores seconds so we round the timestamp // Git under windows only stores seconds so we round the timestamp
@ -915,6 +922,9 @@ public abstract class WorkingTreeIterator extends AbstractTreeIterator {
// Lets do a content check // Lets do a content check
return contentCheck(entry, reader); return contentCheck(entry, reader);
case EQUAL: case EQUAL:
if (mode == FileMode.SYMLINK.getBits()) {
return contentCheck(entry, reader);
}
return false; return false;
case DIFFER_BY_METADATA: case DIFFER_BY_METADATA:
if (mode == FileMode.SYMLINK.getBits()) if (mode == FileMode.SYMLINK.getBits())

Loading…
Cancel
Save