目次
この章ではフックスクリプトと、よく利用される GNU arch のレシ ピについて説明する。
ある種の重要なできごとが起こった時に、それに連動する形であら かじめ登録しておいた処理が実行されると都合がよいことがよくある。こ のような処理をフックと言う。これは別に GNU arch に限った話ではない。 ソフトウェアに限った話ですらない。腰にぶら下げる万歩計を考えて見れ ばいい。足を一歩踏み出すたび、万歩計はカウントされる。これは足を一 歩踏み出すという行動に対するフックだと言える。フックには二つの要素 がある。ひとつはフックのトリガーとなる出来事、もう一つはフックの内 容だ。出来事のことをフックイベントと呼んだりする。
GNU arch でのフックイベントは以下のとおりである:
表 9.1. フックイベント一覧
| フックイベント | イベントの意味とタイミング |
|---|---|
| make-archive | 新しいアーカイブが作成された直後に発生 |
| make-category | 新しいカテゴリが作成された直後に発生 |
| make-branch | 新しいブランチが作成された直後に発生 |
| make-version | 新しいバージョンが作成された直後に発生 |
| precommit | コミット直前に発生 |
| commit | コミット直後に発生 |
| import | インポート直後に発生 |
| tag | 分岐作成の直後に発生 |
実際に呼び出されるフック用のプログラムは、 ~/.arch-params/hook である。どのイベントが起こった時でもこのプログ ラムが呼び出される。~/.arch-params/hook は実行可能ビットが設定され ている必要がある。
~/.arch-params/hook は唯一の引数をとり、これは上記で列挙した フックイベント文字列そのものである。たとえばコミット直後には:
~/.arch-params/hook commit
という形でフックが呼び出される。フックスクリプト中で引数の内 容によって分岐するようなシェルスクリプトにすることで各種フックイベ ント用の処理を切替えることができる。さらに必要に応じてフックは以下 の環境変数が設定された状態で呼び出される。
表 9.2. 設定される環境変数一覧
| 環境変数 | 説明 |
|---|---|
| ARCH_ARCHIVE | |
| ARCH_CATEGORY | |
| ARCH_BRANCH | |
| ARCH_VERSION | |
| ARCH_REVISION | |
| ARCH_LOCATION | |
| ARCH_TREE_ROOT | |
| ARCH_TAGGED_ARCHIVE | |
| ARCH_TAGGED_REVISION |
以下は hook ファイルの例である:
#!/bin/sh
if [ "$1" == "commit" ]; then
echo
"${ARCH_ARCHIVE}/${ARCH_CATEGORY}--${ARCH_BRANCH}--${ARCH_VERSION}--${ARCH_REVISION}
created" \
| mail octopus@bluegate.org
fi
より複雑な例は以下である:
#!/bin/sh
case "$1" in
precommit)
;;
commit)
;;
…
esac