10.6 1つのファイル内の複数パッチ
パッチファイルが複数のパッチを含み、コマンドラインで入力ファイルを指定しない場合、patchはそれぞれを別々のパッチファイルから来たものとして適用を試みます。つまり、パッチごとに対象ファイル名を決め、その前のテキストを調べて、ファイル名と前提となるリビジョン番号を探します(詳しくはパッチの作成と利用のヒント参照)。
patchはパッチの前のテキストからファイル名を推定するため、次の規則を使います。まずpatchは、以下のように順序付きの候補ファイル名一覧を作ります。
- コンテキスト diff のヘッダーなら、
patchはヘッダーの旧・新ファイル名を使います。-pnumまたは--strip=numオプションに必要な数のスラッシュがない名前は無視します。/dev/nullも無視します。 - 先頭の不要なテキストに ‘Index:’ 行があり、旧・新の名前が両方ともない場合、または
patchが POSIX に準拠している場合、patchは ‘Index:’ 行の名前を使います。 - 以降の規則では、ヘッダーでの出現順によらず、候補名の順序を(旧、新、index)とします。
次にpatchは、以下のように候補一覧から名前を選びます。
- 名前の付いたファイルのうち存在するものがあれば、
patchは POSIX 準拠時には最初の名前、それ以外では最良の名前を選びます。 patchが RCS、ClearCase、SCCS を無視しておらず(リビジョン管理参照)、候補のファイルは存在しなくても、RCS、ClearCase、SCCS のマスターファイルが見つかれば、patchはマスターのある最初の候補名を選びます。- 候補ファイルが存在せず、RCS、ClearCase、SCCS のマスターも見つからず、候補名はあり、
patchが POSIX 非準拠で、パッチがファイルを作成するように見える場合、patchは新規ディレクトリの作成数が最小になる最良の名前を選びます。 - これらの推定で名前が決まらなければ、適用対象のファイル名を尋ねられ、
patchはその名前を選びます。
空でない一覧から最良のファイル名を決めるには、patchはまずパスの構成要素数が最小の名前を選び、その中でベース名が最短のもの、さらにその中で名前全体が最短のものを選び、最後に残った最初の名前を使います。
patchが POSIX 準拠かどうかについては、patchと POSIX 標準を参照してください。