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

如何匹配Perl中的svnlook输出?

  •  0
  • dls  · 技术社区  · 16 年前

    我在windows服务器上运行svn,并使用perl脚本实现一些预提交挂钩。我看到了来自Tortoisesvn的以下错误消息:

    错误!!脚本错误!!无法分析 行:_path/to/files/trunk

    这是剧本:

    foreach my $line (`$svnlook changed -t "$txn" "$repos"`)
    {
      chomp($line);
      if ($line !~ /([AUD]).\s\s(.+)$/)
      {
        print STDERR "!!Script Error!! Can't parse line: $line\n";
        exit(1);
      }
      else
      {
         # perform some actions 
      }
    }
    
    exit(0);
    

    我试着用类似于 /_([AUD]).\s\s(.+)$/ 没有成功-我甚至试过 /.*([AUD]).\s\s(.+)$/ .

    思想?建议?

    2 回复  |  直到 16 年前
        1
  •  4
  •   gimpf    16 年前

    不看SVN文档,我只是猜测: 在上面的输出中,只有一个空格显示在u和实际路径之间,但是 \s\s 在你所有的正则表达式中。

    [编辑] 好的,现在我看了一下 svnlook reference . 首先,对于当前版本的svnlook,regex失败,因为输出如下所示:

    • 前两列包含
    • 这条路从第五纵队开始
    • 状态可以是a(已添加)、u(内容已更改)、d(已删除)、u(属性更改)和uu(内容+属性已更改)

    所以,你应该能和 ^([_AUD]+)\s+(.+)$ . 你可以说得更具体些,但那不是必须的。

    如果不匹配,请将命令的输出通过管道发送到文件,并将相关部分发布到此处。

        2
  •  0
  •   jamessan    16 年前

    if ($line !~ /^_?([AUD])\s+(.+)$/ 应该工作得很好。