ポストコミットのSubversionフックでプロジェクト名を取得します
質問
私はこのようにレイアウトされたサブバージョンリポジトリを持っています:
Repo
ProjectA
trunk
branches
tags
ProjectB
trunk
branches
tags
1つのプロジェクトに適用されるポストコミットフックスクリプトを作成しようとしていますが、リポジトリのルートに収容されていることがわかりました。
私が取得する2つのパラメーターのみは、リポジトリパスとリビジョン番号です。特定のプロジェクトのためにこのスクリプトを実行する方法はありますか?
ありがとう、
解決:究極のソリューションは次のようになりました:
#!/bin/bash
REPOS="$1"
REV="$2"
if svnlook changed -r $REV $REPOS | grep ProjectA; then
echo "do stuff"
fi
解決
はい、使用してください svnlook コミットされた改訂でファイルのリストを変更するには、適切なRegexの名前を付けてグレップして、ポストコミットが正しい場所にプロジェクト名を含むかどうかを判断するために、コードを実行する場合、そうでなければ、ジャンプにジャンプしますスクリプトの終了と戻り0。
他のヒント
Windows 2012サーバーでVisualSVNのこの質問に対する答えを探してここに来ました。さらにいくつかの情報を収集した後、Windowsバッチファイルのために私が思いついたソリューションは、開発サーバーにPHPスクリプトをロードして特定のプロジェクトをそのサーバーに展開するようにします。フックコマンドは1行です。
svnlook changed "%1" | findstr /L "ProjectA/trunk/" && powershell -Command "Invoke-WebRequest http://192.168.0.177/checkout_on_commit/checkout_on_commit.php -OutFile $ENV:SYSTEMROOT\Temp\commit.txt" || rem
REMは、他のプロジェクトへのコミットに失敗したとしてカメがフックが報告されるのを防ぐために、「ノーオプ」として必要でした。プロジェクトをLinuxサーバーに展開するCheckout_on_commit.phpの内容は次のとおりです。
<?php
`date >> checkout.log`;
`svn sw --non-interactive --no-auth-cache --username project_a_readonly --password trytoguess https://svnserver/svn/GroupA/ProjectA/trunk /app/www/ >> checkout.log`;
?>
Subversionでは、「プロジェクト」のような定義は存在しません...定義はあなたが行う必要があります。これは、「プロジェクト」ベースではなくリポジトリの変更についてsubversionが実行することを意味します...
リポジトリのように入手できる情報や改訂番号のように使用して、必要な情報を抽出できます。SVNLookを使用して必要な情報を抽出するだけで、適切なパラメーターを使用してSVNLookを呼び出すことができます。