Mercurial Queue

分散SCM Mercurial のエクステンション
patchの管理をもっときれいにやる方法?
使う時は ~/.hgrc に以下の内容を追加する。

[extensions]
hgext.mq = 
  • qinit patch管理開始
  • qnew patchを新しくする
  • qrefresh 内容を現在のpatchに取り込み
  • qseries 管理しているpatchを表示
  • qpop 適用パッチを取り除く(パッチ名を指定すると、そこまでのパッチをすべて取り除く)
  • qpush パッチを適用(-a オプションで管理中のパッチをすべて適用)
  • qsave 管理しているパッチのバックアップを作る


既存のmercurialリポジトリ内で、hg qinit としてMQ(Mercurial Queue)を開始する。
hg qnew patch名 として、変更を集めるpatchに名前を付けて作成。
ファイルを編集したら hg qrefreshとすれば現在のpatchに変更点が反映される。
hg grefreshは複数回可能で、変更内容がpatchにマージされていく。
この状態でhg qnew patch名としてさらに新しいpatchを作成すると、
patchの順序をリポジトリ内で、管理できる
この調子で、複数のpatchを作成できる。
管理されているpatchを確認するには、hg qseries を使う。
複数のpatchは当てる順番で管理されていて、hg qpop するとpathを1つ取り除く。
hg qpush すると次のpatchが当てられる。
現在適用されているpatch は hg qappliedで確認できる。

この状態で、qsave -e -c としてパッチを保存しておく。
このときchangesetが更新されるようだ。
さらにここに、外部リポジトリからpull して updateする。
そして、qpush -m -a にて保存しておいたパッチを当て直す。
こうすると、パッチの内容も更新される。
hg export パッチ名で、パッチの内容を取得できる。

正直どこで使うと有効なのか分からないが、patchの管理が柔軟にできることを頭の隅に残しておこう。