Я написал следующий сценарий предварительной фиксации для SVN, чтобы проверить, что пользователь предоставил минимальный объем информации о фиксации файла. Однако при попытке добавить/удалить каталог, теперь он не работает. Я знаю, почему это происходит неудачно, я просто не понял, что сценарий pre-commit был вызван при каждом действии. Как фильтровать для выполняемого действия? Могу ли я сделать это с svn log или мне нужно использовать что-то еще?SVN pre-commit скрипт для проверки 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);
}
?>
Как проверить, что команда svn вызывается в текущей транзакции? В основном я хочу, чтобы проверка выполнялась только на svn commit, а не на копии, mkdir и т. Д.
Заранее благодарен!
EDIT: Возможно, я должен был уточнить исходное сообщение, я использую папку создания TortoiseSVN ... для этого. Может быть, TortoiseSVN выполняет какую-то операцию фиксации?
Назовите меня сумасшедшим, но если это крюк 'pre-commit', не должен ли он всегда быть операцией' commit' ...? –
Это была моя первая мысль тоже ... Хотя, я могу понять, почему она будет вызвана и с SVN-копией. Я не в том месте, где я могу это проверить. :(Док говорит, что это ** ТОЛЬКО **, вызванное непосредственно перед транзакцией фиксации, для реальной проверки. –
@silky & Dan - это были мои точные мысли при разработке сценария pre-commit, но он находится в факт: ( – jaywon