Domanda

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!

È stato utile?

Soluzione

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top