2012-04-16 4 views
2

저는 사용자가 제공 한 문제 추적 ID를 확인하기 위해 문제 추적 시스템에 쿼리하기 위해 Python 스크립트를 호출하는 SVN pre-commit.bat 파일을 작성했습니다. 올바른 상태 (예 : "열린"상태)와 올바른 프로젝트와 관련됩니다. SVN 서버는 Windows를 실행 중입니다 (2003 서버 - 생각한다면 IT 그룹과상의 할 수 있습니다 ...).Windows 서버에서 SVN 사전 커밋 스크립트를 실패 할 수 없습니다.

문제는 내가 SVN 커밋을 실패하게 만들 수 없다는 것입니다. 그것은 항상 성공합니다. AFAIK는 Python 스크립트가해야 할 일을하고 있습니다. 실패의 경우 "sys.exit (1)"을 호출하고 성공한 경우 "sys.exit (0)"을 호출합니다. .bat 파일의 경우이 포럼에서 작동하고 아직 행운이 없다는 몇 가지 예를 적용했습니다. 여기

@echo off 

set repos=%1 
set transaction=%2 
set proj=ferry 

\Python26\python svn_sync.py -s --repos=%repos% --transaction=%transaction% --project=%proj% 

IF %ERRORLEVEL% GTR 0 (GOTO err) else exit 0 

REM This should return a failure to Subversion, but does not 
:err 
echo 1>&2 
echo Your commit has failed due to invalid PR or PR state. 1>&2 
echo Thanks 1>&2 
exit 1 

는 다시 나는 스크립트 (서버에 즉하지 않는 ENV 변수 문제) 실행중인 것을 알고, 그리고 sys.exit(1) 코드가 충돌되고, 약간 단순화 .bat 파일입니다. 또한 '오류'함수가 실행되는 것을 확신합니다. 단순히 "exit 1"반환 코드가 SVN에 의해 ​​무시되는 것입니까?

* 참고 : 사실이 아닙니다. 내가 커밋을 실패한 유일한 방법은 Python 스크립트에 런타임 오류가있는 경우입니다. 그러나 의도적 인 런타임 오류를 생성하는 것은이 경우 적절한 해결 방법이 아닙니다.

관심을 가져 주셔서 감사합니다.

+0

Python 스크립트와 "err"기능을 완전히 배제하기 위해 pre-commit.bat 파일에 "exit 1"한 줄만 입력하면 커밋은 계속 성공합니다. – spargopolis

+0

(이전) SVN 관리자에게 이야기 했습니까? –

답변

1

exit 1exit /b 1으로 변경하십시오. exit은 명령 인터프리터 (cmd.exe)를 종료합니다. exit /b은 현재 일괄 처리 스크립트를 종료하지만 명령 인터프리터는 종료하지 않습니다.

exit 1은 사전 커밋 스크립트가 실행중인 명령 인터프리터를 닫을 수 있으므로 SVN이 동일한 명령 인터프리터에서 실행되는 경우 종료 코드를 사용할 수 없습니다.

0

그러나 제안을 주셔서 감사합니다 그러나 나는 해결책을 찾았습니다.

이전에 나는 그렇지 않다고 확신했지만 오류는 실제로 Python 스크립트에있었습니다. 본질적으로 "sys.exit (0)"은 "sys.exit (1)"이 될 때 실행 중이었습니다.

아래 나는 이전 .bat 파일의 echo 문에있는 주석을 약간 개선했으며 TortoiseSVN GUI 창에 이러한 내용이 표시되는지 확인할 수 있습니다.

\Python26\python svn_sync.py -s --repos=%repos% --transaction=%transaction% --project=%proj% 

IF %ERRORLEVEL% GTR 0 GOTO err 

echo ___________________ 1>&2 
echo Commit successful. 1>&2 
echo ___________________ 1>&2 
exit 0 

:err 
echo _____________________________________________________ 1>&2 
echo Your commit has failed due to invalid PR or PR state. 1>&2 
echo _____________________________________________________ 1>&2 
exit 1 
관련 문제