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 <christian.halstrick@sap.com>
This commit is contained in:
parent
9a008d68b5
commit
7bbe203578
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue