2

私は SVN pre-commit.bat ファイルを作成しています。このファイルは Python スクリプトを呼び出して問題追跡システムにクエリを実行し、ユーザーが指定した問題追跡 ID が正しい状態 (「オープン」状態など) にあり、適切な状態に関連付けられているかどうかを判断します。事業。SVNサーバーはWindowsを実行しています(2003サーバーだと思います-問題がある場合はITグループに確認できます...)。

問題は、SVN コミットを失敗させることができないように見えることです*。それは常に成功します。私の知る限り、Pythonスクリプトは本来あるべきことを行っています。失敗した場合は「sys.exit(1)」を呼び出します (成功した場合は「sys.exit(0)」を呼び出します)。.bat ファイルについては、このフォーラムのいくつかの例を採用しましたが、うまくいくと言われていますが、まだ運がありません。少し簡略化した .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

繰り返しますが、スクリプトが実行されていること (つまり、サーバー上の環境変数の問題ではないこと) と、sys.exit(1)コードがヒットしていることはわかっています。また、「err」関数が実行されていることは確かですが、単に「exit 1」の戻りコードが SVN によって無視されているということですか?

*注: 正確ではありません。コミットを失敗させた唯一の方法は、Python スクリプトに実行時エラーが発生した場合です。ただし、意図的な実行時エラーの生成は、この場合の回避策として受け入れられません。

ご関心をお寄せいただきありがとうございます。

4

2 に答える 2

1

に変更exit 1してみてくださいexit /b 1exitコマンド インタープリター (cmd.exe) を終了します。exit /b現在のバッチ スクリプトを終了しますが、コマンド インタープリターは終了しません。

exit 1pre-commit スクリプトが実行されているコマンド インタープリターを閉じている可能性があるため、SVN が同じコマンド インタープリターで実行されている場合、SVN は終了コードを使用できません。

于 2012-04-16T12:14:36.530 に答える
0

提案に感謝しますが、解決策を見つけました。

以前はそうではないと確信していましたが、実際にはエラーは Python スクリプトにありました。本来、「sys.exit(1)」と思っていたら「sys.exit(0)」が実行されていました。

以下では、以前の .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
于 2012-04-16T18:24:41.587 に答える