Creating A Patch/ja: what changed
Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.
| Old | New | Line | |
|---|---|---|---|
| 1 | 1 | FPC や Lazarus を改良したコードを提出する場合は、開発者がマージしやすいようにパッチで提出するようにしてください。 | |
| 2 | 2 | ||
| 3 | 3 | 例外事項: | |
| 4 | 4 | ||
| 5 | 5 | 1. 翻訳用の .po ファイルはパッチではなくファイルをそのまま提出してください | |
| 6 | 6 | 2. 新規に作られたファイルは、ファイルをそのまま提出して、設置場所を明記してください | |
| 7 | 7 | ||
| 8 | 8 | ## 必要なもの | |
| 9 | 9 | ||
| 10 | 10 | Lazarus の main/開発版。SVN か Git いずれかを使って入手できます。 | |
| 11 | 11 | ||
| 12 | 12 | - Git:https://gitlab.com/freepascal.org/lazarus/lazarus。 | |
| 13 | 13 | - SVN: | |
| 14 | 14 | ||
| 15 | - | ||
| 16 | - | ||
| 17 | - | ||
| 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 | + | ``` | |
| 18 | 20 | ||
| 19 | 21 | ## プラットフォームで異なるところ | |
| 20 | 22 | ||
| 21 | 23 | コマンドプロンプトを開いてリポジトリのあるディレクトリに移動 (cd) する部分が若干異なります。詳しくは以下に示します。 | |
| 22 | 24 | ||
| 23 | 25 | ### Windows | |
| 24 | 26 | ||
| 25 | 27 | チェックアウトした Lazarus が C:\lazarus にある場合: | |
| 26 | 28 | ||
| 27 | 29 | 1. コマンドプロンプトを開きます(例:「ファイル名を指定して実行」で **cmd.exe** と入力) | |
| 28 | 30 | ||
| 29 | 31 | 2. ```dos | |
| 30 | 32 | c: | |
| 31 | 33 | ``` | |
| 32 | 34 | ||
| 33 | 35 | 3. ```dos | |
| 34 | 36 | cd \lazarus | |
| 35 | 37 | ``` | |
| 36 | 38 | ||
| 37 | 39 | > **Note:** [TortoiseSVN](http://tortoisesvn.tigris.org/) をお使いでしたら、Windows エクスプローラ上の Lazarus をチェックアウトしたフォルダを選択し、右クリックから TortoiseSVN → パッチを作成 からでも行えます。 | |
| 38 | 40 | ||
| 39 | 41 | 問題がある場合は、[[TortoiseSvn|TortoiseSvn#Troubleshooting]] もご覧になってください。 | |
| 40 | 42 | ||
| 41 | 43 | ### Unix 系 | |
| 42 | 44 | ||
| 43 | 45 | チェックアウトした Lazarus が ~/lazarus にある場合: | |
| 44 | 46 | ||
| 45 | 47 | 1. 端末を開きます | |
| 46 | 48 | ||
| 47 | 49 | 2. ``` bash | |
| 48 | 50 | cd ~/lazarus | |
| 49 | 51 | ``` | |
| 50 | 52 | ||
| 51 | 53 | ## SVN を使ってパッチを作成する | |
| 52 | 54 | ||
| 53 | 55 | ``` bash | |
| 54 | 56 | svn diff > mypatch.diff | |
| 55 | 57 | ``` | |
| 56 | 58 | ||
| 57 | 59 | こうして作られたパッチには、SVN リポジトリのすべての変更が含まれます。 | |
| 58 | 60 | ||
| 59 | 61 | 個別にパッチを作りたい場合は、関係のないものが含まれないように以下のように行います。 | |
| 60 | 62 | ||
| 61 | 63 | ``` bash | |
| 62 | 64 | svn diff ide/main.pp ideintf/objectinspector.pp > mypatch.diff | |
| 63 | 65 | ``` | |
| 64 | 66 | ||
| 65 | 67 | ## Git を使ってパッチを作成する | |
| 66 | 68 | ||
| 67 | 69 | 開発はローカルブランチで行います。開発しているブランチ内で動作が確認できたら、以下のコマンドでローカルコミットのパッチをすべて作成します。 | |
| 68 | 70 | ||
| 69 | 71 | ``` bash | |
| 70 | 72 | git format-patch master | |
| 71 | 73 | ``` | |
| 72 | 74 | ||
| 73 | 75 | "0001-CommitMsg.patch"、"0002-CommitMsg.patch" といった名前のファイルの組が作られます。 | |
| 74 | 76 | ||
| 75 | 77 | 1 つのパッチにすべての変更をまとめたいのであれば、"git rebase -i ..." を使ってコミットをまとめるか、以下のコマンドを使います。 | |
| 76 | 78 | ||
| 77 | 79 | ``` bash | |
| 78 | 80 | git format-patch master --stdout > mypatch.patch | |
| 79 | 81 | ``` | |
| 80 | 82 | ||
| 81 | 83 | ## パッチの提出 | |
| 82 | 84 | ||
| 83 | 85 | パッチを提出する前に、それで問題ないか入念な確認をお願いいたします。 | |
| 84 | 86 | ||
| 85 | 87 | [bug tracker](http://bugs.freepascal.org) を通してパッチを提出するのがお勧めの方法です。詳しくは、[[How do I create a bug report/ja|不具合報告のやり方をご]]覧になってください。bug tracker に報告されている課題を修正するパッチであればその課題項目へ、そうでない場合は bug tracker 上に新しく課題項目を作成しそこへパッチを提出します。課題項目に対してアップロードできたら提出完了です。 | |
| 86 | 88 | ||
| 87 | 89 | ## フォークされている Git リポジトリの直接使用 | |
| 88 | 90 | ||
| 89 | 91 | Lazarus の開発においても Git を使って配布するというやり方もありでしょう。最近では JuhaManninen 氏と Alexander Klenin ("Ask") 氏が Git リポジトリへのコードの受け入れを進んで行っています。 | |
| 90 | 92 | ||
| 91 | 93 | 実際、彼らのリポジトリは GitHub 内において Lazarus のミラーからフォークされています。当然ながら受け入れられたコードは、独立したブランチ内の存在であり、"upstream" ブランチより rebase された状態にあります。これらのコードはまだテストされてはおらず、誰かによってこれらのリポジトリをフォークされたりそこからコードを作成されたりすると、やるべきテストなどがどっと増やされてしまうかもしれません。 | |
| 92 | 94 | ||
| 93 | 95 | このような限られた場というのは、Git を使って専門の開発をする人達のためのものでしょう。そこでのコードを多くの人に利用してもらいたいのであれば、Git を使って適宜パッチを作り、bug tracker へ提出するべきでしょう。 | |
| 94 | 96 | ||
| 95 | 97 | ## パッチの適用 | |
| 96 | 98 | ||
| 97 | 99 | ここでは、他のだれかが作ったパッチをお使いになられているローカルリポジトリに適用する方法について説明します。以下のように --dry-run スイッチを使うことでパッチの影響テストが行えます。 | |
| 98 | 100 | ||
| 99 | 101 | ``` bash | |
| 100 | 102 | patch --dry-run < somepatch.diff | |
| 101 | 103 | ``` | |
| 102 | 104 | ||
| 103 | 105 | このパッチテストの出力結果は実際に行われるパッチと同じものですが、ソースファイルを変更することはありません。かなり厳格なテストなので、お使いになられている環境のソースファイルが思いがけず乱されるということはまずないでしょう。 | |
| 104 | 106 | ||
| 105 | 107 | ### "svn diff" で作られたパッチ | |
| 106 | 108 | ||
| 107 | 109 | テストで問題なかったら、以下のコマンドを使ってパッチを適用します。 | |
| 108 | 110 | ||
| 109 | 111 | ``` bash | |
| 110 | 112 | patch < somepatch.diff | |
| 111 | 113 | ``` | |
| 112 | 114 | ||
| 113 | 115 | これでうまくいかないのは、お使いになられている環境がパッチが作られた環境と異なっているからです。その場合は、以下のようにしてパス情報をすべて引き出すように指定してください。 | |
| 114 | 116 | ||
| 115 | 117 | ``` bash | |
| 116 | 118 | patch -p0 < somepatch.diff | |
| 117 | 119 | ``` | |
| 118 | 120 | ||
| 119 | 121 | Windows 用の GUI バージョン管理ツールでもこれらのパッチは適用できます。 | |
| 120 | 122 | ||
| 121 | 123 | ### "git format-patch" で作られたパッチ | |
| 122 | 124 | ||
| 123 | 125 | #### Git | |
| 124 | 126 | ||
| 125 | 127 | Git にパッチを適用するには以下のようにします。 | |
| 126 | 128 | ||
| 127 | 129 | ``` bash | |
| 128 | 130 | git apply 0001-gitpatch.patch | |
| 129 | 131 | ``` | |
| 130 | 132 | ||
| 131 | 133 | #### patch コマンド | |
| 132 | 134 | ||
| 133 | 135 | patch コマンドは -p1 スイッチで git 書式にも対応しています。Linux 版の patch v.2.6.1 で動作確認しました。古いバージョンはおそらく対応していないでしょう。 | |
| 134 | 136 | ||
| 135 | 137 | ``` bash | |
| 136 | 138 | patch -p1 < 0001-gitpatch.patch | |
| 137 | 139 | ``` | |
| 138 | 140 | ||
| 139 | 141 | patch コマンドは Windows でも利用できます。また、GUI ツールにも同じ機能があります。 | |
| 140 | 142 | ||
| 141 | 143 | #### TortoiseMerge | |
| 142 | 144 | ||
| 143 | 145 | TortoiseMerge は Git 書式のパッチも問題なく使用できます。Tortoise SVN をインストールすると TortoiseMerge もインストールされますが、エクスプローラの右クリックメニューには表示されません。スタートメニューから起動してください。(訳注:ずばりの名称は右クリックメニューには出ませんが、パッチを適用 とかで開かれるものが TortoiseMerge です。) | |
| 144 | 146 | ||
| 145 | 147 | ToDo:Git 書式のパッチをサポートする GUI ツールが他にもあるようでしたらここに追加してください | |
| 146 | 148 | ||
| 147 | 149 | ### トラブルシューティング | |
| 148 | 150 | ||
| 149 | 151 | パッチを適用する段階になって Unix/Linux の改行コード (LF) と Windows の改行コード (CR+LF) が異なってうまくいかないことがあります。Windows 環境では patch.exe の改行コード処理がいい加減なので、パッチ適用前にファイルを変換する必要があるでしょう。 | |
| 150 | 152 | ||
| 151 | 153 | Windows 版の FPC/Lazarus に付属している patch.exe はかなり使いづらいです。Git に付属している patch.exe の方がいいでしょう。 | |
| 152 | 154 | ||
| 153 | 155 | ```dos | |
| 154 | 156 | "C:\Program Files (x86)\Git\bin\patch.exe" -p0 < mypatch.diff | |
| 155 | 157 | ``` | |
| 156 | 158 | ||
| 157 | 159 | SVN 1.7 以降でしたら SVN の patch コマンドも利用できます。 | |
| 158 | 160 | ||
| 159 | 161 | ## 関連項目 | |
| 160 | 162 | ||
| 161 | 163 | - [[How do I create a bug report/ja|不具合報告のやり方]] - 不具合報告の一般的な情報 | |
| 162 | 164 | - [[Tips on writing bug reports|不具合報告を書く上でのヒント]] - 不具合を報告するさいのトラブルやそうならないための対策 | |
| 163 | 165 | - [[Database bug reporting|データベース関連の不具合報告]] - データベース関連の不具合報告用の簡単なプログラムと関連する情報 | |
| 164 | 166 | ||
| 165 | 167 | --- | |
| 166 | 168 | *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).* | |
| 167 | 169 | Category: Debugging/ja | |
| 168 | 170 | Category: FPC/ja | |
| 169 | 171 | Category: Lazarus/ja |
