Subversion ではどのようなフック スクリプトを使用していますか? 一般的なアイデアですが、コードも素晴らしいでしょう!
16 に答える
pre-revprop-change
コミットが実行された後、実際に戻ってコメントやそのような情報を編集できるようにするフックを使用しています。これは、コミット コメントに欠落した情報や誤った情報がある場合に非常に役立ちます。
ここではpre-revprop-change.bat
、Windows NT 以降用のバッチ ファイルを投稿します。あなたは確かに、より多くの変更でそれを強化することができます. そこからa を派生
post-revprop-change.cmd
させて、古いログをどこかにバックアップしsnv:log
たり、単に新しいログに追加したりすることもできます。
唯一のトリッキーな部分は、実際にバッチ ファイルから stdin を解析できるようにすることでした。これは、ここでFIND.EXE
コマンドを使用して実行されます。
もう 1 つのことは/b
、exit
コマンドでの使用に関する問題について、他のユーザーから報告があったことです。/b
エラーケースが適切に動作しない場合は、特定のアプリケーションでそれを削除する必要がある場合があります。
@ECHO OFF
set repos=%1
set rev=%2
set user=%3
set propname=%4
set action=%5
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Only allow changes to svn:log. The author, date and other revision
:: properties cannot be changed
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
if /I not '%propname%'=='svn:log' goto ERROR_PROPNAME
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Only allow modifications to svn:log (no addition/overwrite or deletion)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
if /I not '%action%'=='M' goto ERROR_ACTION
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Make sure that the new svn:log message contains some text.
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
set bIsEmpty=true
for /f "tokens=*" %%g in ('find /V ""') do (
set bIsEmpty=false
)
if '%bIsEmpty%'=='true' goto ERROR_EMPTY
goto :eof
:ERROR_EMPTY
echo Empty svn:log properties are not allowed. >&2
goto ERROR_EXIT
:ERROR_PROPNAME
echo Only changes to svn:log revision properties are allowed. >&2
goto ERROR_EXIT
:ERROR_ACTION
echo Only modifications to svn:log revision properties are allowed. >&2
goto ERROR_EXIT
:ERROR_EXIT
exit /b 1
Unix ユーザーと Windows ユーザーが混在してリポジトリを使用している場合は、予防措置としてcase-insensitive.py pre-commit フック スクリプトを使用することをお勧めします。ファイル名の大文字と小文字のみが変更されたファイルの名前変更が原因で、Windows ユーザーのsvn 更新が失敗するという、整理が難しい状況を防ぎます。私を信じてください、それがあなたのトラブルを救う可能性は十分にあります.
バグ追跡にはFogBugzを使用します。FogBugzは、チェックイン コメントにケース番号を含めることができる Subversion コミット スクリプトを提供し、バグを修正したチェックインに関連付けます。リポジトリ用の Web ベースのビューアーを使用できるように、 WebSVNインスタンスをセットアップする必要があります。
私たちがそれらを使用するいくつかのこと:
- バグトラッカーとの統合(この場合はTrac-「Closes#514」というコミットメッセージは、そのバグを自動的にクローズとしてマークします
- ビルド統合との統合(この場合はbuildbot-監視対象ブランチへのコミットがビルドをトリガーします)
- コミットを検証するためのpre-commitフック-svncheckerを使用します。PythonコードのPEP8の正確性を検証します
- チェックインメールをメーリングリストに送信する
- インデントスクリプトの実行
snvsync操作用の pre-revprop-change.bat を探している人向け:
https://gist.github.com/1679659
@ECHO OFF
set user=%3
if /I '%user%'=='syncuser' goto ERROR_REV
exit 0
:ERROR_REV echo "Only the syncuser user may change revision properties" >&2
exit 1
ここから来ています: http://chestofbooks.com/computers/revision-control/subversion-svn/Repository-Replication-Reposadmin-Maint-Replication.htmlで、Windows に適応しています。
私の職場では、さまざまなダッシュ ボードに表示される RSS フィードを生成するポストコミット フックをセットアップしました。これは、コード レビュアーがレビューの時期を知り、新しい従業員が十分にコミットしていることを確認するために使用されます。 .
コミットごとに Basecamp のフォーラムにメッセージを投稿するために、ポストコミット フック (これだと思います) を使用しています。2 つの利点:
主任開発者として、私は毎朝 (basecamp フォーラムの RSS フィードを介して) コミットのロールアップを受け取り、私のチームが何をしてきたかをすぐに確認できます。
私たちの Trac/SVN インストールはファイアウォールの背後にあるため、これにより、他の場所にいる上層部が私たちが行っていることを知ることができます。彼らはそれを理解していないかもしれませんが、マネージャーにとっては、多くのアクティビティが多くのアクティビティのように見えます;)
これの最終結果は、@Aviv が行っていることと似ていると思います。
継続的インテグレーションのために別のサーバーに最新のコミットを構築するためのソリューションを検討していますが、それが機能する前に、データベース スキーマを変更する方法を変更する必要があります。
post-commit フックを使用して、リポジトリで何かが変更されたという電子メール通知を電子メールのリストに送信します。sendmail.iniと一緒に、フック ファイルと同じフォルダーにsendmail.exeが必要です。
また、メール受信者を一覧表示するには、post-commit.cmd の横にファイル post-commit.tos.txt が必要です。ファイルには次が含まれている必要があります。
user1@example.com,user2@example.com,user3@example.com
フックコードは次のとおりです。
@ECHO OFF
setlocal
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Get subversion arguments
set repos=%~1
set rev=%2
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Set some variables
set tos=%repos%\hooks\%~n0.tos.txt
set reposname=%~nx1
set svnlookparam="%repos%" --revision %rev%
if not exist "%tos%" goto :END
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Prepare sendmail email file
set author=
for /f "tokens=* usebackq" %%g in (`svnlook author %svnlookparam%`) do (
set author=%%g
)
for /f "tokens=* usebackq delims=" %%g in ("%tos%") do (
set EmailNotificationTo=%%g
)
set SendMailFile=%~n0_%reposname%_%rev%.sm
echo To: %EmailNotificationTo% >> "%SendMailFile%"
echo From: %reposname%.svn.technologie@gsmprjct.com >> "%SendMailFile%"
echo Subject: [%reposname%] Revision %rev% - Subversion Commit Notification >> "%SendMailFile%"
echo --- log [%author%] --- >> "%SendMailFile%"
svnlook log %svnlookparam% >> "%SendMailFile%" 2>&1
echo --- changed --- >> "%SendMailFile%"
svnlook changed %svnlookparam% --copy-info >> "%SendMailFile%" 2>&1
echo .>> "%SendMailFile%"
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Send email
type "%SendMailFile%" | "%~dp0sendmail.exe" -t
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Clean-up
if exist "%SendMailFile%" del "%SendMailFile%"
:END
endlocal
これは、しばらく前に Subversion ユーザーのメーリング リストで議論されました。特に、この投稿にはいくつかの役立つアイデアがあります。
バグ/問題管理システムにリポジトリへの変更を通知するためのフック。すなわち。コミット メッセージには issue:546 または同様のタグが含まれており、解析されてバグ管理システムに送られます。
コミット中にコメントを入力するのを忘れました。pre-revprop-change フックが機能しない理由を理解する時間がありませんでした。したがって、次の svnadmin コマンドは、コミット メッセージを入力するのに役立ちました。
svnadmin setlog <filesystem path to my repository> --bypass-hooks -r 117 junk
ここで、「ジャンク」は、コメントにしたいテキストを含むファイルです。svn setlog help
より多くの使用情報があります...
Ruby Tinder ライブラリを使用して 1 つのセットアップを行い、キャンプファイヤー ルームに送信します。スクリプトが必要な場合は、コードを投稿または送信できます。
私が見た他の一般的なものは、バグ追跡システムへの投稿と電子メール通知です。
コミット フック スクリプトを使用して、リリース ロボットをトリガーします。さまざまな製品で changes.txt という名前のファイルに新しいリリース情報を書き込むと、タグと関連するアーティファクトの作成がトリガーされます。
私が考える最も一般的なものは、コミット後にリビジョン コメントを変更できるようにすることです。
これを許可するには、「pre-revprop-change」フック スクリプトを有効にする必要があります。提供されている例では、有効にすると、コメント プロパティのみを編集でき、元のコミッタのみになることができます。タイプミスを修正するのに最適です。
フック スクリプトで次のことを確認します。
- コミット ログ メッセージが提供されたこと
- コミットに対してレビュアーが指定されていること
- 自動生成されたコードや禁止されたファイル タイプがリポジトリに到達しないこと
- ブランチ/タグが作成されたときにメールを送信する
私たちはまだ以下を実装したいと考えています:
- ユーザーがファイルのロックを取得したときに電子メールを送信する
- ロックが盗まれたときにメールを送信する
- リビジョン プロパティが変更されたときに全員にメールを送信する
ログに何かが含まれていることを確認するための Windows pre-commit フック。
@ECHO OFF
setlocal
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Get subversion arguments
set repos=%~1
set txn=%2
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Set some variables
set svnlookparam="%repos%" -t %txn%
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Make sure that the new svn:log message contains some text.
set bIsEmpty=true
for /f "tokens=* usebackq" %%g in (`svnlook log %svnlookparam%`) do (
set bIsEmpty=false
)
if '%bIsEmpty%'=='true' goto ERROR_EMPTY
echo Allowed. >&2
goto :END
:ERROR_EMPTY
echo Empty log messages are not allowed. >&2
goto ERROR_EXIT
:ERROR_EXIT
:: You may require to remove the /b below if your hook is called directly by subversion
exit /b 1
:END
endlocal