]> source.dussan.org Git - jgit.git/commit
WorkingTreeIterator: handle different timestamp resolutions 40/149440/6
authorThomas Wolf <thomas.wolf@paranor.ch>
Thu, 12 Sep 2019 19:05:19 +0000 (21:05 +0200)
committerMatthias Sohn <matthias.sohn@sap.com>
Mon, 16 Sep 2019 22:36:22 +0000 (00:36 +0200)
commite3f535cb15a75d6b2448bfadbc9839da8085f1ec
tree1b48de4667141c947625203c966a137a9f66206d
parent84ac86ee61989bab441904e3e72b2b98199cccfc
WorkingTreeIterator: handle different timestamp resolutions

Older JGit stored only milliseconds timestamps in the index. Newer
JGit may get finer timestamps from the file system. This leads to
slow index diffs when a new JGit runs against an index produced
by older JGit because many timestamps will differ and JGit will
then do many content checks. See [1].

Handle this migration case by only comparing milliseconds if the
index entry has only millisecond precision.

The inverse may also occur; also compare only milliseconds if the
file timestamp has only millisecond precision.

Do the same also for microsecond resolution. On Windows, NTFS may
provide 100ns resolution and may be used by external programs writing
the index, but Java's WindowsFileAttributes may provide only
microseconds.

File timestamp precision in Java depends not only on the Java APIs
used by different JGit versions but may also change when running the
same Java code on different VMs. And of course the resolution may
vary among operating and file systems. Moreover, timestamp precision
in the index depends on the program that wrote the index. Canonical
git may use a different resolution, maybe even different between git
versions.

[1] https://www.eclipse.org/forums/index.php/t/1100344/

Change-Id: Idfd08606c883cb98787b2138f9baf0cc89a57b56
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/InstantComparatorTest.java [new file with mode: 0644]
org.eclipse.jgit/src/org/eclipse/jgit/treewalk/InstantComparator.java [new file with mode: 0644]
org.eclipse.jgit/src/org/eclipse/jgit/treewalk/WorkingTreeIterator.java