在多个文件上应用diff - Ant

时间:2011-11-29 22:43:34

标签: ant diff

我的ant项目生成一个“输出”文件夹,其中包含多次运行的输出,我想将它们全部区分到位于“预期”文件夹中的文件(这些文件的名称与文件中的名称完全相同)导出目录)。我试过了:

<apply executable="diff">
    <fileset dir="${output.dir}" />
    <arg value="-u" />
    <srcfile />
    <arg value="${expected.dir}/" />
    <srcfile />
    <redirector>
         <outputmapper type="merge" to="result.out" />
    </redirector>
</apply>

但我有两个问题:

首先我不允许将两个<srclist />放在一个<apply>中,那么如何使用两次<apply>中处理的当前文件的名称?

其次我无法在单个文件中获得<apply>的输出。我尝试了不同的方法(将output参数放在<apply>标记中...)但它似乎总是只存储apply的最后一次执行。如何将每个差异的结果附加到一个文件中?

而且我不想安装其他任何东西(所以没有使用foreach的ant-contrib)。

感谢。

1 个答案:

答案 0 :(得分:2)

这对我有用:

<delete file="result.out" />
<apply executable="diff" force="yes" output="result.out" append="true">
    <fileset dir="${output.dir}" />
    <srcfile />
    <targetfile />
    <mapper type="glob" from="*" to="${expected.dir}/*" />
</apply>

一些解释:

  • apply task targetfile元素允许您指定通过映射器从srcfile派生的第二个arg。
  • 要获取合并的输出,请使用output属性并将append设置为true。请注意,您可能需要删除输出文件(即截断它),否则重新运行时您将无法获得清晰的文件。
  • 我摆弄了diff的arg列表以适应我的操作系统,而不是将expected.dir和目标文件作为连续元素传递,映射器将它们合并为一个完整的路径到“右手”文件中分差
相关问题