PERLのSVNLook出力をどのように一致させることができますか?

StackOverflow https://stackoverflow.com/questions/2223802

  •  19-09-2019
  •  | 
  •  

質問

WindowsサーバーでSVNを実行しています。Perlスクリプトを使用して、いくつかの事前コミットフックを実装しています。 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(.+)$/.

考え?提案?

役に立ちましたか?

解決

SVNドキュメントを調べることなく、私はただ推測しているだけです:上記の出力では、Uと実際のパスの間に1つのスペースのみが表示されますが、あなたは持っています \s\s すべての正規表現で。

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

  • 最初の2列にはステータスが含まれています
  • パスは5列目から始まります
  • ステータスは(追加)、u(コンテンツの変更)、d(削除)、_u(プロパティの変更)、およびuu(コンテンツ +プロパティの変更)の1つです。

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

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

他のヒント

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top