2012-04-16 11 views
2

私が問題追跡システムに問い合わせるためのPythonスクリプトを呼び出すSVN pre-commit.batファイルを作成しています。正しい状態(例えば、「開いた」状態)であり、正しいプロジェクトに関連する。 SVNサーバーはWindowsを実行しています(私は2003年のサーバーだと思いますが、問題がある場合はITグループに確認できます)。WindowsサーバでSVNプリコミットスクリプトを失敗できません

問題は、SVNコミットが失敗するように見えないことです。それは常に成功する。 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ファイルです。また、 'err'関数が実行されていることは間違いないと思いますが、単に "exit 1"のリターンコードがSVNによって無視されているだけです。

*注:これは間違いありません。コミットが失敗した唯一の方法は、Pythonスクリプトに実行時エラーがある場合です。しかし、意図的な実行時エラーを生成することは、この場合には回避策ではありません。

ありがとうございます。

+0

Pythonスクリプトと "err"関数を完全に除外するために、私はpre-commit.batファイルに1行の "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