0

タイトルのように、コマンドを持つperlで書かれたポストコミットフックスクリプトから呼び出しています

$msg = `$svnlook changed -t "$rev" "$repos"`;

実行する必要があり$msg、サービスに送信する必要があります。しかし、私が走るとき

if ( length($msg) == 0 )
{
    print STDERR "msg length is 0";
    exit(1);
}

コンソールにこのエラー メッセージが表示されるのに、なぜこのsvnlookコマンドが実行されないのですか?

Windows 7 と VisualSVN サーバーを使用しています。

他の注意点として、このコマンドをフック自体で実行する別の理論がありました

@echo off
set repos=%1
set rev=%2
set changes=svnlook changed %repos% -r %rev% 
C:\Perl64\bin\perl C:\repositories\myproject\hooks\myhook.pl %1 %2 changes

しかし、このパラメーターを渡す方法がわからないchangesので、これが機能する場合は、応答することもできます。

バッチからperlスクリプトにパラメータを渡す方法は?

4

1 に答える 1

1

svnlook を実行すると、有効なオプションのリストsvnlook changedとその予想される形式の表示がヘルプに変更されました。

$ svnlook help changed
changed: usage: svnlook changed REPOS_PATH

Print the paths that were changed.

Valid options:
  -r [--revision] ARG      : specify revision number ARG
  -t [--transaction] ARG   : specify transaction name ARG
  --copy-info              : show details for copies

通常、 でトランザクション番号を指定するか、-tでリビジョン番号を指定し-rます。予期しない結果につながるリビジョン番号を渡しているようです-t: 結果がないか、例として挙げたいリビジョンとは関係のない結果です。

あなたの場合の正しい使い方は次のようになると思います:

my $msg = `$svnlook changed -r "$rev" "$repos"`;

上記のコマンドは、改行で区切られた 1 つの長い文字列を提供します。これは、リスト コンテキストで同じコマンドを使用して、より管理しやすい配列形式にすることができます。

my @changes = `$svnlook changed -r "$rev" "$repos"`;

さらに、これらの行にはすべて末尾の改行があり、chomp()組み込みを使用してそれらを削除できます。

my @changes; 
chomp(@changes = `$svnlook changed -r "$rev" "$repos"`);

SVN::SVNLookまたは、コマンドの周りの Perl ラッパーを確認することもできますsvnlook

于 2015-03-25T16:29:27.070 に答える