тестирование последней строки файлов журнала с использованием ANT - PullRequest
4 голосов
/ 08 июля 2011

У меня есть пара файлов bat, которые запускают дополнительные файлы для сборки проекта. это беспокойный процесс. Я пишу основной файл сборки муравья, чтобы сделать все ..

Есть BAT-файлы, которые печатают BUILD SUCCESSFUL на консоли при успешной работе. BUILD SUCCESSFUL - это последняя строка консоли.

Я уже написал это в своем скрипте для муравьев

<project name="MyProject" basedir=".">
    <property name="buildC" value="${basedir}/build-C" />
    <exec dir="${buildC}" executable="cmd" os="Windows XP">
        <arg line="/c test.bat > test.log"/>
    </exec>

    <loadfile property="buildC.log" srcFile="${buildC}/test.log">
    </loadfile>

</project>

Я хочу проверить, если последняя строка test.log , файл BUILD SUCCESSFUL или нет. если это так, выполнить следующую задачу, в противном случае FAIL.

Я попытался использовать задачу fail , но din help. кто-нибудь может направить меня?

Ответы [ 2 ]

0 голосов
/ 08 июля 2011

Если вам нужна последняя строка, используйте цепочку фильтров со строками tailfilter = "1", см. Ant Manual FilterChains
, затем используйте некоторое дополнение Ant с конструкцией if / else, например Flaka или Antcontrib чтобы проверить свойство =

<project xmlns:fl="antlib:it.haefelinger.flaka">
 <loadfile srcfile="your.log" property="buildsuccess">
  <filterchain>
   <tailfilter lines="1" />
    <!-- also possible if needed -->
    <trim/>
    <striplinebreaks/>
    <!-- also possible if needed // -->
  </filterchain>
 </loadfile>

 <fl:choose>
  <fl:when test="'${buildsuccess}' eq 'BUILD SUCCESSFUL'">
   <echo>execute new task..</echo>
  </fl:when>
  <fl:otherwise>
   <fail message="Houston we have a problem.."/>
  </fl:otherwise>
</fl:choose>
</project>

или используйте стандартный способ муравья с условием =

<project default="main">

 <target name="checklog">
  <loadfile srcfile="props.txt" property="buildsuccess">
   <filterchain>
    <tailfilter lines="1" />
    <!-- // also possible if needed -->
    <trim/>
    <striplinebreaks/>
    <!-- also possible if needed // -->
   </filterchain>
  </loadfile>

  <condition property="buildOK">
   <equals arg1="${buildsuccess}" arg2="BUILD SUCCESSFUL"/>
  </condition>    
 </target>

 <target name="whatever">
  <fail message="Houston we have a problem.." unless="buildOK"/>   
  <!-- if not failed then you'll go on with your other tasks here .. -->    
 </target>

 <target name="main" depends="checklog,whatever"/>
</project>
0 голосов
/ 08 июля 2011

Вы можете проверить свойство buildC.log, используя вложенное условие задачи fail:

<fail message="test.bat failed">
   <condition>
       <not>
           <matches pattern="${line.separator}BUILD SUCCESSFUL$" string="${buildC.log}" />
       </not>
   </condition>
</fail>

Вам может понадобиться немного изменить шаблон, чтобы он заработал, в зависимости от того, что именно написано скриптом test.bat. matches по умолчанию применяется ко всей строке, поэтому приведенное выше совпадение будет совпадать только в том случае, если сообщение об успехе составляет последнюю строку файла.

Вы можете также рассмотреть возможность получения выходных данных из test.bat с помощью атрибута exec task outputproperty.

<exec dir="." executable="sh" outputproperty="buildC.log">
    <arg line="/c test.bat" />
</exec>

(Обратите внимание, что перенаправление оболочки было удалено в строке arg.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...