PERLのSVNLook出力をどのように一致させることができますか?
質問
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+(.+)$/
正常に動作するはずです。
所属していません StackOverflow