前回に引き続き "12.11 Managing patches in a repository" から読み始めます。
この節では、 MQ ではパッチスタックそのものも Mercurial の枠組みで構成管理することができること、 および実際にパッチスタックを構成管理する上で必要な事柄を説明しています。
-c オプションつきで hg qinit
により .hg/patches 配下を初期化する際に、
Mercurial リポジトリ形式で初期化することができます。
.hg/patches 配下のパッチ情報は、
自動的に hg add が実施されたり、
hg qcommit で直接コミットできるなど、
なかなか便利なようです。
パッチスタックへの変更(例えば、
他のパッチスタックリポジトリから取り込んだ変更を
hg update した)は、
hg qpop -a と hg qpush -a
で再度適用する必要があるそうです。
.hg/patches/.hg/hgrc に
Mercurial のフック([hooks] の update)
を書いておいて、
hg qpop -a/hg qpush -a 適用を自動化する、
という手もありますね。
diffstat や、 patchutils が紹介されています。
"12.6.5 Handling rejection" で紹介されたツール同様、 普段は「パッチ」を扱うことが殆ど無いため、 これらのツールの名前は初めて知りました。
「面倒臭い」のあるところ開発のネタあり、 というところでしょうか。
「説明的な名前を付けろ(Give your patches descriptive names)」、 「常に作業対象を把握せよ(Be aware of what patch you're working on)」や 「便利なツールの習熟に時間を費やせ (learn how to use some of the third-party tools)」というのは、 パッチや MQ に限った話ではないですね。
「ちょっとしたパッチ」のつもりでも、 後のリベースのことを考えた場合、 MQ でパッチ管理を行っておいた方が良い、 というのは確かにそうですね。
個人的にも、 もっと早く MQ を使えるようになっていれば、 Mercurial へのパッチの作成も、 少しは楽になっていたような気がします。 「分散リポジトリ」による「ローカルコミット」だけでも十分便利なのですが。
この節は hg qfold が全てです。
"MQ cookbook" というよりは、
"patch cookbook"(あるいは
"More about patches 再び")
という感じですが、
filterdiff を使ったパッチの
「調理方法」が説明されています。
パッチを切り刻んで繋げ直したりする必要があるのも、 世界中からパッチを受け付けるフリーソフトウェア (or オープンソースソフトウェア)ならではなのでしょうが、 ツールを使うにしろ随分と手間隙が掛かるわけですから頭の下がる思いです。
MQ と quilt はコマンド体系が似ているらしいです。 既に quilt に親しんでいる方はこの節を読んでおいたほうが良いでしょう。
以上で "Managing change with Mercurial Queues" の節は終了です。 次回は "13 Advanced uses of Mercurial Queues" を読む予定です。
"Distributed revision control with Mercurial" 関連エントリの一覧は、BOSBook(Bryan O’Sullivan Book)タグで参照できます。