Mercurial: "Adding functionality with extensions" を読む
Tagged:  •    •  

今回は "14. Adding functionality with extensions" を読みます。

(we'll) briefly touch on some of the machinery you'll need to know about if you want to write an extension of your own (自分でイクステンションを実装する際に必要と思われる仕組みについて、 簡単に触れようと思います)

という前置きで始まる本章ですが、 残念ながら現状(2007/11)では、 この章のメインは「How to write extension」ではなく 「Adding functionality」です。 "this book is a work in progress " ですから、 今後の充実に期待です。

14.1 Improve performance with the inotify extension

hg status に代表される ファイルの stat が必要な操作を、 劇的に(原著者曰く「1000 倍」)早くする inotify イクステンションの紹介。

尤も、サーバへの接続が必要無いことから、 中央集約型リポジトリの SCM ツールに比べれば、 Mercurial の応答速度は十分速いのですけどね。

この章を読むまでは、 寡聞にして inotify なる Linux カーネルサブモジュールの存在を知りませんでした。

/etc 配下の管理等のために、 stat の更新日時情報を元に cron で走査していたのがつい先日の事の様ですが、 最近は随分便利になったものですね。

14.2 Flexible diff support with the extdiff extension

任意の差分表示ツールが使えるようになる extdiff イクステンションの紹介。

外部 diff コマンド起動時に 「比較対照リビジョンごとにスナップショットを生成する」 という記述を目にした時は、 なんと太っ腹な!と思いましたが、 「実行効率上、 2つのリビジョンの間で差分のあるディレクトリ・ ファイルのスナップショットだけが作成」されるとのことで、 ホッとしました。

きっとここでも、inotify イクステンションは性能向上に一役買ってくれるのでしょう。

14.2.1 Defining command aliases

extdiff イクステンションは、 外部差分表示プログラムとデフォルト引数の組み合わせに対して、 新たなコマンドとして定義できるのだそうです。 これは便利。

14.3 Cherrypicking changes with the transplant extension

原著者曰く「Brendan(transplant の作者) とチャットでの話し合いが必要」 とのことで、 結構入り組んだ機能を提供するイクステンションなのでしょう。

でも、わざわざ節を設けるくらいなのだから、 きっと便利なものに違いないので、 後で説明を読んで勉強しておきましょうかねぇ。

14.4 Send changes via email with the patchbomb extension

「パッチ」を電子メール送信する patchbomb イクステンションの紹介。

デフォルトではメール送信を行わないところは、 notify フック等にも共通する「安全」指向と言えるでしょう。

14.4.1 Changing the behaviour of patchbombs

送信するメールの体裁を変えるためのあれこれ。


自分でイクステンションを実装した経験で言うなら、 「各リビジョンの詳細情報の取り出し」のような、 所謂 Mercurial API とでも呼ぶべきものの説明が欲しいところですが、 同じ 0.9.x 系列でも、 ある時点からガラリとアクセス方法が変わったりするので、 もう少し安定するまで(1.0 とか?)は保留、 という判断なのかもしれません。

"Handling repository events with hooks" を読む」 でも書きましたが、 手始めとして実装する際の取っ掛かり程度の how to は、 個人的に別途まとめてみようと思っています。


"Distributed revision control with Mercurial" 関連エントリの一覧は、BOSBook(Bryan O’Sullivan Book)タグで参照できます。