ant-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Cyril Sagan <cys...@unx.sas.com>
Subject <dirname> bug of feature?
Date Sat, 03 Dec 2005 00:07:16 GMT

I was a bit confused with the behavior of dirname when the file
property was that of an unset parameter.
    QUESTION: Is this a bug of feature?

Here's my full example:
$ cd /tmp/Ant_Mystery
$ ant  -version
Apache Ant version 1.6.5 compiled on June 2 2005

$ cat build.xml
<?xml version="1.0"?>
<project name="Ant_Mystery">
    <!-- Illustrate some mysteries with <dirname> task -->
    <dirname property="foobar.dir" file="${foobar}" />
    <property name="foobar.fullpath" location="${foobar.dir}"/>
    <echo>
        foobar = ${foobar}
        foobar.dir = ${foobar.dir}
        foobar.fullpath = ${foobar.fullpath}
    </echo>
</project>

$ ant
Buildfile: build.xml
     [echo] 
     [echo]         foobar = ${foobar}
     [echo]         foobar.dir = /tmp/Ant_Mystery
     [echo]         foobar.fullpath = /tmp/Ant_Mystery
     [echo]     

BUILD SUCCESSFUL
Total time: 1 second


I wouldn't expect the foobar.dir property to be set since the file
attribute comes from an unset property.  From the ant source code, I
think I see why this is happening:

from main/org/apache/tools/ant/taskdefs/Dirname.java:
    public void setFile(File file) {
        this.file = file;
    }

    // The method executing the task
    public void execute() throws BuildException {
...
        if (file == null) {
            throw new BuildException("file attribute required", getLocation());
        } else {
            String value = file.getParent();
            getProject().setNewProperty(property, value);
        }
    }


I suspect that the new File object gets constructed before calling
setFile, so in my example ${foobar}.getParent() is equivalent to the
current directory.

Seems like the right behavior would be to fail someway if the path
named by dirname's file attribute didn't exist.  Anyone else agree?

Second question: I thought foobar.dir would be a relative path and
<property location=...> would be the absolute path, but they're both
the same.  What am I missing??

I'd appreciate hearing other comments.  Thanks.

--Cyril

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
For additional commands, e-mail: user-help@ant.apache.org


Mime
View raw message