Skip to content

Commit

Permalink
add fsTick() to RepositoryTestCase
Browse files Browse the repository at this point in the history
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 <christian.halstrick@sap.com>
  • Loading branch information
chalstrick authored and stefanlay committed Aug 4, 2010
1 parent 9a008d6 commit 7bbe203
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 32 deletions.
32 changes: 0 additions & 32 deletions org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RacyGitTests.java
Expand Up @@ -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<Long> modTimes)
throws FileNotFoundException, IOException {
DirCacheBuilder builder = db.lockDirCache().builder();
Expand Down
Expand Up @@ -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();
}
}
}

0 comments on commit 7bbe203

Please sign in to comment.