Скрипт предварительной фиксации SVN для проверки наличия mkdir

StackOverflow https://stackoverflow.com/questions/1837170

Вопрос

Я написал следующий скрипт предварительной фиксации для SVN, чтобы проверить, что пользователь отправил минимальный объем информации о фиксации файла.Однако при попытке добавить / удалить каталог теперь происходит сбой.Очевидно, я знаю, почему это не удается, я просто не понимал, что сценарий предварительной фиксации вызывается при каждом действии.Как мне отфильтровать выполняемое действие?Могу ли я сделать это с помощью журнал svn или мне нужно использовать что-то другое?

<?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-фиксация и не копия, mkdir и т.д...

Заранее спасибо!!!

Редактировать: Вероятно, мне следовало уточнить в исходном сообщении, что я использую папку создания TortoiseSVN...чтобы сделать это.Может быть, TortoiseSVN выполняет какую-то операцию фиксации?

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top