Скрипт SVN pre-commit для проверки на наличие mkdir - PullRequest
2 голосов
/ 03 декабря 2009

Я написал следующий скрипт предварительной фиксации для SVN, чтобы проверить, что пользователь предоставил минимальный объем информации для фиксации файла. Однако, при попытке добавить / удалить каталог, теперь он терпит неудачу. Я знаю, почему это терпит неудачу, очевидно, я просто не осознавал, что сценарий предварительной фиксации вызывался при каждом действии. Как мне отфильтровать выполняемое действие? Могу ли я сделать это с 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 Создать папку ..., чтобы сделать это. Может быть, TortoiseSVN выполняет какую-то операцию фиксации?

1 Ответ

2 голосов
/ 03 декабря 2009

У меня нет хорошего ответа для вас, но ...

Может быть, вы можете использовать svnlook changed --copy-info, чтобы немного помочь. Используя это, вы можете сказать, был ли элемент скопирован откуда-то. Если все элементы скопированы, то может быть безопасным, предполагая это из инструкции svn copy. Аналогично, если вы проверяете возвращенные элементы, вы сможете определить, был ли он добавлен или удален также каталог (поскольку это будет только один элемент каталога, который добавляется или удаляется).

Надеюсь, это поможет ...

...