patch: add fuzz config flag (issue4697)
authorMatt Mackall <mpm@selenic.com>
Thu, 18 Jun 2015 15:42:40 -0500
changeset 25631 2748bf78a5bf
parent 25630 c88082baf693
child 25632 015c0d1087a3
patch: add fuzz config flag (issue4697)
mercurial/help/config.txt
mercurial/patch.py
tests/test-import.t
--- a/mercurial/help/config.txt	Fri Jun 19 11:17:11 2015 -0700
+++ b/mercurial/help/config.txt	Thu Jun 18 15:42:40 2015 -0500
@@ -1093,6 +1093,11 @@
     of line, patch line endings are preserved.
     Default: strict.
 
+``fuzz``
+    The number of lines of 'fuzz' to allow when applying patches. This
+    controls how much context the patcher is allowed to ignore when
+    trying to apply a patch.
+    Default: 2
 
 ``paths``
 ---------
--- a/mercurial/patch.py	Fri Jun 19 11:17:11 2015 -0700
+++ b/mercurial/patch.py	Thu Jun 18 15:42:40 2015 -0500
@@ -773,7 +773,7 @@
         for x, s in enumerate(self.lines):
             self.hash.setdefault(s, []).append(x)
 
-        for fuzzlen in xrange(3):
+        for fuzzlen in xrange(self.ui.configint("patch", "fuzz", 2) + 1):
             for toponly in [True, False]:
                 old, oldstart, new, newstart = h.fuzzit(fuzzlen, toponly)
                 oldstart = oldstart + self.offset + self.skew
--- a/tests/test-import.t	Fri Jun 19 11:17:11 2015 -0700
+++ b/tests/test-import.t	Thu Jun 18 15:42:40 2015 -0500
@@ -492,6 +492,13 @@
   $ echo line0 >> a
   $ hg ci -m brancha
   created new head
+  $ hg import --config patch.fuzz=0 -v fuzzy-tip.patch
+  applying fuzzy-tip.patch
+  patching file a
+  Hunk #1 FAILED at 0
+  1 out of 1 hunks FAILED -- saving rejects to file a.rej
+  abort: patch failed to apply
+  [255]
   $ hg import --no-commit -v fuzzy-tip.patch
   applying fuzzy-tip.patch
   patching file a