I looked, but didn't find any discussion on the new granularity
FileUtils.getFileTimestampGranularity. This is messing up my builds
big-time.
If you are on Windows and you run two COPY operations within two
seconds of each other, the second COPY will be skipped.
<project default="x">
<target name="x">
<touch file="aaa"/>
<copy file="aaa" tofile="bbb"/>
<sleep seconds="1"/>
<touch file="aaa"/>
<copy file="aaa" tofile="bbb"/>
</target>
</project>
G:\temp>ant -verbose
Apache Ant version 1.6.2 compiled on July 16 2004
Buildfile: build.xml
Detected Java version: 1.4 in: C:\util\jdk\1.4.2\jre
Detected OS: Windows 2003
parsing buildfile G:\temp\build.xml with URI =
file:///G:/temp/build.xml
Project base dir set to: G:\temp
[property] Loading Environment env.
Build sequence for target `x' is [x]
Complete build sequence is [x, ]
x:
[copy] Copying 1 file to G:\temp
[copy] Copying G:\temp\aaa to G:\temp\bbb
[sleep] sleeping for 1000 milliseconds
[copy] G:\temp\aaa omitted as G:\temp\bbb is up to date.
BUILD SUCCESSFUL
Total time: 3 seconds
G:\temp>
The problem stems from this code in FileUtils.java.
public long getFileTimestampGranularity() {
if (Os.isFamily("dos")) {
return FAT_FILE_TIMESTAMP_GRANULARITY;
} else {
return 0;
}
}
This is a very poor test. I guess there's a limitted granularity of
timestamps on FAT formatted disks. But this test is assuming that any
drive under DOS or Windows is FAT formatted.
My build files have this pattern:
<make a temporary copy of file-A>
<work on temporary copy, growing and changing it>
<when work is complete, replace master copy with temporary>
If the work takes more than two seconds (or build is run on other os,
unix for example), then the ANT COPY works. If the work completes in
under two seconds on Windows, ANT COPY fails.
Temporary work-around is to override the granularity attribute on COPY.
But the root cause of the problem (bad test in FileUtils) needs to be
fixed.
http://issues.apache.org/bugzilla/show_bug.cgi?id=33906
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]