¿Cómo seleccionar los subdirectorios de hormigas usando un conjunto de archivos?
Pregunta
Estoy usando hormiga 1.6.2 y estoy tratando de configurar una tarea que comparará un origen y un directorio de destino, identificar todos los subdirectorios que existen en el directorio de origen y borrar subdirectorios llamados gustado en el directorio de destino.
Así, por ejemplo el directorio de origen tiene sub directorios SUB1, SUB2 y SUB3 en ella y el directorio de destino tiene SUB1, SUB2, SUB3 y sub4 en él, entonces me gustaría SUB1 de eliminación, Sub2 y SUB3 de la meta dir.
pensé que podría hacer esto mediante el uso de un selector de ficheros para identificar todos los directorios en la fuente que están presentes en el objetivo. Sin embargo, no puedo obtener el
En última instancia, pensé que había que hacer algo como:
<fileset id="dirSelector" dir="${install.dir}">
<type type="dir"/>
<present targetdir="${dist.dir}"/>
</fileset>
Me comenzó con sólo tratar de enumerar los directorios presentes en el directorio de origen e imprimirlos:
<fileset id="dirSelector" dir="${install.dir}">
<type type="dir"/>
</fileset>
<property name="selected" refid="dirSelector" />
<echo>Selected: ${selected}</echo>
Sin embargo, nunca consiguió nada impreso con el conjunto selector de tipo de directorio. Si cambio el tipo de archivo que se deje archivos imprimí.
¿Hay una mejor manera de lograr lo que estoy tratando de hacer? Me estoy perdiendo algo en mi uso del selector de tipo?
Solución
Sin escribir una tarea Ant personalizada, esto va a ser un poco desordenado. A continuación se debe hacer el truco, si estás dispuesto a utilizar el href="http://sourceforge.net/projects/ant-contrib/" rel="nofollow noreferrer"> ant-contrib biblioteca . Es un poco de un truco (especialmente la forma en que utiliza las propiedades), pero parece bien el trabajo.
<project name="stackoverflow" default="delete_target_dirs">
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<pathelement location="ant-contrib-1.0b3.jar"/>
</classpath>
</taskdef>
<property name="src.dir" value="src"/>
<property name="target.dir" value="target"/>
<target name="delete_target_dirs">
<for param="file">
<path>
<dirset dir="${src.dir}">
<include name="**"/>
</dirset>
</path>
<sequential>
<basename property="@{file}_basename" file="@{file}" />
<available property="@{file}_available" file="${@{file}_basename}" filepath="${target.dir}" />
<if>
<equals arg1="${@{file}_available}" arg2="true"/>
<then>
<delete verbose="true">
<dirset dir="${target.dir}" includes="${@{file}_basename}"/>
</delete>
</then>
</if>
</sequential>
</for>
</target>
</project>