こんにちは.だいみょーじんです.
最近QEMUにパッチを送ったので,OSSへのパッチの送り方をまとめておきます.
OSSへのパッチの送り方といっても,OSSごとに方法やルールが異なることがあります.
例えばQEMUの場合ここに詳細が書いてあります.
ただし,gitでバージョン管理されているOSSであれば,大体の流れは同じでしょう.
ここでは私がQEMUにパッチを送った際の手順を説明します.
リグレッションテスト
まずは,自分が加えた変更が,他の機能などに影響を及ぼさないかどうか確認しておきましょう.
QEMUの場合,リポジトリのトップのディレクトリにおいて,
$ make check
でテストを実行します.自分が加えた変更の前後におけるテスト結果のdiffを取り,退行がないことを確認しましょう.
コミット
QEMUでは--signoff
オプションを付けてコミットするというルールがあります.
こうすることでコミットメッセージの末尾にSigned-off-by:<アカウント情報>
という行が追加され,このパッチを取り込んでもいいですよという宣言になります.
--signoff
オプションが不要なOSSもあるので,調べておきましょう.
$ git commit --signoff
上のコマンドを叩くと,コミットメッセージの編集画面になります.
レビュアーなど多くの人に読んでもらうものなので,なぜこのような変更を行ったのか分かるように丁寧に書きましょう.
また,コミットメッセージの行の長さに制限が設けられていることがあるので,いい感じに改行を入れて調整しましょう.
QEMUの場合76文字を超える行は禁止されています.
事前にコミットメッセージに関するルールを確認したり,git log
で過去のコミットメッセージを読んで参考にするとよいでしょう.
パッチ生成
コミットできたら,次はそのコミットからパッチを生成します.
$ git format-patch -1
上のコマンドでは,最新のコミットのパッチをひとつ生成します.
オプション-1
はパッチを生成するコミット数を意味し,-N
で直近のN個のコミットのパッチを一気に生成します.
拡張子.patch
のパッチファイルが作成されます.
中身はただのテキストファイルで,コミットメッセージや変更内容が書かれています.
パッチ送信
いよいよパッチを送信しますが,gitのメール送信機能を追加でインストールする必要があります.
Ubuntuの場合以下のコマンドでインストールできます.
$ sudo apt-get install git-email
さらに,メールを送信できるように設定をいじります.
私の場合Office365のメールアドレスを使用しているので,こんな感じで設定します.
$ git config --global sendemail.confirm auto
$ git config --global sendemail.smtpserver smtp.office365.com
$ git config --global sendemail.smtpencryption tls
$ git config --global sendemail.smtpuser <Office365のメールアドレス>
$ git config --global sendemail.smtpserverport 587
$ git config --global sendemail.smtppass <Office365のパスワード>
.gitconfig
に直接書き込んでしまってもよいでしょう.
[sendemail]
confirm = auto
smtpserver = smtp.office365.com
smtpencryption = tls
smtpuser = <Office365のメールアドレス>
smtpserverport = 587
smtppass = <Office365のパスワード>
パスワードを書きっぱなしにするのは危ないので,パッチの送信が終わったら消しておきましょう.
次に宛先を調べておきましょう.
QEMUの場合qemu-devel@nongnu.org
を宛先とし,自分が変更を加えた個所の担当者をCCに追加するとよいそうです.
QEMUのリポジトリのトップのディレクトリにおいて,以下のコマンドで担当者のメールアドレスが出力されます.
$ ./scripts/get_maintainer.pl -f <自分が変更を加えたファイル>
これでパッチを送信する準備が整いました.
あとはパッチを送信するコマンドを叩くだけです.
$ git send-email <パッチファイル> --to=<宛先> -cc=<CCひとつめ> --cc=<CCふたつめ>
CCは指定しなくてもいいし,複数指定することもできます.
あとはレビューを待ちましょう.
レビュアーも人間ですし,QEMUのような大規模なOSSであれば大量のメールを受け取っているはずなので,気長に待ちましょう.
1週間から2週間待っても返信が来ない場合,確認を促すpingメールを送りましょう.
pingを送るタイミングについてもOSSごとに明記されていたりするので,調べておきましょう.