diff options
author | Masaya Suzuki <masayasuzuki@google.com> | 2016-08-21 15:27:30 -0700 |
---|---|---|
committer | Andrey Loskutov <loskutov@gmx.de> | 2016-08-24 09:07:08 +0200 |
commit | edd8ad4d04897830f08b6793a9493c70c0e9b87a (patch) | |
tree | 4675dd5c84a81b9b4289850a1a4c908d90716204 /org.eclipse.jgit.test | |
parent | da9eef85e7fff1c1c64c4302b897d20aff24b448 (diff) | |
download | jgit-edd8ad4d04897830f08b6793a9493c70c0e9b87a.tar.gz jgit-edd8ad4d04897830f08b6793a9493c70c0e9b87a.zip |
Use FS#lastModified instead of File#lastModified
This fixes the tests failed in JDK8.
FS uses java.nio API to get file attributes. The timestamps obtained
from that API are more precise than the ones from
java.io.File#lastModified() since Java8.
This difference accidentally makes JGit detect newly added files as
smudged. Use the precised timestamp to avoid this false positive.
Bug: 500058
Change-Id: I9e587583c85cb6efa7562ad6c5f26577869a2e7c
Signed-off-by: Masaya Suzuki <masayasuzuki@google.com>
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
Diffstat (limited to 'org.eclipse.jgit.test')
3 files changed, 18 insertions, 15 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/GcTestCase.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/GcTestCase.java index 5abf625489..e463285915 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/GcTestCase.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/GcTestCase.java @@ -105,8 +105,9 @@ public abstract class GcTestCase extends LocalDiskRepositoryTestCase { return tip; } - protected long lastModified(AnyObjectId objectId) { - return repo.getObjectDatabase().fileFor(objectId).lastModified(); + protected long lastModified(AnyObjectId objectId) throws IOException { + return repo.getFS().lastModified( + repo.getObjectDatabase().fileFor(objectId)); } protected static void fsTick() throws InterruptedException, IOException { diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/merge/ResolveMergerTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/merge/ResolveMergerTest.java index 55bb93acf8..a08dbbcc83 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/merge/ResolveMergerTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/merge/ResolveMergerTest.java @@ -62,6 +62,7 @@ import org.eclipse.jgit.junit.RepositoryTestCase; import org.eclipse.jgit.merge.ResolveMerger.MergeFailureReason; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.treewalk.FileTreeIterator; +import org.eclipse.jgit.util.FS; import org.eclipse.jgit.util.FileUtils; import org.junit.Assert; import org.junit.experimental.theories.DataPoint; @@ -694,7 +695,7 @@ public class ResolveMergerTest extends RepositoryTestCase { // Create initial content and remember when the last file was written. f = writeTrashFiles(false, "orig", "orig", "1\n2\n3", "orig", "orig"); - lastTs4 = f.lastModified(); + lastTs4 = FS.DETECTED.lastModified(f); // add all files, commit and check this doesn't update any working tree // files and that the index is in a new file system timer tick. Make @@ -707,8 +708,8 @@ public class ResolveMergerTest extends RepositoryTestCase { checkConsistentLastModified("0", "1", "2", "3", "4"); checkModificationTimeStampOrder("1", "2", "3", "4", "<.git/index"); assertEquals("Commit should not touch working tree file 4", lastTs4, - new File(db.getWorkTree(), "4").lastModified()); - lastTsIndex = indexFile.lastModified(); + FS.DETECTED.lastModified(new File(db.getWorkTree(), "4"))); + lastTsIndex = FS.DETECTED.lastModified(indexFile); // Do modifications on the master branch. Then add and commit. This // should touch only "0", "2 and "3" @@ -722,7 +723,7 @@ public class ResolveMergerTest extends RepositoryTestCase { checkConsistentLastModified("0", "1", "2", "3", "4"); checkModificationTimeStampOrder("1", "4", "*" + lastTs4, "<*" + lastTsIndex, "<0", "2", "3", "<.git/index"); - lastTsIndex = indexFile.lastModified(); + lastTsIndex = FS.DETECTED.lastModified(indexFile); // Checkout a side branch. This should touch only "0", "2 and "3" fsTick(indexFile); @@ -731,7 +732,7 @@ public class ResolveMergerTest extends RepositoryTestCase { checkConsistentLastModified("0", "1", "2", "3", "4"); checkModificationTimeStampOrder("1", "4", "*" + lastTs4, "<*" + lastTsIndex, "<0", "2", "3", ".git/index"); - lastTsIndex = indexFile.lastModified(); + lastTsIndex = FS.DETECTED.lastModified(indexFile); // This checkout may have populated worktree and index so fast that we // may have smudged entries now. Check that we have the right content @@ -744,13 +745,13 @@ public class ResolveMergerTest extends RepositoryTestCase { indexState(CONTENT)); fsTick(indexFile); f = writeTrashFiles(false, "orig", "orig", "1\n2\n3", "orig", "orig"); - lastTs4 = f.lastModified(); + lastTs4 = FS.DETECTED.lastModified(f); fsTick(f); git.add().addFilepattern(".").call(); checkConsistentLastModified("0", "1", "2", "3", "4"); checkModificationTimeStampOrder("*" + lastTsIndex, "<0", "1", "2", "3", "4", "<.git/index"); - lastTsIndex = indexFile.lastModified(); + lastTsIndex = FS.DETECTED.lastModified(indexFile); // Do modifications on the side branch. Touch only "1", "2 and "3" fsTick(indexFile); @@ -761,7 +762,7 @@ public class ResolveMergerTest extends RepositoryTestCase { checkConsistentLastModified("0", "1", "2", "3", "4"); checkModificationTimeStampOrder("0", "4", "*" + lastTs4, "<*" + lastTsIndex, "<1", "2", "3", "<.git/index"); - lastTsIndex = indexFile.lastModified(); + lastTsIndex = FS.DETECTED.lastModified(indexFile); // merge master and side. Should only touch "0," "2" and "3" fsTick(indexFile); @@ -789,7 +790,7 @@ public class ResolveMergerTest extends RepositoryTestCase { "IndexEntry with path " + path + " has lastmodified with is different from the worktree file", - new File(workTree, path).lastModified(), dc.getEntry(path) + FS.DETECTED.lastModified(new File(workTree, path)), dc.getEntry(path) .getLastModified()); } @@ -799,14 +800,15 @@ public class ResolveMergerTest extends RepositoryTestCase { // then this file must be younger then file i. A path "*<modtime>" // represents a file with a modification time of <modtime> // E.g. ("a", "b", "<c", "f/a.txt") means: a<=b<c<=f/a.txt - private void checkModificationTimeStampOrder(String... pathes) { + private void checkModificationTimeStampOrder(String... pathes) + throws IOException { long lastMod = Long.MIN_VALUE; for (String p : pathes) { boolean strong = p.startsWith("<"); boolean fixed = p.charAt(strong ? 1 : 0) == '*'; p = p.substring((strong ? 1 : 0) + (fixed ? 1 : 0)); - long curMod = fixed ? Long.valueOf(p).longValue() : new File( - db.getWorkTree(), p).lastModified(); + long curMod = fixed ? Long.valueOf(p).longValue() + : FS.DETECTED.lastModified(new File(db.getWorkTree(), p)); if (strong) assertTrue("path " + p + " is not younger than predecesssor", curMod > lastMod); diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/FileTreeIteratorTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/FileTreeIteratorTest.java index efb5ddb4e7..ef0f2d91f2 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/FileTreeIteratorTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/FileTreeIteratorTest.java @@ -99,7 +99,7 @@ public class FileTreeIteratorTest extends RepositoryTestCase { for (int i = paths.length - 1; i >= 0; i--) { final String s = paths[i]; writeTrashFile(s, s); - mtime[i] = new File(trash, s).lastModified(); + mtime[i] = FS.DETECTED.lastModified(new File(trash, s)); } } |