# HG changeset patch # User Matt Harbison # Date 2019-09-14 22:44:18 # Node ID 7e999704178135dda8fd61c7eea126ac13691a30 # Parent e4803231f538f73700dfb66e27b1d75279b19e62 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 diff --git a/hgext/amend.py b/hgext/amend.py --- a/hgext/amend.py +++ b/hgext/amend.py @@ -16,7 +16,6 @@ from mercurial.i18n import _ from mercurial import ( cmdutil, commands, - error, pycompat, registrar, ) @@ -50,8 +49,8 @@ def amend(ui, repo, *pats, **opts): 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() diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -210,6 +210,18 @@ def resolvecommitoptions(ui, opts): 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)