記事検索
月別アーカイブ
アクセスカウンター

    タグ絞り込み検索
    2011年11月25日15:39MQのタグ

    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
    %
    


    このエントリーをはてなブックマークに追加

    トラックバックURL

    コメントする

    名前
     
      絵文字