2010-03-31 7 views
0

svn을 위해 후 커밋 내가 실행할 때 명령 줄에서 잘 실행하는 SVN에 후크를SVN 명령 줄에서 실행되지만 파일을 커밋하지 않을 때 (들) 내가 가진

env - ./foo.sh /path/to/svn/repos/ 12345 

하지만, 스크립트가 svn에서 호출되면 작동하지 않습니다.

기본적으로 커밋 된 파일을 검사하고 특정 파일이 수정되면 네트워크 공유에 svn 내보내기를 수행합니다. 명령 줄에서 잘 작동합니다.

포스트 커밋 스크립트는 다음과 같다 :

#!/bin/sh 

REPOS="$1" 
REV="$2" 

CHANGED=`/usr/bin/svnlook changed -r "$REV" "$REPOS"` 
SOURCE="svn+ssh://localhost/path/to/svn/repos/somefile.zip" 
DEST="/mnt/build/somefile-r$REV.zip" 

if [[ "$CHANGED" =~ "trunk/somedir/somefile.zip" ]] 
then 
     `/usr/bin/svn export --non-interactive --trust-server-cert $SOURCE $DEST` 
fi 

exit 0 

출력하는 방법이 있나요 내가 거기있을 것 같아요 특히 스크립트가 실행 파일, 또는 svn의 수출 라인에 오류 메시지 (이슈)?

+0

, 나는 스크립트가 svn에서 호출 될 때 파일을 체크인 한 사용자로서 실행된다는 것을 발견했습니다.). svn + ssh : // 체계를 사용하여 file : //로 바꾸는 대신에 그걸 고쳤습니다 – funkadelic

답변

1

훅 스크립트의 표준 출력은 무시되지만 적어도 Subversion의 최신 버전에서는 표준 오류가 클라이언트로 돌아갑니다. 나는 그것이 잠시 동안 이런 식으로 생각했지만 svn 1.4 책은 결과물이 버려 졌다고 말했기 때문에 최신 버전의 서버를 실행하고 있는지 확인하고 싶다. 표준 오류를 본다. 스트림은 일반적인 유형의 오류를 조기에 경고하는 좋은 방법입니다.

은에 추가 할

command >/path/to/logfile 2>&1 

사용 >>보다는 >을, 너무 한 곳에서 모든 것을 유지하기 위해 파일에 명령의 출력을 전송하고, 파일의 표준 오류 출력을 포함하려면 파일 : 표준 오류 출력이 SVN 클라이언트로 다시 전송되기 때문에

command >>/path/to/logfile 2>&1 

, 당신은 또한, 하나의 명령 중 하나,

를 다시 표준 출력 그런 식의 정보를 전달할 수 있습니다
command 1>&2 

또는 전체 스크립트, 스크립트의 상단에

exec 1>&2 

을 넣어.

한 눈에 스크립트에 하나의 문제점이 있습니다. svn 내보내기 행의 역 인용 부호가 마크 업의 유물이 아니라고 가정하면이를 제거해야합니다. (그들은 당신이 작성한 수출 명령을 실행 한 후 출력을, 다른 명령으로 그 출력을 실행합니다 -. 당신이 의도 거의 확실하지 무엇을)

if [[ "$CHANGED" =~ "trunk/somedir/somefile.zip" ]] 
then 
     /usr/bin/svn export --non-interactive --trust-server-cert $SOURCE $DEST 1>&2 
fi 

(I에 대해 알고하지 않았다 bash의 이중 사각형 브래킷 테스트 구문, 나를위한 멋진 새로운 발견이야!) 호기심에 대한

+0

고마워요! 나는 "exec >> /tmp/foo.log"를 스크립트 상단에 추가했다. – funkadelic