Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

メールでパッチをやり取りする

More than 5 years have passed since last update.

いにしえの、、というか古き良き開発手法のメモ。

Mercurialの場合

hg emailでパッチを送信し、hg importでパッチを取り込む。

設定

まず、共通の設定から。~/.hgrc に次の設定を行う。

~/.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にパッチを送るのであれば次の様になる。

.hg/hgrc
[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 に次の設定を行う。

~/.gitconfig
    [sendemail]
        smtpencryption = tls
        smtpserver = smtp.gmail.com
        smtpuser = trot.thunder@gmail.com
        smtpserverport = 587

送信先の設定はリポジトリ毎の .git/config で行う。 git send-emailのオプションでも指定出来る。

.git/config
    [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が導入されてから、一ヶ月前の未レビューのパッチが処理される様になったりと、パッチの見落としが減った。便利!

参考

troter
I'm a horse racing fan, a programmer, a mercurial evangelist in Japan. Live in #mercurialjp #TokyoMercurial .
http://troter.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away