結構前にnginxの開発MLにパッチを送るというエントリを書いたが、昨日またnginxの開発MLにパッチを投稿する機会があってその際にMercurialのPatchbombという拡張を使うと便利なのが分かったので書いてみる(nginx本家でもパッチをこっちの方法を奨めている)。
Patchbombを使わない場合
今まではコミット内容をテキストで出力してメール本文にコピー&ペースト&添付して送っていた。
$ hg export -r 5252 > patchfile
しかし、これは事故りやすい。特にメール本文にコミットテキストを貼り付ける際に事故りやすい。また、一連の作業を手動で行うので緊張してミスる可能性も高い。
Patchbombを使う場合
これに対してPatchbombを使うとパッチメールを送る一連の作業を自動化できる。設定は手元の.hgrcに以下のように数行追記するだけでよい。ここでは送信する際にsendmailを使ってるが、特定のSMTPサーバを指定することもできる。詳しくはMercurial本家の解説を参照。
[extensions]
hgext.patchbomb =
[email]
method = /usr/sbin/sendmail
あとはhg email
で送信したいコミットのリビジョン番号や送信先を指定して実行する。
$ hg email --from "myemail at example.com" --to "target at example.com" -r 5252
--test
を指定すると--dry-run
的な動きをする。
$ hg email --test --from "myemail at example.com" --to "target at example.com" -r 5252
リビジョン番号を範囲指定するとその範囲分のコミットの数だけメールを送ってくれるので便利。
$ hg email --from "myemail at example.com" --to "target at example.com" -r 5763:5765
ちなみに今回実際に送ったパッチはこんな感じ。コマンド一発でいい感じのメールをまとめて送ってくれるのでとてもよい。