From 7bbe203578def873f0409454d7035d69347fc31e Mon Sep 17 00:00:00 2001 From: Christian Halstrick Date: Tue, 3 Aug 2010 22:27:41 +0200 Subject: [PATCH] add fsTick() to RepositoryTestCase An utility method which was in RacyGitTests has been moved to RepositoryTestCase. Also the javadoc has been improved. This method allows to wait long enough until the filesystem-timer has advanced. This is useful when it has to be guaranteed that two files modifications have different modification timestamps. Change-Id: I2ebd7cd7818feba6acffb3f835101d8fd281bd5a Signed-off-by: Christian Halstrick --- .../org/eclipse/jgit/lib/RacyGitTests.java | 32 ----------------- .../eclipse/jgit/lib/RepositoryTestCase.java | 36 +++++++++++++++++++ 2 files changed, 36 insertions(+), 32 deletions(-) diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RacyGitTests.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RacyGitTests.java index c29f1a0d7..e208b27e6 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RacyGitTests.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RacyGitTests.java @@ -160,38 +160,6 @@ public void testRacyGitDetection() throws IOException, indexState(SMUDGE|MOD_TIME|LENGTH)); } - /** - * Waits until it is guaranteed that the filesystem timer (used e.g. for - * lastModified) has a value greater than the lastmodified time of the given - * file. This is done by touch a file, reading the lastmodified and sleeping - * attribute sleeping - * - * @param lastFile - * @return return the last measured value of the filesystem timer which is - * greater than then the lastmodification time of lastfile. - * @throws InterruptedException - * @throws IOException - */ - public static long fsTick(File lastFile) throws InterruptedException, - IOException { - long sleepTime = 1; - File tmp = File.createTempFile("FileTreeIteratorWithTimeControl", null); - try { - long startTime = (lastFile == null) ? tmp.lastModified() : lastFile - .lastModified(); - long actTime = tmp.lastModified(); - while (actTime <= startTime) { - Thread.sleep(sleepTime); - sleepTime *= 5; - tmp.setLastModified(System.currentTimeMillis()); - actTime = tmp.lastModified(); - } - return actTime; - } finally { - tmp.delete(); - } - } - private void addToIndex(TreeSet modTimes) throws FileNotFoundException, IOException { DirCacheBuilder builder = db.lockDirCache().builder(); diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RepositoryTestCase.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RepositoryTestCase.java index cb1f38556..36b28ae07 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RepositoryTestCase.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RepositoryTestCase.java @@ -232,4 +232,40 @@ public static String lookup(Object l, String nameTemplate, } return name; } + + /** + * Waits until it is guaranteed that a subsequent file modification has a + * younger modification timestamp than the modification timestamp of the + * given file. This is done by touching a temporary file, reading the + * lastmodified attribute and, if needed, sleeping. After sleeping this loop + * starts again until the filesystem timer has advanced enough. + * + * @param lastFile + * the file on which we want to wait until the filesystem timer + * has advanced more than the lastmodification timestamp of this + * file + * @return return the last measured value of the filesystem timer which is + * greater than then the lastmodification time of lastfile. + * @throws InterruptedException + * @throws IOException + */ + public static long fsTick(File lastFile) throws InterruptedException, + IOException { + long sleepTime = 1; + File tmp = File.createTempFile("FileTreeIteratorWithTimeControl", null); + try { + long startTime = (lastFile == null) ? tmp.lastModified() : lastFile + .lastModified(); + long actTime = tmp.lastModified(); + while (actTime <= startTime) { + Thread.sleep(sleepTime); + sleepTime *= 5; + tmp.setLastModified(System.currentTimeMillis()); + actTime = tmp.lastModified(); + } + return actTime; + } finally { + tmp.delete(); + } + } }