# HG changeset patch # User Matt Mackall # Date 2015-06-18 20:42:40 # Node ID 2748bf78a5bf610da4f2d90fd1eea19a3b360c04 # Parent c88082baf6933dbde3f6bdde6fff788defa06ec6 patch: add fuzz config flag (issue4697) diff --git a/mercurial/help/config.txt b/mercurial/help/config.txt --- a/mercurial/help/config.txt +++ b/mercurial/help/config.txt @@ -1093,6 +1093,11 @@ command or with Mercurial Queues extensi 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`` --------- diff --git a/mercurial/patch.py b/mercurial/patch.py --- a/mercurial/patch.py +++ b/mercurial/patch.py @@ -773,7 +773,7 @@ class patchfile(object): 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 diff --git a/tests/test-import.t b/tests/test-import.t --- a/tests/test-import.t +++ b/tests/test-import.t @@ -492,6 +492,13 @@ Test fuzziness (ambiguous patch location $ 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