amend: prevent '\n' in the note string
This comes from the evolve function. I'm not sure why this check was missing in
core, since it was present when the length check was added to evolve.
I didn't flag this as BC because
530b7361e3a9 mentioned this argument wasn't
added to the release notes due to no display capability, and that hasn't changed
AFAIK.
Differential Revision: https://phab.mercurial-scm.org/D6854
--- a/hgext/amend.py Sat Sep 14 15:13:16 2019 -0400
+++ b/hgext/amend.py Sat Sep 14 18:44:18 2019 -0400
@@ -16,7 +16,6 @@
from mercurial import (
cmdutil,
commands,
- error,
pycompat,
registrar,
)
@@ -50,8 +49,8 @@
See :hg:`help commit` for more details.
"""
opts = pycompat.byteskwargs(opts)
- if len(opts['note']) > 255:
- raise error.Abort(_("cannot store a note of more than 255 bytes"))
+ cmdutil.checknotesize(ui, opts)
+
with repo.wlock(), repo.lock():
if not opts.get('logfile'):
opts['message'] = opts.get('message') or repo['.'].description()
--- a/mercurial/cmdutil.py Sat Sep 14 15:13:16 2019 -0400
+++ b/mercurial/cmdutil.py Sat Sep 14 18:44:18 2019 -0400
@@ -210,6 +210,18 @@
return datemaydiffer
+def checknotesize(ui, opts):
+ """ make sure note is of valid format """
+
+ note = opts.get('note')
+ if not note:
+ return
+
+ if len(note) > 255:
+ raise error.Abort(_(b"cannot store a note of more than 255 bytes"))
+ if b'\n' in note:
+ raise error.Abort(_(b"note cannot contain a newline"))
+
def ishunk(x):
hunkclasses = (crecordmod.uihunk, patch.recordhunk)
return isinstance(x, hunkclasses)