【问题标题】:How can I access the commited file from a Subversion pre-commit hook in Perl?如何从 Perl 中的 Subversion 预提交挂钩访问提交的文件?
【发布时间】:2010-12-13 22:16:13
【问题描述】:

我需要做以下事情:

  1. 在 Perl 中编写预提交挂钩

  2. Hook 应检查所有提交的文件是否存在某些文本,如果未找到该文本则失败

基本上,我需要一个读取提交文件的 Perl 钩子示例。

我真的在寻找一些代码最少的优雅解决方案。

注意事项: Hook 应该使用svnlook 或其他更好的方式来查找文件。

【问题讨论】:

    标签: perl svn pre-commit-hook


    【解决方案1】:

    预提交钩子:

    my $repos = shift;
    my $txn = shift;
    
    foreach my $line (`$svnlook changed -t $txn "$repos"`)
    {
      chomp($line);
      if ($line !~ /^([AUD_]).\s\s(.+)$/)
      {
        print STDERR "Can't parse [$line].\n";
        exit(1);
      }
      else
      {
        my $action = $1;
        my $file = $2;
        chomp($file);
        #If path has trailing slash, then it is a folder and we want to skip folders
        if($file =~ /\/$/)
        {
        next;
        }
        my $fileContent = `$svnlook cat -t $txn "$repos" "$file"`;
        if ($action =~ /[AU]/)
        {
           my @lines = split(/\n/, $fileContent );
           #Check for whatever you need in this file's content
    
        }
      }
    }
    

    【讨论】:

    【解决方案2】:

    修改this example in Python 做你想做的应该不会太难。另请参阅存储库的hooks 子目录以获取一些模板以及hook scriptscontributed hook scripts

    【讨论】:

    • @Alex 没问题。编辑别人的帖子是 Stackoverflow 的方式,对网站有帮助。
    【解决方案3】:

    听起来你已经弄清楚了基础:

    • 获取所有提交文件的列表
    • 依次搜索其中的每一个以查找特定文本
    • 如果找到文本,则拒绝提交

    您可以在manual 中找到一些关于编写预提交挂钩的信息。

    【讨论】:

      猜你喜欢
      • 2015-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多