[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
パッチを作成したり使用したりするときは,常識を考慮してください.例えば, プログラム管理者にバグフィックスを送るとき,すべての主張をカバーする分か りにくい一つの大きなパッチの代わりに,一つの主張ごとに独立な小さなパッチ を複数送ってください.
ソフトウエアパッケージの更新でパッチを配布しようとする場合,それ以外に覚 えておくべきことは以下のとおりです.
11.1 パッチを生成するための助言 | Advice for making patches. | |
11.2 パッチを使用するための助言 | Advice for using patches. | |
11.3 一般的な誤解を避ける | Avoiding common mistakes when using patch . | |
11.4 より小さいパッチを生成する | How to generate smaller patches. |
パッケージの古いバージョンを新しいバージョンに変更するパッチを作成するた
め,最初に古いバージョンと新しいバージョンのコピーを隣接するサブディレク
トリに作成してください.二つのバージョンをtar
アーカイブに格納
するのが一般的です.
パッチを生成するために,oldとnewをそれぞれ古いものと新しいも のがあるディレクトリにして,コマンド`diff -Naur old new'を使用してください.名前のoldとnewにスラッシュを含 めるべきではありません.`-N'オプションで,ファイルを作成したり削 除したりします.`-a'で,テキストファイル以外も更新するパッチにな ります.`-u'で,タイムスタンプと周りの文が十分にり役に立つパッチ を生成します.そして,`-r'でパッチはサブディレクトリも更新します. 以下はコマンド例で,Bourneシェルの構文を使用しています.
diff -Naur gcc-3.0.3 gcc-3.0.4 |
受けとる人にパッチの適用方法を伝えてください.これには使用する作業用ディ
レクトリと,使用するpatch
のオプションも含めるべきです.受け手
が行なうように手順をテストし,オリジナルファイルにパッチを適用してくださ
い.
パッチを生成するときの一般的な誤解を避ける方法は,See section 11.3 一般的な誤解を避ける.
パッチの作成者は,受け手にパッチの適用方法を伝えているはずなので,パッチ の使用者の第一の規則は,パッチで提供される説明に従うことです.
GNU diff
では,任意の長い行を持つファイルと不完全な行で終
るファイルを解析することが可能です.しかし,patch
の古いバージョ
ンでは,そのようなファイルにパッチを当てることは不可能です.そのようなパッ
チの適用時に問題がある場合,最近のバージョンのGNU patch
に
更新してみてください.
複数のファイルのパッチを生成しているとき,diff
はスラッシュの無
いディレクトリ名に適用します.こうすることで,パッチの利用者が
`-pnumber'を指定しているとき混乱が少なくなり,それは,この
オプションで古いものと新しいもののファイル名でスラッシュの数が異なる場合,
びっくりするような結果になるためです.例えば,以下のようなヘッダを持つパッ
チを送らないでください.
diff -Naur v2.0.29/prog/README prog/README --- v2.0.29/prog/README 2002-03-10 23:30:39.942229878 -0800 +++ prog/README 2002-03-17 20:49:32.442260588 -0800 |
その理由は,二つのファイル名のスラッシュの数が異なっていて,異なるバージョ
ンのpatch
では,ファイル名が異なっていると解釈するためです.混
乱を避けるため,その代わりに以下のような出力を送ってください.
diff -Naur v2.0.29/prog/README v2.0.30/prog/README --- v2.0.29/prog/README 2002-03-10 23:30:39.942229878 -0800 +++ v2.0.30/prog/README 2002-03-17 20:49:32.442260588 -0800 |
周りの文を使用した差分のヘッダや`Index:'行で,正しくファイル名を指 定していることを確かめてください.既にパッチを当てたかどうか不思議に思う ので,リバースパッチを送らないように注意してください.
`README.orig'や`README~'のようなバックアップファイル名と比較し
ているパッチは,patch
が本当のファイルの代わりにバックアップファ
イルにパッチを当てようとして混乱するので,そのようなパッチを送ることを避
けてください.その代わりに,異なるディレクトリ,例えば`old/README'
と`new/README'のように,同じベースファイル名で比較したパッチを送っ
てください.
以前に送られた他のパッチを実際に適用している人を保護するために,パッチファ
イルの最初のパッチに,パッチレベルやバージョンナンバーが含まれている
`patchlevel.h'や`version.c'のような名前でファイルを更新させる
ことが可能です.入力ファイルに間違ったバージョンナンバーが含まれている場
合,patch
はすぐに文句をいいます.
この問題を避けるより明確な方法は,パッチの前に`Prereq:'行を書くこと
です.パッチファイルに前置されるテキストに`Prereq:'で始まる行が含ま
れている場合,patch
はその行の次の単語(通常はバージョンナンバー)
を受けとり,次の入力ファイルに空白や改行が前後にある単語が含まれているか
どうか調査します.そうでない場合は,patch
は処理する前に確認す
るためのプロンプトを出します.これで間違った順序でパッチを偶然にも適用す
ることが難しくなります.
パッチを生成する最も単純な方法は`diff -Naur'を使用することですが
(see section 11.1 パッチを生成するための助言),パッチを作成する前にファイルの名前を
変更したり削除したりすることで,パッチの大きさを小さくすることも可能かも
しれません.古いバージョンのパッケージに新しいバージョンにはないファイル
が含まれている場合や,二つのバージョン間で名前が変更されている場合,パッ
チを適用する前に,古いバージョンのディレクトリでユーザが実行する
rm
とmv
のリストを作成してください.そしてこれらのコマ
ンドをスクラッチのディレクトリで実行してください.
他のファイルから容易に再構成可能だという理由から(例えば,`TAGS'と
yacc
とmakeinfo
からの出力),パッチを含める必要がない
ファイルが存在する場合,diff
に`-x pattern'オプショ
ン(see section 4. ディレクトリの比較)で得られるパッチを実行してください.パッ
チ利用者がビルドするツールが無いため,パッチで派生ファイルを編集したくな
い場合,パッチ利用者のタイムスタンプでmake
が混乱しないように,
派生ファイルのパッチがそれに依存するファイルにパッチを当てないことを確か
めてください.
さて,`diff -Naur'を使用してパッチを作成することが可能です.スクラッ チディレクトリを最初に,新しいディレクトリを二番目に指定していることを確 かめてください.
パッチの最初に,パッチを適用する前にユーザにrm
とmv
コ
マンドを実行するように伝えるメモを書いてください.やっと,スクラッチディ
レクトリを削除できます.
周りの文の使用をより小さくすることでパッチの大きさを小さくすることも可能
ですが,パッチが入力行に正確にマッチしないとき,適切な処理を行なうため,
patch
は通常,最低二行必要だということを覚えておいてください.
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |