]> source.dussan.org Git - jgit.git/commitdiff
Fix WorkingTreeIterator.compareMetadata() for CheckStat.MINIMAL 66/149266/1
authorMatthias Sohn <matthias.sohn@sap.com>
Tue, 10 Sep 2019 14:08:45 +0000 (16:08 +0200)
committerMatthias Sohn <matthias.sohn@sap.com>
Tue, 10 Sep 2019 14:08:45 +0000 (16:08 +0200)
If CheckStat is MINIMAL or timestamps have no nanosecond part
WorkingTreeIterator.compareMetaData only checks the second part of
timestamps and ignores nanoseconds which may have ended up in the index
by using native git.

If

fileLastModified.getEpochSecond() == cacheLastModified.getEpochSecond()

we currently proceed comparing fileLastModified and cacheLastModified
with full precision which is wrong since we determined that we detected
reduced timestamp resolution.

Fix this and also handle smudged index entries for CheckStat.MINIMAL.

Change-Id: I6149885903ac63d79b42d234cc02aa4e19578f3c
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
org.eclipse.jgit/src/org/eclipse/jgit/treewalk/WorkingTreeIterator.java

index 299f07fb09c1e9b1e78fda1a1e61582403252782..a83165daa269461969d551f342c82e86b707ec4e 100644 (file)
@@ -950,9 +950,10 @@ public abstract class WorkingTreeIterator extends AbstractTreeIterator {
                        if (fileLastModified.getEpochSecond() != cacheLastModified
                                        .getEpochSecond()) {
                                return MetadataDiff.DIFFER_BY_TIMESTAMP;
+                       } else if (entry.isSmudged()) {
+                               return MetadataDiff.SMUDGED;
                        }
-               }
-               if (!fileLastModified.equals(cacheLastModified)) {
+               } else if (!fileLastModified.equals(cacheLastModified)) {
                        return MetadataDiff.DIFFER_BY_TIMESTAMP;
                } else if (entry.isSmudged()) {
                        return MetadataDiff.SMUDGED;