Hi,

I just closed a bug
<https://issues.apache.org/bugzilla/show_bug.cgi?id=43574> in delete
that really points to a deeper problem.

Delete was scanning the same fileset three times.  Once by innocently
calling getDirectoryScanner (and discarding the results if
includeEmptyDirs and removeNotFollowedSymlinks was false), once by
calling isFileSystemOnly on Resources and once when iterating.

If the fileset contained a modified selector, things couldn't work since
files that had been modified on the first pass wouldn't be modified on
subsequent passes.

While I fixed it for filesets now (by caching the result of the first
scan) it still remains for other resource collections (which might use
modified as a resource selector) and it may very well happen in other
tasks as well.

One culprit is Resources which will create a new MyCollection in
isFileSystemOnly which again invokes size() on all nested resource
collections, scanning them before any iteration is required.  Most other
resource collections extend BaseResourceCollection which has a cache
attribute that is true by default and should avoid the problem.

I'd like to modify Resources to

    (1) lazily initialize size() - Delete never asks for it, for
        example.

    (2) Cache the remaining iteration results when initializing size

Does anybody see a problem with this?

There probably are more cases where resource collections could be
scanned multiple times but I'm not sure a complete audit is warranted.

Stefan

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org
For additional commands, e-mail: dev-h...@ant.apache.org

Reply via email to