CVSによるオープンソース開発にも話題が出てるけど、 実際にやってるって話をとんと聞かない/etcのバージョン管理。これをMercurialを使って試してみた。
この用途にCVSやSubversionではなくMercurialを使うメリットは少なくとも2つ考えられる。
試してないけど、サーバ間で変更の同期を取るのにも使えるかも。
で、初めて本格的にMercurialを使い始めたのだけど、いろいろカスタマイズしたいところが出てきた。
標準のhg logの出力は次のような形で、コミットメッセージはそのsummary(=1行目)が出力される。 つまり、コミットメッセージが複数行に渡る時はそのすべてを確認することが出来ない。
changeset: 3:b9d48fc01c60 user: User <user@example.com> date: Thu Jan 05 21:00:27 2007 +0900 summary: commit message line1.
-vオプションを使うというのも一つの手だけど、もう少し柔軟に何とかならないものかと調べてみると--styleオプションが使えそうだということが分かった。
hg log [OPTION]... [FILE] options: --style display using template map file
オリジナルのテンプレートはDebianの場合/usr/share/mercurial/templates/map-cmdline.defaultにあるのでそいつをカスタマイズして使えばいいみたい。
# mkdir ~/.hg # cp /usr/share/mercurial/templates/map-cmdline.default ~/.hg/map-cmdline.custom # vi ~/.hg/map-cmdline.custom -changeset = 'changeset: {rev}:{node|short}\n ... summary: {desc|firstline}\n\n' +changeset = 'changeset: {rev}:{node|short}\n ... description:\n{desc|strip}\n\n' # cd /etc # hg log --style ~/.hg/map-cmdline.custom changeset: 3:b9d48fc01c60 user: User <user@example.com> date: Thu Jan 05 21:00:27 2007 +0900 description: commit message line1. commit message line2.
うん、出来た。標準でこのフォーマットを使いたいなら次のようにする。
# vi ~/.hgrc [defaults] log = --style /root/.hg/map-cmdline.custom
ちょくちょく利用されているようなので、Gauche 0.8.9リリースにあわせて更新。
ついでに任意のバージョンのドキュメントを用意したい人向けにこの生成方法について簡単に書いておきます。 キモはisearch.html中の<table id="all">の中身なんですが、この部分はHTML化されたGaucheユーザリファレンスを適当なディレクトリに展開したあとその中で
grep 'class="summary-letter"' gauche-refj*|\ grep --only-matching 'gauche-refj_[0-9]*\.html'|sort|uniq|\ xargs grep --no-filename '^<tr><td></td><td valign="top"><a href="gauche-refj'|\ sed 's/a href/a target="ref" href/g'
としたものを埋め込んでいます。あとは必要なファイルを落として同じディレクトリに置けば完成。