post-commit フックからファイル プロパティを取得することは可能ですか?
変更されたすべてのファイルを確認したいのですが、そのうちの 1 つまたは複数に特定のプロパティがある場合は、何らかのアクションを実行したいと考えています。
svn propget my:property file.txt
^これはローカルの作業コピーからのみプロパティを読み取りますが、フックが実行されるenvにはありません。
ありがとう!
フックを使用する場合は、svnlook
コマンドではなくコマンドを使用する必要がありますsvn
。
TXN=$1
REPOS=$2
SVNLOOK="/usr/bin/svnlook"
"$SVNLOOK" pget -t $TXN $REPOS my:property /path/in/repository
svnlook changed
次のコマンドを使用して、変更されたファイルのリストを取得できます。
/usr/bin/svnlook changed -t $TXN
これにより、変更の種類 (U = 更新、D = 削除、M = 変更、R = 置換) とファイルの名前が表示されます。そのファイル名をsvnlook pget
コマンドで使用して、プロパティを確認できます。
多分このようなもの:
$SVNLOOK changed -t $TXN | while read changeType fileName
do
$SVNLOOK plist -t $TXN -v $REPOS $fileName
done
シェルの問題の 1 つは、ループ内のループを簡単に実行できないことです。たとえば、 で何かできればいいのです$SVNLOOK plist
が、すでに STDOUT を STDIN にパイプしているので、 からの出力svnlook plist
は外側のループに影響します。他のファイル記述子を使用するためにあらゆる種類の奇妙なことを行うことができますが、Python または Perl を使用する方が簡単です。
また、コミットについて何も変更することはできません。ファイルまたはファイル プロパティを変更することはできません。変更できるのは のようなリビジョン プロパティだけですがsvn:log
、それもお勧めできません。
何を考えていたのかわかりませんが、注意してください。また、コミット後のスクリプトが実行されるのを待つため、時間がかかりすぎるとユーザーのコミットが遅れることも理解してください。Subversion フックで単体テストをコンパイルして実行しようとする人を見てきました。その場合、Jenkinsのような継続的なビルド システムを使用してコミット後の処理を行う方がよいでしょう。
私のsvn-watcher-hookを見て、それがどのように行われたかを確認できます。これは Perl スクリプトですが、それほど複雑ではありません。理解するのはそれほど難しいことではありません。