代码之家  ›  专栏  ›  技术社区  ›  jaywon

用于检查mkdir的svn预提交脚本

  •  2
  • jaywon  · 技术社区  · 15 年前

    我为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命令?基本上,我只希望验证在 支持向量机提交 不是副本,mkdir,等等…

    事先谢谢!!!!

    编辑: 我可能应该和原来的帖子澄清一下,我正在使用Tortoissesvn的创建文件夹…这样做。也许Tortoissesvn正在执行某种提交操作?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Dan McGrath    15 年前

    我没有很好的答案,但是…

    也许你可以用 svnlook changed --copy-info 有点帮助。使用它,您可以判断某个项目是否是从某个地方复制的。如果复制了所有项目,则 可以 从一个 svn copy 指令。同样,如果您检查返回的项目,您应该能够确定它是来自添加还是删除一个目录(因为它只是一个正在添加或删除的目录项目)。

    希望能有所帮助…