Difference between revisions of "Creating A Patch/ja"

From Free Pascal wiki
(トラブルの解消)
 
(8 intermediate revisions by 4 users not shown)
Line 3: Line 3:
 
{{Japanese Menu}}
 
{{Japanese Menu}}
  
==導入==
+
FPC や Lazarus を改良したコードを提出する場合は、開発者がマージしやすいようにパッチで提出するようにしてください。
ここでは、LazarusをSVNから入手しているものと仮定します。[[Getting Lazarus#Via SVN| Getting Lazarus Via SVN]]
 
  
コマンドを開くか、cmdプロンプトなどで、Lazarusのソースのあるディレクトリに移動してください。
+
例外事項:
 +
# 翻訳用の .po ファイルはパッチではなくファイルをそのまま提出してください
 +
# 新規に作られたファイルは、ファイルをそのまま提出して、設置場所を明記してください
  
'''Windowsでの導入:'''
+
__TOC__
 +
==必要なもの==
  
あなたがLazarusを C:\lazarus でSVNチェックアウトしたと仮定します。
+
Lazarus の trunk/開発版。SVN か Git いずれかを使って入手できます。
 +
* SVN:[[Getting Lazarus/ja#Lazarus SVN 開発版の取得|Lazarus SVN 開発版]] - これが大元のリポジトリです。
 +
* Git:[[git mirrors|Git ミラー]]、[[Lazarus git-svn|Lazarus Git-svn]] - GitHub に Lazarus のミラーがあります。Git は git-svn 連携を使って直接 SVN サーバを利用することもできます。
  
# MS-DOSプロンプトを開いてください。
+
==プラットフォームで異なるところ==
# c: {enterを押す}
+
コマンドプロンプトを開いてリポジトリのあるディレクトリに移動 (cd) する部分が若干異なります。詳しくは以下に示します。
# cd \lazarus {enterを押す}
 
# svn diff > mypatch.dif {enterを押す}
 
  
'''Linux/BSD、その他での導入:'''
+
===Windows===
 +
チェックアウトした Lazarus が C:\lazarus にある場合:
  
あなたがLazarusを $HOME/lazarus でSVNチェックアウトしたと仮定します。
+
# コマンドプロンプトを開きます(例:「ファイル名を指定して実行」で '''cmd.exe''' と入力)
 +
# <syntaxhighlight lang="dos">c:</syntaxhighlight>
 +
# <syntaxhighlight lang="dos">cd \lazarus</syntaxhighlight>
  
# 好きなターミナルプログラムを開いて下さい。
+
{{Note|[http://tortoisesvn.tigris.org/ TortoiseSVN] をお使いでしたら、Windows エクスプローラ上の Lazarus をチェックアウトしたフォルダを選択し、右クリックから TortoiseSVN → パッチを作成 からでも行えます。}}
# cd $HOME {enterを押す}
 
# cd lazarus {enterを押す}
 
# svn diff > mypatch.diff {enterを押す}
 
  
 +
問題がある場合は、[[TortoiseSvn#Troubleshooting]] もご覧になってください。
  
''注:私はなにかそこにありそうもないものがないかどうか、ファイルを見わたすのも好きです。''
+
===Unix 系===
 +
チェックアウトした Lazarus が ~/lazarus にある場合:
  
パッチを適用するのにおすすめの方法は、[http://www.lazarus.freepascal.org/mantis/ bug tracker]による方法です。もし、あなたのパッチを修正したという報告があれば、それを使います。そうでない場合に、新しい問題点の項目を作成します。ファイルをアップロードして、問題点をそれに添付します。
+
# 端末を開きます
 +
# <syntaxhighlight lang="bash">cd ~/lazarus</syntaxhighlight>
  
別の方法として、あなたの作ったパッチをzipやgzipで圧縮して、Lazarusメーリングリストにemailすることです。(最大40kBです。)もしくは、パッチ専用メール[mailto:patch@lazarus.dommelstein.net patch@lazarus.dommelstein.net]へ送って下さい。
+
==SVN を使ってパッチを作成する==
 +
<syntaxhighlight lang="bash">svn diff > mypatch.diff</syntaxhighlight>
 +
こうして作られたパッチには、SVN リポジトリのすべての変更が含まれます。
  
これで全てです。
+
個別にパッチを作りたい場合は、関係のないものが含まれないように以下のように行います。
 +
<syntaxhighlight lang="bash">svn diff ide/main.pp ideintf/objectinspector.pp > mypatch.diff</syntaxhighlight>
  
== トラブルの解消 ==
+
==Git を使ってパッチを作成する==
ほとんどの場合はWindowsだけでなく、他のプラットホームにも当てはまります。
+
開発はローカルブランチで行います。開発しているブランチ内で動作が確認できたら、以下のコマンドでローカルコミットのパッチをすべて作成します。
 +
<syntaxhighlight lang="bash">git format-patch master</syntaxhighlight>
 +
"0001-CommitMsg.patch"、"0002-CommitMsg.patch" といった名前のファイルの組が作られます。
  
'''"svn command not found"(あるいは、似たような)エラーがでたとき'''
+
1 つのパッチにすべての変更をまとめたいのであれば、"git rebase -i ..." を使ってコミットをまとめるか、以下のコマンドを使います。
 +
<syntaxhighlight lang="bash">git format-patch master --stdout > mypatch.patch</syntaxhighlight>
  
ほとんどの場合、svn.exeが環境変数のPATHにないからでしょう。次のステップでこの問題を解決できます。
+
{{Note| git-svn 連携を使用している場合、デフォルトでは "master" ブランチが SVN の trunk を追従するようになっています。ですが、GitHub のミラーリポジトリではそうではなく "upstream" ブランチが使われています。その場合は、上述のコマンドは "master" を "upstream" に置き換えてください。}}
  
# スタートメニューのFind Files機能をつかってsvn.exeをおきます。
+
==パッチの提出==
# svn.exeを一旦置いたら、PATHにそのディレクトリを必ず追加します。
+
パッチを提出する前に、それで問題ないか入念な確認をお願いいたします。
たとえば: コマンドプロンプトから次のように打ってください:
 
  set PATH=%PATH%;"C:\Program Files\TortoiseSVN\"
 
  
''注意: あなたの環境でのsvn.exeがはいっているディレクトリは、この文書とは違うかもしれません。これはあくまでもサンプルです。''
+
[http://bugs.freepascal.org 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 された状態にあります。これらのコードはまだテストされてはおらず、誰かによってこれらのリポジトリをフォークされたりそこからコードを作成されたりすると、やるべきテストなどがどっと増やされてしまうかもしれません。
  
Windows98以前のWindowsOSでは,上に書いたようなことを、C:\autoexec.batの終わりのほうに書きます。
+
このような限られた場というのは、Git を使って専門の開発をする人達のためのものでしょう。そこでのコードを多くの人に利用してもらいたいのであれば、Git を使って適宜パッチを作り、bug tracker へ提出するべきでしょう。
  
Windows2000 以降では、ディレクトリをパスに加えるには、:
+
==パッチの適用==
 +
ここでは、他のだれかが作ったパッチをお使いになられているローカルリポジトリに適用する方法について説明します。以下のように --dry-run スイッチを使うことでパッチの影響テストが行えます。
 +
<syntaxhighlight lang="bash">patch --dry-run < somepatch.diff</syntaxhighlight>
 +
このパッチテストの出力結果は実際に行われるパッチと同じものですが、ソースファイルを変更することはありません。かなり厳格なテストなので、お使いになられている環境のソースファイルが思いがけず乱されるということはまずないでしょう。
  
# "マイコンピュータ"を右クリックします。
+
==="svn diff" で作られたパッチ===
# "プロパティ"を選択します。
+
テストで問題なかったら、以下のコマンドを使ってパッチを適用します。
# "詳細設定" タブを選択します。
+
<syntaxhighlight lang="bash">patch < somepatch.diff</syntaxhighlight>
# "環境変数" ボタンを押します。
+
これでうまくいかないのは、お使いになられている環境がパッチが作られた環境と異なっているからです。その場合は、以下のようにしてパス情報をすべて引き出すように指定してください。
# "システム変数"の"パス"の最後に、"C:\Program Files\TortoiseSVN\" を加えます。
+
<syntaxhighlight lang="bash">patch -p0 < somepatch.diff</syntaxhighlight>
  
''注意: あなたの環境でのsvn.exeがはいっているディレクトリは、この文書とは違うかもしれません。これはあくまでもサンプルです。''
+
Windows 用の GUI バージョン管理ツールでもこれらのパッチは適用できます。
  
==パッチを適用する==
+
==="git format-patch" で作られたパッチ===
To apply a patch is simple. You can test the patch by using the --dry-run toggle switch like this:
+
====Git====
 +
Git にパッチを適用するには以下のようにします。
 +
<syntaxhighlight lang="bash">git apply 0001-gitpatch.patch</syntaxhighlight>
  
 +
====patch コマンド====
 +
patch コマンドは -p1 スイッチで git 書式にも対応しています。Linux 版の patch v.2.6.1 で動作確認しました。古いバージョンはおそらく対応していないでしょう。
  
  patch --dry-run < mypatch.diff
+
<syntaxhighlight lang="bash">patch -p1 < 0001-gitpatch.patch</syntaxhighlight>
  
 +
patch コマンドは Windows でも利用できます。また、GUI ツールにも同じ機能があります。
  
The output of the patch program will be identical to the actual patching, only it does not alter the sourcecode files. Very handy for testing, without wanting to screw up your source.
+
====TortoiseMerge====
 +
TortoiseMerge は Git 書式のパッチも問題なく使用できます。Tortoise SVN をインストールすると TortoiseMerge もインストールされますが、エクスプローラの右クリックメニューには表示されません。スタートメニューから起動してください。(訳注:ずばりの名称は右クリックメニューには出ませんが、パッチを適用 とかで開かれるものが TortoiseMerge です。)
  
To do the final patching, you use the following commandline:
+
ToDo:Git 書式のパッチをサポートする GUI ツールが他にもあるようでしたらここに追加してください
  
 +
===トラブルシューティング===
 +
パッチを適用する段階になって Unix/Linux の改行コード (LF) と Windows の改行コード (CR+LF) が異なってうまくいかないことがあります。Windows 環境では patch.exe の改行コード処理がいい加減なので、パッチ適用前にファイルを変換する必要があるでしょう。
  
  patch < mypatch.diff
+
Windows 版の FPC/Lazarus に付属している patch.exe はかなり使いづらいです。Git に付属している patch.exe の方がいいでしょう。
 +
<syntaxhighlight lang="dos">"C:\Program Files (x86)\Git\bin\patch.exe" -p0 < mypatch.diff</syntaxhighlight>
 +
SVN 1.7 以降でしたら SVN の patch コマンドも利用できます。
  
Or, to fix separators:
+
==関連項目==
 +
* [[How do I create a bug report/ja|不具合報告のやり方]] - 不具合報告の一般的な情報
 +
* [[Tips on writing bug reports|不具合報告を書く上でのヒント]] - 不具合を報告するさいのトラブルやそうならないための対策
 +
* [[Database bug reporting|データベース関連の不具合報告]] - データベース関連の不具合報告用の簡単なプログラムと関連する情報
  
  patch -p0 < mypatch.diff
+
[[Category:Debugging/ja]]
 +
[[Category:Lazarus/ja]]
 +
[[Category:FPC/ja]]

Latest revision as of 15:48, 26 December 2013

Deutsch (de) English (en) español (es) français (fr) 日本語 (ja) português (pt) русский (ru) slovenčina (sk)

日本語版メニュー
メインページ - Lazarus Documentation日本語版 - 翻訳ノート - 日本語障害情報

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

例外事項:

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

必要なもの

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

  • SVN:Lazarus SVN 開発版 - これが大元のリポジトリです。
  • Git:Git ミラーLazarus Git-svn - GitHub に Lazarus のミラーがあります。Git は git-svn 連携を使って直接 SVN サーバを利用することもできます。

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

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

Windows

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

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

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

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

Unix 系

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

  1. 端末を開きます
  2. 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
Note-icon.png

Note: git-svn 連携を使用している場合、デフォルトでは "master" ブランチが SVN の trunk を追従するようになっています。ですが、GitHub のミラーリポジトリではそうではなく "upstream" ブランチが使われています。その場合は、上述のコマンドは "master" を "upstream" に置き換えてください。

パッチの提出

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

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 コマンドも利用できます。

関連項目