Применить diff к нескольким файлам - Ant - PullRequest
2 голосов
/ 30 ноября 2011

Мой проект 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>

Но у меня есть две проблемы:

Во-первых, мне не разрешено ставить два <srclist /> в один <apply>, так как я могу использовать два раза имя текущего файла, обработанного в одном <apply>?

Во-вторых, я не могу получить выходные данные моего <apply> в одном файле. Я пробовал разные способы (помещая аргумент output в тег <apply> ...), но всегда кажется, что он хранит только последнее выполнение применения. Как я могу добавить результат каждого сравнения в один файл?

И я не хочу устанавливать что-либо еще (так что нет ant-contrib с foreach).

Спасибо.

1 Ответ

2 голосов
/ 30 ноября 2011

Это работает для меня:

<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 через маппер.
  • Чтобы получить объединенный вывод, используйте атрибут output и установите append true.Обратите внимание, что вам может потребоваться удалить выходной файл (т.е. обрезать его), в противном случае при повторном запуске вы не получите чистого листа.
  • Я возился со списком аргументов для diff, подходящего для моей ОС, вместо передачи expected.dir и целевой файл как последовательные элементы, преобразователь объединяет их в один полный путь к «правому» файлу для сравнения.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...