mkdir をチェックするための SVN プリコミット スクリプト
-
11-09-2019 - |
質問
ユーザーがファイルのコミットに関して最小限の情報を送信したことを検証するために、SVN 用に次のコミット前スクリプトを作成しました。ただし、ディレクトリを追加/削除しようとすると、失敗します。明らかに失敗する理由はわかっていますが、すべてのアクションでコミット前スクリプトが呼び出されていることに気づいていませんでした。実行中のアクションをフィルターするにはどうすればよいですか?それをやってもいいですか SVNログ それとも何か他のものを使用する必要がありますか?
<?php
define('SVNLOOK', "\"C:\Program Files\CollabNet\Subversion Server\svnlook.exe\"");
define('NOTEXT', 1000);
define('NOPATTERNMATCH', 1001);
define('ERRORPROCESSING', 9999);
$repo_path = $argv[1];
$transaction = $argv[2];
$tracking_regex_pattern = "/\b(?:bug|issue|ter)\s*[#]{0,1}(\d+)\b/i";
exec(SVNLOOK . " log $repo_path -t$transaction", $revisions);
//loop through transaction message line by line for validation
$validation_passed = (bool) false;
$has_text = (bool) false;
foreach($revisions as $change_line){
$change_line = trim($change_line);
if (!empty($change_line)){
$has_text = true;
if (preg_match($tracking_regex_pattern, $change_line)) {
$validation_passed = true;
}
}
}
if(!$validation_passed){
switch($has_text) {
case true:
throwError(NOPATTERNMATCH, $revisions);
break;
case false:
throwError(NOTEXT, $revisions);
break;
default:
throwError(ERRORPROCESSING, $revisions);
break;
}
}else{
exit(0);
}
function throwError($error_code, $revisions){
$fp = fopen('php://stderr', 'w');
fwrite($fp, "********** (Error Code: $error_code) **********\n");
foreach($revisions as $change_line) {
fwrite($fp, $change_line."\n");
}
fclose($fp);
exit($error_code);
}
?>
現在のトランザクションでどの svn コマンドが実行されているかをテストするにはどうすればよいですか?基本的に、検証を実行したいのは SVNコミット コピーや mkdir などではありません...
前もって感謝します!!!
編集: おそらく元の投稿で明確にすべきだったと思いますが、TortoiseSVN の Create Folder を使用しています...これをする。TortoiseSVN が何らかのコミット操作を行っているのではないでしょうか?
解決
あまり良い答えはありませんが...
もしかしたら使えるかもしれません svnlook changed --copy-info
少し助けるために。これを使用すると、アイテムがどこかからコピーされたかどうかを知ることができます。すべての項目がコピーされると、 5月 これは、次のことから考えて間違いありません。 svn copy
命令。同様に、返されたアイテムをチェックすると、ディレクトリの追加または削除によるものであるかどうかも判断できるはずです (追加または削除されるのは単一のディレクトリ アイテムだけであるため)。
それが少しでも役立つことを願っています...