0

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

错误!!脚本错误!!无法解析行:_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(.+)$/

想法?建议?

4

2 回答 2

4

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

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

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

因此,您应该能够匹配类似^([_AUD]+)\s+(.+)$. 可以更具体,但这不是必需的。

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

于 2010-02-08T18:23:10.033 回答
0

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

于 2010-02-08T18:56:12.850 回答