ウィキのコピーミラー

これは pascal.chat のウィキのミラーです。編集、履歴、ログインはそちらで行います。

Creating A Patch/ja

Deutsch · English · Español · Français · Português · Slovenčina · Русский · 日本語

FPC や Lazarus を改良したコードを提出する場合は、開発者がマージしやすいようにパッチで提出するようにしてください。

例外事項:

  1. 翻訳用の .po ファイルはパッチではなくファイルをそのまま提出してください
  2. 新規に作られたファイルは、ファイルをそのまま提出して、設置場所を明記してください

必要なもの

Lazarus の main/開発版。SVN か Git いずれかを使って入手できます。

text
 svn checkout --depth files https://github.com/fpc/Lazarus/branches all
 cd all
 svn update --set-depth infinity main

プラットフォームで異なるところ

コマンドプロンプトを開いてリポジトリのあるディレクトリに移動 (cd) する部分が若干異なります。詳しくは以下に示します。

Windows

チェックアウトした Lazarus が C:\lazarus にある場合:

  1. コマンドプロンプトを開きます(例:「ファイル名を指定して実行」で cmd.exe と入力)
  2. dos
    c:
  3. dos
    cd \lazarus

Note: TortoiseSVN をお使いでしたら、Windows エクスプローラ上の Lazarus をチェックアウトしたフォルダを選択し、右クリックから TortoiseSVN → パッチを作成 からでも行えます。

問題がある場合は、TortoiseSvn#Troubleshooting もご覧になってください。

Unix 系

チェックアウトした Lazarus が ~/lazarus にある場合:

  1. 端末を開きます
  2. bash
    cd ~/lazarus

SVN を使ってパッチを作成する

bash
svn diff > mypatch.diff

こうして作られたパッチには、SVN リポジトリのすべての変更が含まれます。

個別にパッチを作りたい場合は、関係のないものが含まれないように以下のように行います。

bash
svn diff ide/main.pp ideintf/objectinspector.pp > mypatch.diff

Git を使ってパッチを作成する

開発はローカルブランチで行います。開発しているブランチ内で動作が確認できたら、以下のコマンドでローカルコミットのパッチをすべて作成します。

bash
git format-patch master

"0001-CommitMsg.patch"、"0002-CommitMsg.patch" といった名前のファイルの組が作られます。

1 つのパッチにすべての変更をまとめたいのであれば、"git rebase -i ..." を使ってコミットをまとめるか、以下のコマンドを使います。

bash
git format-patch master --stdout > mypatch.patch

パッチの提出

パッチを提出する前に、それで問題ないか入念な確認をお願いいたします。

bug tracker を通してパッチを提出するのがお勧めの方法です。詳しくは、[[How do I create a bug report/ja|不具合報告のやり方をご]]覧になってください。bug tracker に報告されている課題を修正するパッチであればその課題項目へ、そうでない場合は bug tracker 上に新しく課題項目を作成しそこへパッチを提出します。課題項目に対してアップロードできたら提出完了です。

フォークされている Git リポジトリの直接使用

Lazarus の開発においても Git を使って配布するというやり方もありでしょう。最近では JuhaManninen 氏と Alexander Klenin ("Ask") 氏が Git リポジトリへのコードの受け入れを進んで行っています。

実際、彼らのリポジトリは GitHub 内において Lazarus のミラーからフォークされています。当然ながら受け入れられたコードは、独立したブランチ内の存在であり、"upstream" ブランチより rebase された状態にあります。これらのコードはまだテストされてはおらず、誰かによってこれらのリポジトリをフォークされたりそこからコードを作成されたりすると、やるべきテストなどがどっと増やされてしまうかもしれません。

このような限られた場というのは、Git を使って専門の開発をする人達のためのものでしょう。そこでのコードを多くの人に利用してもらいたいのであれば、Git を使って適宜パッチを作り、bug tracker へ提出するべきでしょう。

パッチの適用

ここでは、他のだれかが作ったパッチをお使いになられているローカルリポジトリに適用する方法について説明します。以下のように --dry-run スイッチを使うことでパッチの影響テストが行えます。

bash
patch --dry-run < somepatch.diff

このパッチテストの出力結果は実際に行われるパッチと同じものですが、ソースファイルを変更することはありません。かなり厳格なテストなので、お使いになられている環境のソースファイルが思いがけず乱されるということはまずないでしょう。

"svn diff" で作られたパッチ

テストで問題なかったら、以下のコマンドを使ってパッチを適用します。

bash
patch < somepatch.diff

これでうまくいかないのは、お使いになられている環境がパッチが作られた環境と異なっているからです。その場合は、以下のようにしてパス情報をすべて引き出すように指定してください。

bash
patch -p0 < somepatch.diff

Windows 用の GUI バージョン管理ツールでもこれらのパッチは適用できます。

"git format-patch" で作られたパッチ

Git

Git にパッチを適用するには以下のようにします。

bash
git apply 0001-gitpatch.patch

patch コマンド

patch コマンドは -p1 スイッチで git 書式にも対応しています。Linux 版の patch v.2.6.1 で動作確認しました。古いバージョンはおそらく対応していないでしょう。

bash
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 の方がいいでしょう。

dos
"C:\Program Files (x86)\Git\bin\patch.exe" -p0 < mypatch.diff

SVN 1.7 以降でしたら SVN の patch コマンドも利用できます。

関連項目


From the Free Pascal wiki, page "Creating A Patch/ja", as it stood on 2022-01-13 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, message the admin.

第2版、最終更新:WikiArchive 。