题
我在 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+(.+)$/
应该正常工作。
不隶属于 StackOverflow