2011-11-29 3 views
2

내 개미 프로젝트는 여러 개의 실행 결과가 포함 된 "출력"폴더를 생성하며 "예상 됨"폴더에있는 파일에 대해 모두 비교하고 싶습니다. 출력 폴더에있는 이름과 같은 이름).여러 파일에 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> 

하지만이 두 가지 문제가 있습니다 : 나는 것을 시도

우선 한 <apply><srclist />을 넣어 수 없습니다 오전, 그래서 어떻게 하나 처리 현재 파일의 두 배의 이름을 사용할 수 있습니다 <apply>?

두 번째 하나의 파일에 내 <apply>의 출력을 가져올 수 없습니다. 나는 다른 방법을 시도했다. (<apply> 태그에 output 인수를 썼다.)하지만 항상 적용의 마지막 실행 만 저장하는 것처럼 보인다. 각 diff의 결과를 하나의 단일 파일에 추가하려면 어떻게합니까?

그리고 다른 것을 설치할 필요가 없습니다 (foreach에는 ant-contrib가 없습니다).

감사합니다.

답변

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에서 파생 된 두 번째 인수를 지정할 수 있습니다
  • .
  • 병합 된 출력을 얻으려면 output 특성을 사용하고 append을 true로 설정하십시오. 출력 파일을 삭제해야 할 수도 있습니다 (다시 말하면 잘라내십시오). 그렇지 않으면 재실행 할 때 깨끗한 슬레이트를 얻지 못할 수도 있습니다.
  • expected.dir과 대상 파일을 연속적인 요소로 전달하는 대신 OS에 맞게 diff에 arg 목록을 보냈다. 매퍼는 diff를 위해 '오른손'파일에 대한 단일 전체 경로에 병합합니다.
+0

몇 시간 동안 작업 문서를 읽었으며 append 매개 변수 ... facepalm을 발견하지 못했습니다. 그게 정확히 제가 찾고 있던 것이 었습니다. 타겟 파일과 관련이 있지만 사용할 방법을 찾을 수 없다는 것을 알고있었습니다. – talnicolas

관련 문제