フックスクリプトは、リポジトリのイベント(新しいリビジョンの作成やバージョン管理外のプロパティの変更など)を引き金に動作するプログラムです。いずれのフックも、イベントが何か、操作の対象は何か、イベントを発生させた人物のユーザー名、といった情報を受け取ります。フックの出力や終了ステータスによって、フックプログラムは動作の続行、停止、中断を切り替えることになります。実装されているフックについての詳細は、 Subversion Book の Hook Scripts の章を参照してください。
フックスクリプトは、リポジトリのあるサーバーで実行されます。 TortoiseSVN では、イベントが発生した時にローカルで実行される、クライアント側フックスクリプトも設定できます。詳細は 「クライアント側フックスクリプト」をご覧ください。
フックスクリプトのサンプルは、リポジトリの hooks
ディレクトリにあります。これらのサンプルスクリプトは Unix/Linux サーバー用であり、Windows ベースのサーバーの場合は修正が必要となります。フックはバッチファイルもしくは実行形式です。以下のサンプルは pre-revprop-change フックを実装したバッチファイルの例です。
rem ログメッセージのみを変更可能にする。 if "%4" == "svn:log" exit 0 echo 「%4」プロパティは変更できません >&2 exit 1
標準出力へ出力されたものは、すべて破棄されてしまうことに注意してください。コミットを拒否するダイアログにメッセージを表示したい場合は、標準エラー出力に出力しなければなりません。このバッチファイルでは >&2
を使用しています。
フックスクリプトがコミットを拒否した場合、それが最終決定となります。しかし、スクリプトの中に 合言葉 を埋め込むことで、その操作を上書きすることができます。スクリプトが処理を拒否しようとした場合に、特殊なパスフレーズ、特殊なパスフレーズ、固定長のフレーズ、プリフィックス付きのファイル名などをログメッセージからスキャンさせ、合言葉を見つけた場合にはコミットを実行することができるようにします。もし合言葉が見つからない場合は、「合言葉が合いません」と表示してブロックするようにします。 :-)