いにしえの、、というか古き良き開発手法のメモ。
Mercurialの場合
hg email
でパッチを送信し、hg import
でパッチを取り込む。
設定
まず、共通の設定から。~/.hgrc
に次の設定を行う。
[extensions]
patchbomb =
[email]
method = smtp
from = Takumi IINO <trot.thunder@gmail.com>
[smtp]
host = smtp.gmail.com
port = 587
tls = starttls
username = trot.thunder@gmail.com
送信先の設定はリポジトリ毎の .hg/hgrc
で行う。例えばmercurialにパッチを送るのであれば次の様になる。
[email]
to = mercurial-devel@selenic.com
パッチを送る
hg email
コマンドでパッチを送る。
$ hg email . # 最後のコミットをメールで送信する。
--test
オプションを利用すると送信内容の確認が行える。事前に見直すとよい。
$ hg email --test . # 変更をメールで送信するテストを行う。プレビューが表示される。
--flag
を利用すると件名に特定の文字列を含めることが出来る。
$ hg email --flag RFC . # 件名にRFCという文字列を含める
$ hg email --flag RFC --flag WIP . # 件名にRFC、WIPという文字列を含める
mercurialの開発では次のようなフラグがよく利用されている
WIP RFC STABLE V2 V3 .. VN <新機能名>
パッチを取り込む
hg import
コマンドでパッチを取り込む。メールをなんとかしてmbox形式(gmailの元のメッセージで表示される形式と同じやつだ)に変換する必要が有る。
$ hg import patch.mbox
mbox形式のメールがwebから参照出来る場合はそのURLを指定することも出来る。
$ hg import http://patchwork.serpentine.com/patch/4147/mbox/
Gitの場合
git format-patch
でパッチを作成し、git send-email
でパッチを送信し、git am
でパッチを取り込む。
設定
まず共通の設定から。 ~/.gitconfig
に次の設定を行う。
[sendemail]
smtpencryption = tls
smtpserver = smtp.gmail.com
smtpuser = trot.thunder@gmail.com
smtpserverport = 587
送信先の設定はリポジトリ毎の .git/config
で行う。 git send-email
のオプションでも指定出来る。
[sendemail]
to = bug-tar@gnu.org
パッチを作成する
git format-patch
でパッチを作成する。mbox形式のファイルが作成される。
$ git format-patch <revision range> # 指定した範囲のパッチを作成する
--output-directory
で出力先を指定できる。複数パッチが有る場合に便利
$ git format-patch --output-directory outgoing <revision range> # outgoingにパッチを作成
--subject-prefix
で件名に文字列を追加できる。
$ git format-patch --subject-prefix WIP <revsion range> # 件名にWIPという文字列を含める
パッチを送る
git send-email
でパッチを送る。
$ git send-email outgoing/*
--dry-run
オプションで送信内容の確認が行える。事前に見直すとよい。
git send-email --dry-run outgoing/*
パッチを取り込む
git am
でパッチを取り込む。mbox形式のパッチを取り込む
$ git am patch.mbox
Patchwork
メールベースでパッチのレビューや取り込みを行う立場になった場合、パッチの状態(accept, rejectなど)やパッチの見落としが発生したり、いろいろ難しい。gmailでMLを購読しているけど、どうやってmboxでダウンロードするの。。とか、使い勝手の問題もある。
で、そういう状態をなんとかするためのツールにPatchworkというものがある。
出来ること
Patchwork では次のようなことが行える。
- パッチの状態(under review, accept, rejectなど)
- メールでのやり取りの一覧
- 担当
- mbox、unified diff形式でのパッチのダウンロード
Mercurialの開発の例をあげると、Patchworkが導入されてから、一ヶ月前の未レビューのパッチが処理される様になったりと、パッチの見落としが減った。便利!
参考
- http://mercurial.selenic.com/wiki/ContributingChanges
- http://git-scm.com/docs/git-send-email.html
- http://git-scm.com/docs/git-format-patch.html
- http://git-scm.com/docs/git-am.html
-
http://jk.ozlabs.org/projects/patchwork/
- http://patchwork.serpentine.com/project/hg/list/ mercurialのpatchwork
- http://patchwork.ozlabs.org/project/linuxppc-dev/list/ linux-ppc-developmentのpatchwork