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

发布于 2024-08-10 18:45:50 字数 256 浏览 9 评论 0原文

我需要执行以下操作:

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

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

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

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

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

I need to do the following:

  1. Write pre-commit hook in Perl

  2. Hook should check all files being committed for presence of some text, and fail if that text is not found

Basically, I need an example of Perl hook that reads files being committed.

I am really looking for some elegant solution with the least amount of code.

Notes:
Hook should use svnlook or other better way to find files.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

撩人痒 2024-08-17 18:45:50

预提交挂钩:

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

    }
  }
}

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

    }
  }
}
马蹄踏│碎落叶 2024-08-17 18:45:50

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

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

你将找到一些有关编写预提交挂钩的信息手册

It sounds like you've got the foundation figured out already:

  • get list of all files being committed
  • search each one of them in turn for particular text
  • if text is found, reject commit

You'll find some information on writing pre-commit hooks in the manual.

东京女 2024-08-17 18:45:50

修改 Python 中的这个示例 可以完成您想要的操作。另请参阅存储库的 hooks 子目录以获取一些模板和 挂钩脚本贡献的钩子脚本

It should not be too difficult to modify this example in Python to do what you want. See also the hooks subdirectory of your repository for some templates and hook scripts and contributed hook scripts.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文