【问题标题】:SVN Pre-Commit Hook in Perl on WindowsWindows 上 Perl 中的 SVN 预提交挂钩
【发布时间】:2013-01-27 16:29:33
【问题描述】:

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

代码如下:

pre-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 脚本因“无法完成 System(): 不适当的 IO 控制操作”而死掉,我不知道出了什么问题。

提前感谢您的帮助。

【问题讨论】:

  • 省略输出重定向(>$hooks...)是否有效?
  • @harpun 当我省略重定向时,它仍然不起作用。我认为问题出在系统命令上,也许是权限,我不确定。

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


【解决方案1】:

这很可能是一个 qoute 问题。 Perl 使用 \ 作为转义序列,所以当你包含一个带有双 \ 的变量时,它将被转换为简单的 \。

试试这个:

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$hooks,因为它们不会进行任何转义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-07
  • 2014-03-22
相关资源
最近更新 更多