# HG changeset patch # User Martin von Zweigbergk # Date 2021-11-19 17:17:30 # Node ID 220506bb213e36facf38a83d0b24d07705064841 # Parent 6a454e7053a1a92ff774b69c526edb69f5d0f3bf patch: add hint about mangled whitespace on bad patch One of the most common reasons that a patch doesn't apply is because its whitespace has been mangled (e.g. by their mail client or though copy&paste). Let's provide a hint about that. Differential Revision: https://phab.mercurial-scm.org/D11825 diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -2025,7 +2025,12 @@ def tryimportone(ui, repo, patchdata, pa similarity=sim / 100.0, ) except error.PatchParseError as e: - raise error.InputError(pycompat.bytestr(e)) + raise error.InputError( + pycompat.bytestr(e), + hint=_( + b'check that whitespace in the patch has not been mangled' + ), + ) except error.PatchApplicationError as e: if not partial: raise error.StateError(pycompat.bytestr(e)) @@ -2086,7 +2091,12 @@ def tryimportone(ui, repo, patchdata, pa eolmode=None, ) except error.PatchParseError as e: - raise error.InputError(stringutil.forcebytestr(e)) + raise error.InputError( + stringutil.forcebytestr(e), + hint=_( + b'check that whitespace in the patch has not been mangled' + ), + ) except error.PatchApplicationError as e: raise error.StateError(stringutil.forcebytestr(e)) if opts.get(b'exact'): diff --git a/tests/test-import-git.t b/tests/test-import-git.t --- a/tests/test-import-git.t +++ b/tests/test-import-git.t @@ -519,6 +519,7 @@ Invalid base85 content > EOF applying patch from stdin abort: could not decode "binary2" binary patch: bad base85 character at position 6 + (check that whitespace in the patch has not been mangled) [10] $ hg revert -aq @@ -534,6 +535,7 @@ Invalid base85 content > EOF applying patch from stdin abort: "binary2" length is 5 bytes, should be 6 + (check that whitespace in the patch has not been mangled) [10] $ hg revert -aq @@ -548,6 +550,7 @@ Invalid base85 content > EOF applying patch from stdin abort: could not extract "binary2" binary data + (check that whitespace in the patch has not been mangled) [10] Simulate a copy/paste turning LF into CRLF (issue2870) diff --git a/tests/test-import.t b/tests/test-import.t --- a/tests/test-import.t +++ b/tests/test-import.t @@ -234,6 +234,7 @@ import of malformed plain diff should fa $ hg --cwd b import -mpatch ../broken.patch applying ../broken.patch abort: bad hunk #1 + (check that whitespace in the patch has not been mangled) [10] $ rm -r b @@ -2076,6 +2077,7 @@ test immature end of hunk > EOF applying patch from stdin abort: bad hunk #1: incomplete hunk + (check that whitespace in the patch has not been mangled) [10] $ hg import - <<'EOF' @@ -2087,4 +2089,5 @@ test immature end of hunk > EOF applying patch from stdin abort: bad hunk #1: incomplete hunk + (check that whitespace in the patch has not been mangled) [10]