如何从Perl中的Subversion预提交钩子访问提交的文件?

时间:2009-11-06 17:21:12

标签: perl svn pre-commit-hook

我需要做以下事情:

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

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

  3. 基本上,我需要一个Perl钩子的例子来读取正在提交的文件。

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

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

3 个答案:

答案 0 :(得分:11)

pre-commit hook:

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

    }
  }
}

答案 1 :(得分:0)

修改this example in Python以执行您想要的操作应该不会太困难。另请参阅存储库的hooks子目录以了解某些模板以及hook scriptscontributed hook scripts

答案 2 :(得分:0)

听起来你已经找到了基础:

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

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