2

ユーザーがファイルのコミットに関して最小限の情報を送信したことを検証するために、SVN用に次の事前コミットスクリプトを作成しました。ただし、ディレクトリを追加/削除しようとすると、失敗します。明らかに失敗する理由はわかっていますが、すべてのアクションでpre-commitスクリプトが呼び出されていることに気づいていませんでした。実行中のアクションをフィルタリングするにはどうすればよいですか?svn logでそれを行うことはできますか、それとも他のものを使用する必要がありますか?

<?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 commitでのみ実行し、コピー、mkdirなどは実行しないようにします...

前もって感謝します!!!

編集:私はおそらく元の投稿で明確にする必要がありました、私はこれを行うためにTortoiseSVNのCreateFolder...を使用しています。TortoiseSVNはある種のコミット操作を行っているのでしょうか?

4

1 に答える 1

2

私はあなたに良い答えを持っていませんが...

多分あなたはsvnlook changed --copy-info少し助けるために使うことができます。それを使用して、アイテムがどこかからコピーされたかどうかを知ることができます。すべてのアイテムがコピーされている場合は、命令からこれを想定するのが安全な場合svn copyがあります。同様に、返されたアイテムを確認すると、ディレクトリの追加または削除によるものかどうかを判断できるはずです(これは、追加または削除される単一のディレクトリアイテムであるためです)。

それがいくらか役立つことを願っています...

于 2009-12-03T02:10:23.047 に答える