Windows上的SVN Pre-Commit Hook in Perl

时间:2013-01-27 16:29:33

标签: perl svn visualsvn-server pre-commit-hook pre-commit

我正在编写Perl脚本来对 Windows 机器进行SVN预提交检查,并使用VisualSVN Server。

以下是代码:

预commit.bat

C:\Perl\bin\perl.exe D:\Repositories\iCP\hooks\pre-commit.pl %1 %2
exit %ERRORLEVEL%

pre-commit.pl

#!/usr/bin/perl

use strict;
use warnings;

my $repos = $ARGV[0];
my $txn = $ARGV[1];

my $svnlook = "D:\\svnlook.exe";
my $hooks = "D:\\Repositories\\iCP\\hooks";

if(system("$svnlook log -t $txn $repos >$hooks\\res.txt"))
{
  die "Unable to finish system(): $!\n";
}

....

基本上,我希望将“svnlook log”结果重定向到res.txt,然后我可以从这个文件中读取。

但是当我从TortoiseSVN提交时,perl脚本死于“无法完成系统():不适当的IO控制操作”,我不知道出了什么问题。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

最有可能是报价问题。 Perl使用\作为转义序列,当你包含一个带有double的变量时,它会被转换为简单的\。

试试这个:

my $svnlook = "D:\\\\svnlook.exe";
my $hooks = "D:\\\\Repositories\\\\iCP\\\\hooks";

if(system("$svnlook log -t $txn $repos >$hooks\\res.txt"))
{
  die "Unable to finish system(): $!\n";
}