内容は意外なことに、個々でモクモク。
たまに来る質問に対して盛り上がる系でした。
@modal_soulさんによるTweetのまとめはこちら
#TokyoMercurial #1 まとめ その1
#TokyoMercurial #1 まとめ その2
次回は2/25
感想
変態や神の多い勉強会で楽しかったw
そんな質問->盛り上がるのなかで「qguard」という単語が出てきました。
知らなかったので使ってみた。
てかそもそもqguardってなんやねん。
$ hg -v help qguard hg qguard [-l] [-n] [PATCH] [-- [+GUARD]... [-GUARD]...] パッチのガード設定ないし表示 「ガード」はパッチ適用の可否を制御します。 ガードが設定されていない パッチは常に適用されます。 「正」のガード(例: "+foo")が設定された パッチは、 "hg qselect" によって当該ガードが設定されている場合に限り 適用されます。 「負」のガード(例: "-foo")が設定されているパッチは、 "hg qselect" によって当該ガードが設定されている場合は適用されません。 引数指定が無い場合、 現在のガード選択状況を表示します。 引数が指定された場合、 指定パッチに対するガード選択を設定します。 備考: 「負」のガード設定には、 ガード指定の前に '--' 指定が必要です。 現行パッチ以外にガードを設定するには: hg qguard 対象パッチ名 -- +2.6.17 -stable 成功時のコマンド終了値は 0 です。
らしい。
とりあえず試してみる。
@ チェンジセット: 3:f8c4733a0105 | タグ: tip | ユーザ: dnk | 日付: Sat Jan 14 22:57:24 2012 +0900 | 要約: 4th | o チェンジセット: 2:38ad6ad44a14 | ユーザ: dnk | 日付: Sat Jan 14 22:56:26 2012 +0900 | 要約: third | o チェンジセット: 1:22ff7bf5abb1 | ユーザ: dnk | 日付: Sat Jan 14 22:55:21 2012 +0900 | 要約: second | o チェンジセット: 0:bbd7202921cd ユーザ: dnk 日付: Sat Jan 14 22:54:47 2012 +0900 要約: firstとりあえずこんな感じのものを用意。
上記の状態の準備すらメンドイ人向けに https://bitbucket.org/daneko/qguardtest1 に配置しました
一旦全部パッチ化
$ hg qimport -r 1 -r 2 -r 3 $ hg qguard -l 1.diff: unguarded 2.diff: unguarded 3.diff: unguarded
1,2にマイナスのガードを追加
これ個別にしか指定できないのかなぁ…
$ hg qguard 1.diff -- -hoge $ hg qguard 2.diff -- -hoge $ hg qguard -l 1.diff: -hoge 2.diff: -hoge 3.diff: unguarded $ hg qpop -a $ hg qselect hoge //ガードを選択 ガード設定の変更により、 適用除外パッチ数が 3 から 1 になりました $ hg qpush -a 3.diff を適用中 適用中の最上位パッチは 3.diff です $ hg glog @ チェンジセット: 1:45ac9d559036 | タグ: 3.diff | タグ: qbase | タグ: qtip | タグ: tip | ユーザ: dnk | 日付: Sat Jan 14 22:57:24 2012 +0900 | 要約: 4th | o チェンジセット: 0:bbd7202921cd タグ: qparent ユーザ: dnk 日付: Sat Jan 14 22:54:47 2012 +0900 要約: first
素晴らしい!
とりあえず元に戻しましょう。
$ hg qselect -n // guard を外す $ hg qpop // 3.diffだけ設定されているので一度外す $ hg qpush -a
次はプラス側のガードを試してみる
$ hg qguard 1.diff +hoge $ hg qguard 2.diff +hoge $ hg qguard 3.diff +huga $ hg qguard -l 1.diff: +hoge 2.diff: +hoge 3.diff: +huga $ hg qselect hoge $ hg qpush -a 1.diff を適用中 2.diff を適用中 3.diff を抑止 - ガード '+huga' が適用されました 適用中の最上位パッチは 2.diff です
上手に使えばseriesファイルを直接弄っていたあんなシチュエーションやこんなシチュエーションが減りそうです(ぇ
qguardが出てきたのは下記のような話題が出たからでした。
A->B
とコミットしてしまったが
A->C->B
とすべきだった(したほうが後々見直す上でよかった)ときにどうするか?
ここでCはA->Bの中間生成物的なものとする
recordはちょっと使えないというシチュエーション
あくまで下記は俺が覚えている(というかうろ覚え)範囲なので、間違っているかもしれないし
当然他の方法だっていっぱいあると思います。
とりあえずその記憶を下記にメモ
$ hg glog @ チェンジセット: 1:9cd39df9c615 | タグ: tip | ユーザ: dnk | 日付: Sun Jan 15 00:01:38 2012 +0900 | 要約: second | o チェンジセット: 0:1e8e287648f5 ユーザ: dnk 日付: Sat Jan 14 23:59:47 2012 +0900 要約: first
まず状態Cを手動で作る
(現状の状態から必要なだけ削ってコミット)
$ hg glog @ チェンジセット: 2:8ee095d38d45 | タグ: tip | ユーザ: dnk | 日付: Sun Jan 15 00:12:35 2012 +0900 | 要約: third | o チェンジセット: 1:9cd39df9c615 | ユーザ: dnk | 日付: Sun Jan 15 00:01:38 2012 +0900 | 要約: second | o チェンジセット: 0:1e8e287648f5 ユーザ: dnk 日付: Sat Jan 14 23:59:47 2012 +0900 要約: first
というわけで
A->C->Bを作る前に
A->B->Cを作ったということになります。
上記の状態の準備すらメンドイ人向けに https://bitbucket.org/daneko/qguardtest2 に配置しました
$ hg qimport -r 1 -r 2 // CとBをパッチ化 $ hg diff -r 0 -r 2 > X.diff // A->Cの差分作成 $ hg diff -r 2 -r 1 > Y.diff // C->Bの差分作成 $ hg qimport X.diff Y.diff // 追加 $ hg qpop -a 2.diff の適用解除 1.diff の適用解除 全てのパッチの適用が解除されました $ hg qguard 1.diff -- -hoge $ hg qguard 2.diff -- -hoge $ hg qselect hoge ガード設定の変更により、 適用除外パッチ数が 4 から 2 になりました $ hg qpush -a X.diff を適用中 Y.diff を適用中 適用中の最上位パッチは Y.diff です
あとはパッチをリビジョン化すればOK
1.diff 2.diff の削除も同時にやればおしまいというところでしょうか?
さて次回に向けて勉強しないと白い目で見られそうです
mercurialのソース少し読んで見ることにします(白目
0 件のコメント:
コメントを投稿