Es posible considerar el uso conjunto de archivos selectors para hacer esto. Los selectores le permiten elegir archivos según el contenido, el tamaño, la capacidad de edición, etc. Puede combinar selectores con inclusiones y exclusiones basadas en nombres, o conjuntos de patrones.
A continuación se muestra un ejemplo. El segundo conjunto de archivos se deriva del primero, con un selector que simplemente coincide con el contenido del archivo. Para una coincidencia más sofisticada está el containsregexp
selector. El resultado es un conjunto de archivos que contiene solo archivos que coinciden con la cadena. A continuación, se utiliza una tarea de falla con un resourcecount
condition para fallar la compilación, a menos que ese conjunto de archivos esté vacío.
<property name="src.dir" value="src" />
<property name="search.string" value="BAD" />
<fileset id="existing" dir="${src.dir}">
<patternset id="files">
<!-- includes/excludes for your source here -->
</patternset>
</fileset>
<fileset id="matches" dir="${src.dir}">
<patternset refid="files" />
<contains text="${search.string}" />
</fileset>
<fail message="Found '${search.string}' in one or more files in '${src.dir}'">
<condition>
<resourcecount when="greater" count="0" refid="matches" />
</condition>
</fail>
(respuesta Antiguo): Si el ajuste o la reutilización de los conjuntos de archivos podría ser problemático, aquí es una ilustración de una alternativa simple relativamente.
La idea es hacer una copia de los archivos, vuelva a colocar la cadena que desee buscar con algún valor del indicador en los archivos copiados. Esto actualizará la última hora de modificación en cualquier archivo coincidente. La tarea uptodate
se puede usar para buscar archivos afectados. Finalmente, a menos que no coincidan los archivos, puede fail
construir.
<property name="src.dir" value="src" />
<property name="work.dir" value="work" />
<property name="search.string" value="BAD" />
<delete dir="${work.dir}" />
<mkdir dir="${work.dir}" />
<fileset dir="${src.dir}" id="src.files">
<include name="*.txt" />
</fileset>
<copy todir="${work.dir}" preservelastmodified="true">
<fileset refid="src.files" />
</copy>
<fileset dir="${work.dir}" id="work.files">
<include name="*.txt" />
</fileset>
<replaceregexp match="${search.string}"
replace="FOUND_${search.string}">
<fileset refid="work.files" />
</replaceregexp>
<uptodate property="files.clean">
<srcfiles refid="work.files" />
<regexpmapper from="(.*)" to="${basedir}/${src.dir}/\1" />
</uptodate>
<fail message="Found '${search.string}' in one or more files in dir '${src.dir}'"
unless="files.clean" />
El primer ejemplo se puede hacer algo más concisa usando sólo el conjunto de archivos 'partidos' con un 'incluye' atributo, omitiendo el anidado . –
@EdRandall puede publicar una respuesta con un ejemplo, por favor – Moudiz