2009-12-03 101 views
2

我爲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正在做某種提交操作?

+0

叫我瘋了,但如果它是'pre-commit'鉤子,它不應該*總是*成爲'commit'操作...? – 2009-12-03 02:11:48

+0

這也是我的第一個想法...雖然,我可以看到爲什麼它也會在svn副本上調用。但是我不在一個我可以真正檢查這個位置的位置。 :(.doc確實說它是**只有**在提交事務被評估爲真實修訂之前調用。 – 2009-12-03 02:20:38

+0

@silky&Dan - 開發預先提交腳本時,這些是我的確切想法,但它在事實上發生了:( – jaywon 2009-12-03 02:49:50

回答

2

我沒有一個偉大的回答你,但...

也許你可以使用svnlook changed --copy-info對大家有點幫助。使用它,你可以知道某個項目是從哪裏複製的。如果所有項目都被複制,那麼可能是可以安全地從svn copy指令中假設這一點。同樣,如果你檢查的項目回來,你應該能夠確定它是否是從添加或刪除目錄以及(因爲它也只是添加或刪除一個目錄項。)

希望它可以幫助有些...

+0

丹,感謝您的建議雖然我並不是那麼直截了當的解決方案,但它運行得非常好,我只需檢查'A'的變化信息並查看添加以「/」結尾,這是唯一指示它是目錄而不是文件的指示符 – jaywon 2009-12-03 22:23:51

+0

很高興它幫助你。 – 2009-12-04 01:49:14