对多个文件应用diff - Ant



我的ant项目生成一个"output"文件夹,其中包含多次运行的输出,我想将它们与位于"预期"文件夹中的文件进行比较(这些最后的文件名与输出文件夹中的文件名完全相同)。我试过了:

<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>

但是我有两个问题:

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

第二,我不能在一个文件中得到我的<apply>的输出。我尝试了不同的方法(将output参数放在<apply>标签中…),但它似乎总是只存储应用程序的最后执行。如何将每个diff的结果附加到一个文件中?

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

谢谢。

这个适合我:

<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任务targetfile元素允许您指定第二个参数,该参数通过映射器从srcfile派生。
  • 要获得合并输出,使用output属性并将append设置为true。请注意,您可能需要删除输出文件(即截断它),否则在重新运行时,您将无法获得一个干净的石板。
  • 我摆弄了diff的arg列表以适应我的操作系统,而不是将expected.dir和目标文件作为连续的元素传递,映射器将它们合并为diff的"右手"文件的单个完整路径。

相关内容

  • 没有找到相关文章