hgのMQをつかうとパッチをあてたり外したりを機械的にできるようになるところが便利。
たとえば作業ディレクトリのリビジョン番号が1234だとしよう。
1234 1235 __o___________o tip いまここ
じつは作業ディレクトリもひとつのチェンジセットだとおもうと hg parent で作業ディレクトリのリビジョンが表示されることに納得。
work o 1234 / 1235 __o_____/_____o tip いまここ
このときに hg qpush patch3 すると、こんなグラフになる。
qbase qtip,tip ____o_______o_______o / patch1 patch2 patch3 __o_____/______o qparent one of head
qparent | パッチをあてた元チェンジセット |
qbase | いちばん先にあてたパッチ |
qtip | いちばん最後にあてたパッチ |
tip | 最後にcommitしたチェンジセット |
ほんとtipって何の役にたつのかわからないが、たとえばパッチがあたった状態で hg pull してqparentの先がのびるとtipがかわる。
qbase qtip ____o_______o_______o / patch1 patch2 patch3 tip __o_____/______o_______________________o qparent one of head
diffのとりかたも、どことどこの差分を表示するのかでいろいろあってめんどくさい。
hg diff | qtip(patch3)からworkへの変更(作業領域内での変更) |
hg export qtip | リビジョンpatch2からリビジョンpatch3への変更(patch3の内容そのもの) |
hg qdiff | patch3 + workの変更 (= hg export tip + hg diff) |
実際にやってみるとこんなかんじ:
% cat -n foo 1 export LANG=C 2 export HGUSER=koie@example.jp 3 rm -r repo 4 hg init repo 5 cd repo 6 echo 111111111 >file 7 hg add file 8 hg commit -m xxx file 9 hg qinit 10 hg qnew patch 11 echo 222222222 >>file 12 hg qrefresh 13 echo 333333333 >>file 14 hg glog 15 hg diff 16 hg export qtip 17 hg qdiff % sh -x foo + export LANG=C + export HGUSER=koie@example.jp + rm -r repo + hg init repo + cd repo + echo 111111111 + hg add file + hg commit -m xxx file + hg qinit + hg qnew patch + echo 222222222 + hg qrefresh + echo 333333333 + hg glog @ changeset: 1:56e00314d749 | tag: patch | tag: qbase | tag: qtip | tag: tip | user: koie@example.jp | date: Fri Nov 25 15:37:02 2011 +0900 | summary: [mq]: patch | o changeset: 0:e0bf2be8ddd5 tag: qparent user: koie@example.jp date: Fri Nov 25 15:37:01 2011 +0900 summary: xxx + hg diff diff --git a/file b/file --- a/file +++ b/file @@ -1,2 +1,3 @@ 111111111 222222222 +333333333 + hg export qtip # HG changeset patch # User koie@example.jp # Date 1322203022 -32400 # Node ID 56e00314d749987b2548cf4073f9202f9bb40c46 # Parent e0bf2be8ddd5b4b2886984b82fe9faf9713a4604 [mq]: patch diff --git a/file b/file --- a/file +++ b/file @@ -1,1 +1,2 @@ 111111111 +222222222 + hg qdiff diff --git a/file b/file --- a/file +++ b/file @@ -1,1 +1,3 @@ 111111111 +222222222 +333333333 %