5

我需要执行以下操作:

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

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

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

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

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

4

3 回答 3

11

预提交钩子:

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

    }
  }
}
于 2009-12-22T20:43:12.567 回答
0

在 Python 中修改此示例以执行您想要的操作应该不会太难。另请参阅hooks存储库的子目录以获取一些模板和钩子脚本以及贡献的钩子脚本

于 2009-11-06T17:36:44.130 回答
0

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

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

您将在手册中找到有关编写预提交挂钩的一些信息。

于 2009-11-06T17:46:07.427 回答