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

错误!!脚本错误!!无法解析线:_U 路径/到/文件/主干

这是脚本:

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(.+)$/.

想法?建议?

有帮助吗?

解决方案

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

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

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

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

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

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top