自分用のRevsetsを定義する。 #mercurialjp
このエントリはMercurial Advent Calendar 2013 の1日目です。
MercurialにはRevsetsというリビジョン郡を指定するための条件を記述するDSLが組み込まれています。Revsetsに関しては過去のAdvent Calendarのエントリにわかりやすい解説があるのでそちらを参照してください。
Revsetsの弱点
Revsetsを利用すると次のようにわかりやすくリビジョン郡を指定できます。
# revsetsの例 # "bug" 又は "issue" に言及したリビジョン群のうち、 タグ付け時点の内容に含まれないもの $ hg log -r "(keyword(bug) or keyword(issue)) and not ancestors(tag())"
とてもわかりやすいのですが、条件が長くなりがちで、条件が再利用しにくいという弱点があります。
自分用のRevsetsを定義する。
実はこの弱点を補うための機能はMercurialに組み込まれています。Revsetsは[revsetalias]
というセクションを利用すると自分用の条件を定義することができるのです。
これにより、「可読性は高いが、再利用性が低い」という弱点を補うことができます。
次の例はhg help revsets
にある例です。
[revsetalias] h = heads() d($1) = sort($1, date) rs($1, $2) = reverse(sort($1, $2))
実用的な例
僕は~/.hgrc
に次のような定義をしています。
[revsetalias] wip = (ancestors(.) and (not public())) pulled = (tip:. - .)
このwip
やpulled
を利用すると、次のようにaliasがわかりやすく作成できます。
[alias] # browse changesets. pulled = log -vpr "pulled and (not merge())" wip = log -vpr "wip" # import all wip changesets to mq patch. qimportwip = qimport -r 'wip and (not mq())' qiwip = qimportwip
定義しているaliasの説明です。
hg pulled
:hg pull
で取り込んだ変更内容を確認するhg wip
: 作業中の変更内容を確認するhg qimportwip
,hg qiwip
: 作業中の変更内容をすべてMQに取り込む
可読性と再利用性が両立していますね!
次回のMercurial Advent Calendarは?
次回の担当は id:cointoss1973 さんです。