ant-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Glenn McAllister <gl...@somanetworks.com>
Subject Re: Bug with <delete includeEmptyDirs> ?
Date Wed, 07 Mar 2001 19:36:57 GMT
Moving this discussion over from ant-user.  Involves the bug that
<delete includeEmptyDirs="yes"> ... </delete> only deletes empty leaf
directories, and none of the intermediate dirs.

--

KC Baltz wrote:

> Great, because this is a feature we could really use.

I finally got a chance to look at the code.  It seems that my testcase
was too simple - the directory structure wasn't deep enough.

Here's a description of the problem.  I have the following directory
structure:

a/
    b/
        c/
            d
    e

Lets say I have files in a and a/b/c.  So, when I do this:

<delete includeEmptyDirs="yes">
  <fileset dir="a" />
</delete>

which effectively says "Start at directory a, delete all files (ignoring
those matching the default exclude patterns), and then delete all empty
subdirectories."  What actually happens is "Start at directory a, delete
all files, and then delete empty leaf directories."  So when we are
done, the structure looks like

a/
    b/
        c

When I'm chosing what directories to delete, I'm using the
DirectoryScanner.getIncludedDirs method.  The assumption is that since
we are using a fileset, we should only try to delete matching empty
directories.  The funny thing is, if the match pattern is "**" (which
seems to be a pretty common case), only leaf directories are returned as
a match.  Now, I've had this discussion before with other committers and
been told that, in the general case, if the directory does not match the
pattern it shouldn't be included.  Well, if thats the case, why wouldn't
it match all the subdirectories with a "**" include pattern?  Why does
it only match the leaf directories?

Unless I hear otherwise (i.e., get -1'ed) I'm going to see about either
changing DirectoryScanner to properly collect ALL directories and return
them with getIncludedDirs, or create a new method getAllIncludedDirs to
return all of them.  My preference is the former, but it may break some
existing behaviour.  Any opinions?

Glenn McAllister
Mime
View raw message