Creating A Patch/ja
│
Deutsch (de) │
English (en) │
español (es) │
français (fr) │
日本語 (ja) │
português (pt) │
русский (ru) │
slovenčina (sk) │
FPC や Lazarus を改良したコードを提出する場合は、開発者がマージしやすいようにパッチで提出するようにしてください。
例外事項:
- 翻訳用の .po ファイルはパッチではなくファイルをそのまま提出してください
- 新規に作られたファイルは、ファイルをそのまま提出して、設置場所を明記してください
必要なもの
Lazarus の main/開発版。SVN か Git いずれかを使って入手できます。
svn checkout --depth files https://github.com/fpc/Lazarus/branches all cd all svn update --set-depth infinity main
プラットフォームで異なるところ
コマンドプロンプトを開いてリポジトリのあるディレクトリに移動 (cd) する部分が若干異なります。詳しくは以下に示します。
Windows
チェックアウトした Lazarus が C:\lazarus にある場合:
- コマンドプロンプトを開きます(例:「ファイル名を指定して実行」で cmd.exe と入力)
c:
cd \lazarus
問題がある場合は、TortoiseSvn#Troubleshooting もご覧になってください。
Unix 系
チェックアウトした Lazarus が ~/lazarus にある場合:
- 端末を開きます
cd ~/lazarus
SVN を使ってパッチを作成する
svn diff > mypatch.diff
こうして作られたパッチには、SVN リポジトリのすべての変更が含まれます。
個別にパッチを作りたい場合は、関係のないものが含まれないように以下のように行います。
svn diff ide/main.pp ideintf/objectinspector.pp > mypatch.diff
Git を使ってパッチを作成する
開発はローカルブランチで行います。開発しているブランチ内で動作が確認できたら、以下のコマンドでローカルコミットのパッチをすべて作成します。
git format-patch master
"0001-CommitMsg.patch"、"0002-CommitMsg.patch" といった名前のファイルの組が作られます。
1 つのパッチにすべての変更をまとめたいのであれば、"git rebase -i ..." を使ってコミットをまとめるか、以下のコマンドを使います。
git format-patch master --stdout > mypatch.patch
パッチの提出
パッチを提出する前に、それで問題ないか入念な確認をお願いいたします。
bug tracker を通してパッチを提出するのがお勧めの方法です。詳しくは、不具合報告のやり方をご覧になってください。bug tracker に報告されている課題を修正するパッチであればその課題項目へ、そうでない場合は bug tracker 上に新しく課題項目を作成しそこへパッチを提出します。課題項目に対してアップロードできたら提出完了です。
フォークされている Git リポジトリの直接使用
Lazarus の開発においても Git を使って配布するというやり方もありでしょう。最近では JuhaManninen 氏と Alexander Klenin ("Ask") 氏が Git リポジトリへのコードの受け入れを進んで行っています。
実際、彼らのリポジトリは GitHub 内において Lazarus のミラーからフォークされています。当然ながら受け入れられたコードは、独立したブランチ内の存在であり、"upstream" ブランチより rebase された状態にあります。これらのコードはまだテストされてはおらず、誰かによってこれらのリポジトリをフォークされたりそこからコードを作成されたりすると、やるべきテストなどがどっと増やされてしまうかもしれません。
このような限られた場というのは、Git を使って専門の開発をする人達のためのものでしょう。そこでのコードを多くの人に利用してもらいたいのであれば、Git を使って適宜パッチを作り、bug tracker へ提出するべきでしょう。
パッチの適用
ここでは、他のだれかが作ったパッチをお使いになられているローカルリポジトリに適用する方法について説明します。以下のように --dry-run スイッチを使うことでパッチの影響テストが行えます。
patch --dry-run < somepatch.diff
このパッチテストの出力結果は実際に行われるパッチと同じものですが、ソースファイルを変更することはありません。かなり厳格なテストなので、お使いになられている環境のソースファイルが思いがけず乱されるということはまずないでしょう。
"svn diff" で作られたパッチ
テストで問題なかったら、以下のコマンドを使ってパッチを適用します。
patch < somepatch.diff
これでうまくいかないのは、お使いになられている環境がパッチが作られた環境と異なっているからです。その場合は、以下のようにしてパス情報をすべて引き出すように指定してください。
patch -p0 < somepatch.diff
Windows 用の GUI バージョン管理ツールでもこれらのパッチは適用できます。
"git format-patch" で作られたパッチ
Git
Git にパッチを適用するには以下のようにします。
git apply 0001-gitpatch.patch
patch コマンド
patch コマンドは -p1 スイッチで git 書式にも対応しています。Linux 版の patch v.2.6.1 で動作確認しました。古いバージョンはおそらく対応していないでしょう。
patch -p1 < 0001-gitpatch.patch
patch コマンドは Windows でも利用できます。また、GUI ツールにも同じ機能があります。
TortoiseMerge
TortoiseMerge は Git 書式のパッチも問題なく使用できます。Tortoise SVN をインストールすると TortoiseMerge もインストールされますが、エクスプローラの右クリックメニューには表示されません。スタートメニューから起動してください。(訳注:ずばりの名称は右クリックメニューには出ませんが、パッチを適用 とかで開かれるものが TortoiseMerge です。)
ToDo:Git 書式のパッチをサポートする GUI ツールが他にもあるようでしたらここに追加してください
トラブルシューティング
パッチを適用する段階になって Unix/Linux の改行コード (LF) と Windows の改行コード (CR+LF) が異なってうまくいかないことがあります。Windows 環境では patch.exe の改行コード処理がいい加減なので、パッチ適用前にファイルを変換する必要があるでしょう。
Windows 版の FPC/Lazarus に付属している patch.exe はかなり使いづらいです。Git に付属している patch.exe の方がいいでしょう。
"C:\Program Files (x86)\Git\bin\patch.exe" -p0 < mypatch.diff
SVN 1.7 以降でしたら SVN の patch コマンドも利用できます。
関連項目
- 不具合報告のやり方 - 不具合報告の一般的な情報
- 不具合報告を書く上でのヒント - 不具合を報告するさいのトラブルやそうならないための対策
- データベース関連の不具合報告 - データベース関連の不具合報告用の簡単なプログラムと関連する情報