0

私はWindowsサーバーでSVNを実行しており、Perlスクリプトを使用していくつかのpre-commitフックを実装しています。TortoiseSVNから次のエラーメッセージが表示されます。

エラー!!ScriptError!! 行を解析できません:_U path / to / files / trunk

これはスクリプトです:

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(.+)$/ました。

考え?提案?

4

2 に答える 2

4

SVNのドキュメントを見ずに、私は推測しています。上の出力では、Uと実際のパスの間に1つのスペースしか表示されていませんが\s\s、すべての正規表現にあります。

[編集]さて、 svnlookリファレンスを調べました。まず、出力が次のように指定されているため、現在のバージョンのsvnlookでは正規表現が失敗します。

  • 最初の2列にはステータスが含まれています
  • パスは5列目から始まります
  • ステータスは、A(追加)、U(コンテンツ変更)、D(削除)、_ U(プロパティ変更)、およびUU(コンテンツ+プロパティ変更)のいずれかになります。

だから、あなたはのようなものと一致することができるはずです^([_AUD]+)\s+(.+)$。より具体的にすることもできますが、それは必須ではありません。

これが一致しない場合は、コマンドの出力をファイルにパイプして、関連する部分をここに投稿してください。

于 2010-02-08T18:23:10.033 に答える
0

if ($line !~ /^_?([AUD])\s+(.+)$/正常に動作するはずです。

于 2010-02-08T18:56:12.850 に答える