MAP | TOP > 工房「藤車」 > SCM メモ > Mercurial の利用 > extension | << | >> |
本節では、 Mercurial の extension を開発/利用する際の、 個人的な覚え書きをまとめてあります。
extension そのものに関する詳細は、 "Using Mercurial extensions" を参照してください。
2009/03/12 に開催された Mercurial 勉強会において、 『How to write extension for Mercurial』 と題して発表させて頂いた際のプレゼン資料を公開します。
発表後に Mercurial のソースを見ていたら、 extension 初期化手順の説明に抜けを見つけましたので、 公開資料を修正してあります。
また、extension によるコマンド作成例として当日お見せしたものを、 (上記初期化手順の追加を考慮した変更を加えて)以下に掲載します。
from mercurial import commands from mercurial import extensions # ntp_now() は別途定義が必要 def ntp_commit(orig, ui, repo, *pats, **opts): # 明示的な日付指定が無い場合、 # NTP サーバからの取得値で強制指定 if not opts.get('date'): opts['date'] = ntp_now(ui.config('ui', 'ntpserver')) # オリジナルの commit コマンド定義に処理を丸投げ orig(ui, repo, *pats, **opts) def uisetup(ui): extensions.wrapcommand(commands.table, 'commit', ntp_commit) # オリジナルに対するラッピング処理
"hg commit
" に対するこの改変は:
日付変更を伴う試験を実施する環境では、 変更内容を "
hg commit
" する際の日付記録がおかしくなってしまう。"
hg commit
" の際にユーザに日付指定を強制する運用ルールは、 操作ミス発生の可能性が高いので、 明示的な日時指定が無い場合には、 NTP サーバから取得した時刻情報を利用するようにしたい。
というユースケースを想定しています。
チェンジセットの変遷を可視化するために、Graphviz の DOT 言語用ソースを生成する Mercurial 用 extension である graphviz.py を実装しました。
利用方法は JapaneseGraphvizExtension を参照してください。
Mercurial の公式リポジトリにおける 2007/07/01 〜 2007/07/31 (in JST) のチェンジセットの変遷を可視化してみましたので、 実行例としてご覧ください、
描画結果に関してですが、 あくまでチェンジセットログの情報をベースにして描画されていますから、 日付情報が適当な箇所では、 関連性が正しく描画されていないところがあります。
例えば、 5cc184800bf2(出力例では "4822") は 2007/07/05 付けで commit されているので描画対象に含まれていますが、 ここから派生した c10d3bc05a8d は 2007/06/28 付けで commit されているため描画されていません。 おそらく Christian Ebert 氏の PC の日付がおかしかったのではないでしょうか。
改めて見てみると、他にも結構日付がおかしいチェンジセットがありますね。 皆さん、PC の日付には無頓着なのでしょうか?
MAP | TOP > 工房「藤車」 > SCM メモ > Mercurial の利用 > extension | << | >> |