Question

I have a directory structure like so:

-css
---subdir1
------common.css
---subdir2
------common.css
------custom.css
---subdir3
------common.css
------styles.css

I'm trying to loop each directory in Phing, and subsequently minify each file into a single hashed filename within each directory using the YUI compressor. The result would look something like this:

-css
---subdir1
------1973a613f7c87b03dbe589e6935a09bd.min.css
---subdir2
------1973a613f7c87b03dbe589e6935a09bd.min.css
---subdir3
------1973a613f7c87b03dbe589e6935a09bd.min.css

I therefore need to know each directory that I'm within so I can output my minified scripts to it.

These are my two targets:

<target name="minify">

    <echo msg="Minifying CSS and JS files with YUI at ${yuicompressor}" />

    <foreach param="filename" absparam="absfilename" target="runyui">

        <fileset dir="${publicdir}/css">
            <include name="*.css" />
            <include name="**/*.css" />
        </fileset>
    </foreach>

</target>

<target name="runyui">

    <filehash file="${abspathtopwd}" hashtype="MD5" propertyname="filehash" />

    <echo msg="java -jar ${yuicompressor} -v --line-break 5000 --type css ${absfilename} >> ${abspathtopwd}/${filehash}.min.css" />

    <exec command="java -jar ${yuicompressor} -v --line-break 5000 --type css ${absfilename} >> ${abspathtopwd}/${filehash}.min.css" />

</target>

Where:

  • yuicompressor is the path to the yui compressor jar
  • publicdir is just an absolute path to my applications public directory
  • abspathtopwd is the property I wish to use for the "current iteration's directory"

How can I get the current working directory (or pwd if you prefer) in the current foreach iteration with Phing? All I can see I have access to is the relative and absolute paths to the files themselves.

Note: I'm aware that this current solution would create a new file for each input file, but that's what I'm aiming to fix with abspathtopwd.

Thanks!

Was it helpful?

Solution

For anyone interested in this problem, check out this post, which led me to:

<foreach param="dir" absparam="absdir" target="minify.directory">

    <fileset dir="${publicdir}/css">
        <type type="dir" />
        <depth max="0" min="0" />
    </fileset>

</foreach>

This allows me to specify a directory constraint when iterating, thus passing through the relative and absolute directory name as opposed to the filename.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top