我写了下面预提交脚本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);  
}
?>

我如何测试当前事务正在exectued什么SVN命令?基本上我只是想验证到上运行的 SVN提交并没有复制,MKDIR,等等...

预先感谢!!!

编辑:我也许应该用原来的岗位澄清,我使用TortoiseSVN的创建文件夹......做到这一点。也许TortoiseSVN是做某种提交操作?

有帮助吗?

解决方案

我没有给你一个伟大的答案,但...

也许你可以使用svnlook changed --copy-info对大家有点帮助。利用这一点,你可以告诉我们,如果一个项目是从地方复制。如果所有项目被复制,那么它的可能的是安全的从svn copy指令进行假设。同样,如果你检查的项目回来,你应该能够确定它是否是从添加或删除目录以及(因为它也只是添加或删除一个目录项。)

希望它可以帮助...有点

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top