
私はファイルを持っていますa
:
This
file
does
have
an error
in it
that
needs
to be
fixed.
そして同様のファイルb
:
This
file
does
have
no error
in it
that
needs
to be
fixed.
以下を使用して統合diffを作成できますdiff -u a b
。
--- a 2018-01-03 14:20:22 +0100
+++ b 2018-01-03 14:20:37 +0100
@@ -2,7 +2,7 @@
file
does
have
-an error
+no error
in it
that
needs
以下を使用して、コンテキストを各側で1行に減らすこともできますdiff -u1 a b
。
--- a 2018-01-03 14:20:22 +0100
+++ b 2018-01-03 14:20:37 +0100
@@ -4,3 +4,3 @@
have
-an error
+no error
in it
どちらのパッチもきれいに適用できますpatch
。ただし、diff
非対称コンテキストでパッチを生成する方法が見つかりませんでした。私はそれができないと仮定しています。それで、変更の前後に2行のコンテキストを持つパッチを作成するために、いくつかのコンテキストを手動で削除してみました。
--- a 2018-01-03 14:20:22 +0100
+++ b 2018-01-03 14:20:37 +0100
@@ -3,4 +3,4 @@
does
have
-an error
+no error
in it
これは私には効果があるようです。統合フォーマット。ただし、patch
苦情を申し立てるには、ファズテストに頼る必要があります。
patching file a
Hunk #1 succeeded at 3 with fuzz 1.
私は何か間違っているのでしょうか、それとも(GNU)を作成する方法がないので、誰も使用することを想像できpatch
ませんでした。diff
また、興味深いのは、非対称性を逆にすると(たとえば、前に1行、後に2行)、パッチが機能することです。
--- a 2018-01-03 14:20:22 +0100
+++ b 2018-01-03 14:20:37 +0100
@@ -4,4 +4,4 @@
have
-an error
+no error
in it
that
答え1
答え2
GNU は、patch
サフィックスコンテキストよりもプレフィックスコンテキストが好きではありません。単純だが醜い解決策は、コンテキストの最初の行を次のように機能しない変更に変換することです。
--- a 2018-01-03 14:20:22 +0100
+++ b 2018-01-03 14:20:37 +0100
@@ -3,4 +3,4 @@
-does
+does
have
-an error
+no error
in it
これにより、すべてのプレフィックスコンテキストが削除されます。サフィックスのコンテキストが多いときは大丈夫です。
patch
ソースコードを見てみると問題のある作品。深く理解することなく、コードでプレフィックスコンテキストがすでに処理されている方法と同様の簡単な修正方法を見つけました。これは私の出力ですgit diff
(パッチpatch
)。
diff --git a/src/patch.c b/src/patch.c
index bba7e0e..e661af1 100644
--- a/src/patch.c
+++ b/src/patch.c
@@ -1171,7 +1171,7 @@ locate_hunk (lin fuzz)
else if (prefix_fuzz < 0)
prefix_fuzz = 0;
- if (suffix_fuzz < 0)
+ if (suffix_fuzz < 0 && pch_first () + pat_lines > input_lines)
{
/* Can only match end of file. */
offset = first_guess - (input_lines - pat_lines + 1);
@@ -1184,6 +1184,8 @@ locate_hunk (lin fuzz)
else
return 0;
}
+ else if (suffix_fuzz < 0)
+ suffix_fuzz = 0;
min_offset = max_pos_offset < 0 ? first_guess - max_where
: max_neg_offset < 0 ? first_guess - min_where
diff --git a/tests/asymmetric-hunks b/tests/asymmetric-hunks
index d6979d9..86e4ef9 100644
--- a/tests/asymmetric-hunks
+++ b/tests/asymmetric-hunks
@@ -77,5 +77,4 @@ seq 1 5 > a
check 'patch < a.diff' <<EOF
patching file a
-Hunk #1 succeeded at 2 with fuzz 1.
EOF
@Patrick Mevzekが指摘したように、すでに非対称コンテキストの回帰テストがあります。したがって、この部分もファジングが予想されずに修正されました。残念ながら、マージテストも失敗することがありますが、その理由はわかりません。このためパッチを提出できないようです。より多くの洞察力を持つ人がより良い解決策を思い出すことができれば良いでしょう。