GNU Emacsのバグ修正や機能改善のパッチを提供していただけるのは、大変助かります。変更内容をお送りいただく際は、メンテナーが活用しやすいよう、以下のガイドラインに従ってください。これらのガイドラインに従っていただけない場合、ご提供いただいた情報は有用である可能性はあるものの、活用するのに余計な手間がかかってしまいます。GNU Emacsのメンテナンスは、好条件下であっても非常に大変な作業であり、皆様が最大限の協力をいただかない限り、対応しきることはできません。
各パッチを適切に評価するには、いくつかの情報が必要です。詳細は以下に記載します。
これらの準備がすべて整ったら、M-x submit-emacs-patch コマンドを使用してパッチを送信してください。このコマンドを実行すると、パッチの件名とパッチファイルの入力が求められます。その後、パッチファイルを添付したメッセージモードのバッファが作成・表示され、そのバッファが表示されるとともに、パッチの詳細説明や、以下で求められるその他の情報の追加が可能になります。完了したら、C-c C-c と入力して、開発者にメールでパッチを送信してください。パッチは GNU Bug Tracker(https://debbugs.gnu.org)に送信されます。トラッカーでは、バグレポートと同様に、提出物に番号が割り当てられます。通常、開発者から返信があり、詳細や追加情報の提供を求められることがありますので、必ず有効な返信先メールアドレスを記載してください。
パッチの提出にあたり、ご提供いただきたい内容は以下の通りです。
別々の理由で2つの変更を加えた場合、両方をインストールするのは避けたいかもしれません。どちらか一方だけをインストールするか、あるいはEmacsの異なるバージョンで個別にインストールすることになるでしょう。もしこれらをすべて一つのdiffセットにまとめて送ってしまうと、どの変更箇所がどのような目的で使われているのかを突き止めるために、それらを切り分ける追加作業が必要になります。もしその時間が取れない場合、パッチの取り込みを大幅に延期せざるを得なくなるかもしれません。
変更をそれぞれ書き上げたらすぐに、個別の説明を添えて送れば、2つの変更が絡み合うことはなく、それらを解きほぐすための余計な手間をかけることなく、一つひとつを適切に検討することができます。
変更内容は個別に送信すべきですので、いっそすぐに送ってしまってもいいでしょう。そうすれば、重要な場合に即座にインストールするという選択肢が得られます。
git
pull)であることを確認してください。変更内容をプライベートブランチにコミットし、git
format-patch
masterを使用してマスター版からパッチを生成することもできます。(パッチの適用作業が容易になるため、こちらが推奨される方法です。)あるいは、変更内容をコミットせずに残し、後述のgit diffを使用することもできます。
diffを生成する際は、どちらが旧バージョンでどちらが新バージョンであるかについて、一切の曖昧さが生じないようにしてください。旧バージョンをdiffの第1引数に、新バージョンを第2引数に指定してください。また、いずれか一方のバージョンに、それが旧バージョンなのか、あるいは変更を加えた新バージョンなのかを示す名称を付けてください。
コミットログの目的は、変更の根拠や、修正後のコードがパッチで解決しようとしている問題をどのように解消しているかを説明し、何が変更されたかをどこで確認できるかを示すことにあります。そのため、どの関数をなぜ変更したのかを具体的に記述する必要があります。適切なコミットログメッセージのスタイルや要件に関する詳細は、Emacsソースツリー内のファイル CONTRIBUTE の「Commit messages」セクションを参照してください。
また、どのような情報を記載すべきかを確認し、当プロジェクトで採用しているスタイルを習得するため、最近のコミットのコミットログのエントリも参照してください。なお、他のいくつかのプロジェクトとは異なり、ドキュメント(すなわちTexinfoファイル)用にコミットログが必須となっている点にご注意ください。Change Logs、およびGNU Coding StandardsのChange Log Conceptsを参照してください。
一般的に改善になるかもしれない修正案を送ってくる人もいますが、それを確信するのは困難です。こうした変更は非常に慎重に検討する必要があるため、導入するのは容易ではありません。もちろん、その変更が正しいと判断した根拠について十分な説明があれば、納得しやすくなります。
最も安全な変更は、特定のマシンや特定のシステムでのみ使用されるファイル、あるいはファイルの一部に対する変更です。これらは、他のマシンやシステムに新たなバグを発生させることがないため、安全です。
安全にインストールできることが明確にわかる形式でパッチを設計し、作業量に対応できるようご協力をお願いします。