SVNコミット後のファイルをコミットするときにスクリプトがSVNに)コマンドラインから実行されますが、ではありません
-
23-09-2019 - |
質問
私は、コマンドラインから罰金を実行し、SVNでコミット後のフックを持っています
env - ./foo.sh /path/to/svn/repos/ 12345
が、ときにスクリプトは、それが仕事に表示されませんSVNから呼び出されます。
特定のファイルが変更された場合、私はネットワーク共有へのSVNのエクスポートを行う私は基本的にコミットされたファイルを確認してやっていると。コマンドラインから罰金を作品ます。
次のようにコミット後のスクリプトは次のとおりです。
#!/bin/sh
REPOS="$1"
REV="$2"
CHANGED=`/usr/bin/svnlook changed -r "$REV" "$REPOS"`
SOURCE="svn+ssh://localhost/path/to/svn/repos/somefile.zip"
DEST="/mnt/build/somefile-r$REV.zip"
if [[ "$CHANGED" =~ "trunk/somedir/somefile.zip" ]]
then
`/usr/bin/svn export --non-interactive --trust-server-cert $SOURCE $DEST`
fi
exit 0
を出力する方法ファイルにすべてのエラーメッセージがある場合に、スクリプトの実行、または特に(私は問題があるかもしれないと思う)のsvn輸出ライン?
解決
フックスクリプトからの標準出力は破棄されますが、標準誤差は、少なくともSubversionの最近のバージョンでは、クライアントに戻ります。標準エラーを見て - あなたは、サーバーの最新バージョンを実行していることを確認したいかもしれませんので、私はそれがしばらくの間、このようにしていたと思ったが、SVN 1.4本は出力が破棄されていることを述べていますストリームは、エラーの一般的なタイプの早期警告を得るための良い方法です。
すべて一つの場所でそれを保つために、ファイルにコマンドの出力を送信し、あまりにもファイルに標準エラー出力を含めるには、DO
command >/path/to/logfile 2>&1
使用>>
ではなく、ファイルに追加する>
ます:
command >>/path/to/logfile 2>&1
標準エラー出力は、SVNクライアントに送信されますので、あなたも、標準出力バックからの情報を渡すことができますそのように、いずれかの単一のコマンドのために、
command 1>&2
またはスクリプト全体のために、
を置くことにより、exec 1>&2
スクリプトの先頭に
一見、私はあなたのスクリプトで1つの問題を参照してください:のsvn輸出ラインでバッククォートを想定したマークアップの加工品ではありません、あなたはそれらを削除する必要があります。 (彼らはあなたが書いたことをexportコマンドを実行し、その出力を取り、別のコマンドとしてその出力を実行します - 。あなたが意図したものをほぼ確実ではない)。
if [[ "$CHANGED" =~ "trunk/somedir/somefile.zip" ]]
then
/usr/bin/svn export --non-interactive --trust-server-cert $SOURCE $DEST 1>&2
fi
(私は私のために素敵な新しい発見だbashで二重角括弧のテスト構文、知りませんでした!)