Sign in Join
Wiki copytemporary

Creating A Patch/ja: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11FPC や Lazarus を改良したコードを提出する場合は、開発者がマージしやすいようにパッチで提出するようにしてください。
22
33例外事項:
44
551. 翻訳用の .po ファイルはパッチではなくファイルをそのまま提出してください
662. 新規に作られたファイルは、ファイルをそのまま提出して、設置場所を明記してください
77
88## 必要なもの
99
1010Lazarus の main/開発版。SVN か Git いずれかを使って入手できます。
1111
1212- Git:https://gitlab.com/freepascal.org/lazarus/lazarus。
1313- SVN:
1414
15-` svn checkout --depth files `[`https://github.com/fpc/Lazarus/branches`](https://github.com/fpc/Lazarus/branches)` all`\
16-` cd all`\
17-` svn update --set-depth infinity main`
15+```text
16+ svn checkout --depth files https://github.com/fpc/Lazarus/branches all
17+ cd all
18+ svn update --set-depth infinity main
19+```
1820
1921## プラットフォームで異なるところ
2022
2123コマンドプロンプトを開いてリポジトリのあるディレクトリに移動 (cd) する部分が若干異なります。詳しくは以下に示します。
2224
2325### Windows
2426
2527チェックアウトした Lazarus が C:\lazarus にある場合:
2628
27291. コマンドプロンプトを開きます(例:「ファイル名を指定して実行」で **cmd.exe** と入力)
2830
29312. ```dos
3032 c:
3133 ```
3234
33353. ```dos
3436 cd \lazarus
3537 ```
3638
3739> **Note:** [TortoiseSVN](http://tortoisesvn.tigris.org/) をお使いでしたら、Windows エクスプローラ上の Lazarus をチェックアウトしたフォルダを選択し、右クリックから TortoiseSVN → パッチを作成 からでも行えます。
3840
3941問題がある場合は、[[TortoiseSvn|TortoiseSvn#Troubleshooting]] もご覧になってください。
4042
4143### Unix 系
4244
4345チェックアウトした Lazarus が ~/lazarus にある場合:
4446
45471. 端末を開きます
4648
47492. ``` bash
4850 cd ~/lazarus
4951 ```
5052
5153## SVN を使ってパッチを作成する
5254
5355``` bash
5456svn diff > mypatch.diff
5557```
5658
5759こうして作られたパッチには、SVN リポジトリのすべての変更が含まれます。
5860
5961個別にパッチを作りたい場合は、関係のないものが含まれないように以下のように行います。
6062
6163``` bash
6264svn diff ide/main.pp ideintf/objectinspector.pp > mypatch.diff
6365```
6466
6567## Git を使ってパッチを作成する
6668
6769開発はローカルブランチで行います。開発しているブランチ内で動作が確認できたら、以下のコマンドでローカルコミットのパッチをすべて作成します。
6870
6971``` bash
7072git format-patch master
7173```
7274
7375"0001-CommitMsg.patch"、"0002-CommitMsg.patch" といった名前のファイルの組が作られます。
7476
75771 つのパッチにすべての変更をまとめたいのであれば、"git rebase -i ..." を使ってコミットをまとめるか、以下のコマンドを使います。
7678
7779``` bash
7880git format-patch master --stdout > mypatch.patch
7981```
8082
8183## パッチの提出
8284
8385パッチを提出する前に、それで問題ないか入念な確認をお願いいたします。
8486
8587[bug tracker](http://bugs.freepascal.org) を通してパッチを提出するのがお勧めの方法です。詳しくは、[[How do I create a bug report/ja|不具合報告のやり方をご]]覧になってください。bug tracker に報告されている課題を修正するパッチであればその課題項目へ、そうでない場合は bug tracker 上に新しく課題項目を作成しそこへパッチを提出します。課題項目に対してアップロードできたら提出完了です。
8688
8789## フォークされている Git リポジトリの直接使用
8890
8991Lazarus の開発においても Git を使って配布するというやり方もありでしょう。最近では JuhaManninen 氏と Alexander Klenin ("Ask") 氏が Git リポジトリへのコードの受け入れを進んで行っています。
9092
9193実際、彼らのリポジトリは GitHub 内において Lazarus のミラーからフォークされています。当然ながら受け入れられたコードは、独立したブランチ内の存在であり、"upstream" ブランチより rebase された状態にあります。これらのコードはまだテストされてはおらず、誰かによってこれらのリポジトリをフォークされたりそこからコードを作成されたりすると、やるべきテストなどがどっと増やされてしまうかもしれません。
9294
9395このような限られた場というのは、Git を使って専門の開発をする人達のためのものでしょう。そこでのコードを多くの人に利用してもらいたいのであれば、Git を使って適宜パッチを作り、bug tracker へ提出するべきでしょう。
9496
9597## パッチの適用
9698
9799ここでは、他のだれかが作ったパッチをお使いになられているローカルリポジトリに適用する方法について説明します。以下のように --dry-run スイッチを使うことでパッチの影響テストが行えます。
98100
99101``` bash
100102patch --dry-run < somepatch.diff
101103```
102104
103105このパッチテストの出力結果は実際に行われるパッチと同じものですが、ソースファイルを変更することはありません。かなり厳格なテストなので、お使いになられている環境のソースファイルが思いがけず乱されるということはまずないでしょう。
104106
105107### "svn diff" で作られたパッチ
106108
107109テストで問題なかったら、以下のコマンドを使ってパッチを適用します。
108110
109111``` bash
110112patch < somepatch.diff
111113```
112114
113115これでうまくいかないのは、お使いになられている環境がパッチが作られた環境と異なっているからです。その場合は、以下のようにしてパス情報をすべて引き出すように指定してください。
114116
115117``` bash
116118patch -p0 < somepatch.diff
117119```
118120
119121Windows 用の GUI バージョン管理ツールでもこれらのパッチは適用できます。
120122
121123### "git format-patch" で作られたパッチ
122124
123125#### Git
124126
125127Git にパッチを適用するには以下のようにします。
126128
127129``` bash
128130git apply 0001-gitpatch.patch
129131```
130132
131133#### patch コマンド
132134
133135patch コマンドは -p1 スイッチで git 書式にも対応しています。Linux 版の patch v.2.6.1 で動作確認しました。古いバージョンはおそらく対応していないでしょう。
134136
135137``` bash
136138patch -p1 < 0001-gitpatch.patch
137139```
138140
139141patch コマンドは Windows でも利用できます。また、GUI ツールにも同じ機能があります。
140142
141143#### TortoiseMerge
142144
143145TortoiseMerge は Git 書式のパッチも問題なく使用できます。Tortoise SVN をインストールすると TortoiseMerge もインストールされますが、エクスプローラの右クリックメニューには表示されません。スタートメニューから起動してください。(訳注:ずばりの名称は右クリックメニューには出ませんが、パッチを適用 とかで開かれるものが TortoiseMerge です。)
144146
145147ToDo:Git 書式のパッチをサポートする GUI ツールが他にもあるようでしたらここに追加してください
146148
147149### トラブルシューティング
148150
149151パッチを適用する段階になって Unix/Linux の改行コード (LF) と Windows の改行コード (CR+LF) が異なってうまくいかないことがあります。Windows 環境では patch.exe の改行コード処理がいい加減なので、パッチ適用前にファイルを変換する必要があるでしょう。
150152
151153Windows 版の FPC/Lazarus に付属している patch.exe はかなり使いづらいです。Git に付属している patch.exe の方がいいでしょう。
152154
153155```dos
154156"C:\Program Files (x86)\Git\bin\patch.exe" -p0 < mypatch.diff
155157```
156158
157159SVN 1.7 以降でしたら SVN の patch コマンドも利用できます。
158160
159161## 関連項目
160162
161163- [[How do I create a bug report/ja|不具合報告のやり方]] - 不具合報告の一般的な情報
162164- [[Tips on writing bug reports|不具合報告を書く上でのヒント]] - 不具合を報告するさいのトラブルやそうならないための対策
163165- [[Database bug reporting|データベース関連の不具合報告]] - データベース関連の不具合報告用の簡単なプログラムと関連する情報
164166
165167---
166168*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](/wiki-contact).*
167169Category: Debugging/ja
168170Category: FPC/ja
169171Category: Lazarus/ja

Back to history