不正なパッチファイルの処理

不正なパッチファイルの一般的なエラーを特定・修正します。ヘッダーの欠落、カウントの不正、パッチ適用を妨げるエンコーディング問題を解説します。

Troubleshooting

詳細な説明

不正なパッチの診断

不正なパッチファイルにはパーサーが理解できない構造的な問題があります。最も一般的な問題とその修正方法を紹介します。

欠損または破損したHunkヘッダー

問題: @@ヘッダーが欠落しているか無効な数値を含む。

# 悪い例:カウントがない
@@ -5 +5 @@

# 良い例:カウントあり
@@ -5,3 +5,4 @@

注:カウントが1の場合は技術的に省略可能(@@ -5 +5,2 @@は旧カウントが1を意味)ですが、一部のツールはこの省略記法を生成しません。

行カウントの不正

問題: Hunkボディの行数がヘッダーのカウントと一致しない。

# ヘッダーは旧3行だが、ボディには4行
@@ -1,3 +1,3 @@
 line 1
-line 2
-line 3
 line 4
+new line 2
+new line 3

旧行数 = コンテキスト( )+ 削除(-)= 1 + 2 + 1 = 4、しかしヘッダーは3。

修正: カウントし直してヘッダーを@@ -1,4 +1,4 @@に更新。

行プレフィックスの欠落

問題: Hunkボディの行に +-プレフィックスがない。

@@ -1,3 +1,3 @@
line 1          <- スペースプレフィックスがない!
-old line
+new line
 line 3

Hunkボディのすべての行は (スペース)、+、または-で始まる必要があります

エンコーディングと改行コードの問題

  • CRLF vs LF: パッチが\r\n改行だがファイルが\n(またはその逆)の場合、コンテキストマッチングが失敗する可能性
  • BOM: パッチファイル先頭のUTF-8 BOMが最初のヘッダーを破損する可能性
  • コピペの副産物: リッチテキストエディタがダッシュを変換したり非表示文字を追加する可能性

ユースケース

メールやチャットでパッチを受け取りましたが適用に失敗します。ツールのエラーメッセージでHunkヘッダー、行プレフィックス、エンコーディングのいずれに問題があるか特定できます。

試してみる — Diff Patch Applier

フルツールを開く