我爲SVN編寫了以下預先提交腳本來驗證用戶是否已提交文件提交的最小信息量。但是,當試圖添加/刪除目錄時,現在它失敗了。我知道爲什麼它明顯失敗,我只是沒有意識到每個動作都會調用pre-commit腳本。如何篩選正在執行的操作?我可以使用svn log嗎?或者我需要使用別的東西嗎?SVN預先提交腳本來檢查mkdir
<?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);
}
?>
我如何測試當前事務正在exectued什麼SVN命令?基本上我只是想驗證到上SVN提交,而不是複製,MKDIR,等...
在此先感謝!!!運行
編輯:我也許應該用原來的崗位澄清,我使用TortoiseSVN的創建文件夾......做到這一點。也許TortoiseSVN正在做某種提交操作?
叫我瘋了,但如果它是'pre-commit'鉤子,它不應該*總是*成爲'commit'操作...? – 2009-12-03 02:11:48
這也是我的第一個想法...雖然,我可以看到爲什麼它也會在svn副本上調用。但是我不在一個我可以真正檢查這個位置的位置。 :(.doc確實說它是**只有**在提交事務被評估爲真實修訂之前調用。 – 2009-12-03 02:20:38
@silky&Dan - 開發預先提交腳本時,這些是我的確切想法,但它在事實上發生了:( – jaywon 2009-12-03 02:49:50