2

WindowsマシンでSVNプレコミットチェックを行うPerlスクリプトを書いていて、VisualSVNサーバーを使用しています。

コードは次のとおりです。

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 ログ」の結果を res.txt にリダイレクトして、このファイルから読み取ることができるようにしたいと考えています。

しかし、TortoiseSVN からコミットすると、perl スクリプトが「System() を終了できません: 不適切な IO コントロール操作」で終了しました。何が問題なのかわかりません。

事前にご協力いただきありがとうございます。

4

1 に答える 1

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";
}
于 2013-01-28T09:48:37.627 に答える