ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Peter Donald <pe...@apache.org>
Subject Re: [Submit] Rounding error with dependency checking in SouceFileScanner.java
Date Tue, 27 Nov 2001 08:56:44 GMT
Well unfortunately the granularity of the time field in the zip format is the 
reason for this. Theres not much that can be done about that.

We also can't apply the check in sourcefile scanner because in some cases the 
modification time will be less than a second. In a few cases I have a build 
process that will modify or generate source files that should be recompiled 
in same sweep but would not have a modification time 1000ms in the past.

I think the best idea for you would be to write a custom task.


On Tue, 27 Nov 2001 13:14, Bruce Atherton wrote:
> Here is an odd one. I was tryng to create a way to generate a ZIP file of
> any changes that had happened since a previous ZIP. I eventually came up
> with this:
>
>    <target name="create-diff-zip" depends="init" >
>      <delete quiet="true" includeEmptyDirs="true" >
>        <fileset dir="${tempdir}" defaultexcludes="no" />
>      </delete>
>      <mkdir dir="${tempdir}" />
>      <unzip src="${zipname}" dest="${tempdir}" />
>      <apply executable="/usr/bin/zip" skipemptyfilesets="true"
> parallel="true" dest="${tempdir}" dir="${buildpath}" relative="true" > <arg
> value="${diffzipname}-${DSTAMP}-${TSTAMP}.zip" />
>        <fileset dir="${buildpath}" >
>          <include name="classes/**" />
>          <include name="ejb/**" />
>          <include name="static/**" />
>          <include name="webapp/**" />
>        </fileset>
>        <mapper type="identity" />
>      </apply>
>      <delete quiet="true" includeEmptyDirs="true" >
>        <fileset dir="${tempdir}" defaultexcludes="no" />
>      </delete>
>    </target>
>
> That should do the trick so long as I avoid using JDK1.1, right? Wrong.
> Turns out that approximately half the 6000 files I am working with are
> considered "outdated" and are included in the ZIP file, even after I've
> just generated a new base ZIP. In other words, there should have been no
> difference whatsoever and the diff zip should not even be created, but is
> instead half the size of the original.
>
> I modified SourceFileScanner to output the longs returned by
> "src.lastModified()" and "dest.lastModified()", and it turns out that all
> numbers were in even thousands, but half matched exactly and half had a
> difference of exactly 1000. I'm pretty sure it must be a rounding error
> somewhere along the line, but I have no idea where. Still, I would think it
> likely this is going to bite others and should be fixed.
>
> So my suggested trivial fix would be as follows. I realize that there may
> be people out there who think that a 1 second error is too much for
> dependency checking but I can't think of a better solution.
>
>    * Fix errors that can occur when rounding timestamps to the nearest
> second in org/apache/tools/ant/util/SourceFileScanner.java.
>
> Index: SourceFileScanner.java
> ===================================================================
> RCS file:
> /home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/util/SourceFileSc
>anner.java,v retrieving revision 1.10
> diff -u -r1.10 SourceFileScanner.java
> --- SourceFileScanner.java      2001/11/02 07:56:53     1.10
> +++ SourceFileScanner.java      2001/11/27 01:26:19
> @@ -138,7 +138,7 @@
>                                Project.MSG_VERBOSE);
>                       v.addElement(files[i]);
>                       added = true;
> -                } else if (src.lastModified() > dest.lastModified()) {
> +                } else if ((src.lastModified() - 1000L) >
> dest.lastModified()) {
>                       task.log(files[i]+" added as
> "+dest.getAbsolutePath()+" is outdated.",
>                                Project.MSG_VERBOSE);
>                       v.addElement(files[i]);

-- 
Cheers,

Pete

Frank Zappa observed: "It's not getting any smarter out
                       there.You have to come to terms with
                       stupidity, and make it work for you."

--
To unsubscribe, e-mail:   <mailto:ant-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:ant-dev-help@jakarta.apache.org>


Mime
View raw message