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
%




















