如何匹配Perl中的svnlook输出?

时间:2010-02-08 18:14:22

标签: perl svn svnlook

我正在Windows服务器上运行SVN,而我正在使用Perl脚本来实现一些预提交挂钩。我看到来自TortoiseSVN的以下错误消息:

  

错误!! ScriptError !!无法解析   line:_U 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 个答案:

答案 0 :(得分:4)

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

[编辑] 好的,现在我看看svnlook reference。首先,你的正则表达式失败了当前版本的svnlook,因为输出指定如下:

  • 前两列包含状态
  • 路径从第五列开始
  • 状态可以是A(已添加),U(已更改内容),D(已删除),_ U(属性更改)和UU(内容+属性已更改)之一

所以,你应该能够匹配^([_AUD]+)\s+(.+)$之类的东西。人们可以更具体,但这不是必要的。

如果这不匹配,请将命令的输出传递给文件,并在此处发布相关部分。

答案 1 :(得分:0)

if ($line !~ /^_?([AUD])\s+(.+)$/应该可以正常使用。