diff hgext/commitextras.py @ 33547:a6af8560494e

commitextras: check the format of the arguments and no internal key is used This patch adds check to make the arguments are passed as KEY=VALUE and no key which is used internally is passed. This patch also adds test for the extension.
author Pulkit Goyal <7895pulkit@gmail.com>
date Wed, 12 Jul 2017 16:10:10 +0530
parents 77c0c36654c8
children 3cfabb6cfd51
line wrap: on
line diff
--- a/hgext/commitextras.py	Wed Jul 12 00:23:45 2017 +0530
+++ b/hgext/commitextras.py	Wed Jul 12 16:10:10 2017 +0530
@@ -12,6 +12,7 @@
 from mercurial.i18n import _
 from mercurial import (
     commands,
+    error,
     extensions,
     registrar,
 )
@@ -20,6 +21,19 @@
 command = registrar.command(cmdtable)
 testedwith = 'ships-with-hg-core'
 
+usedinternally = {
+    'amend_source',
+    'branch',
+    'close',
+    'histedit_source',
+    'topic',
+    'rebase_source',
+    'intermediate-source',
+    '__touch-noise__',
+    'source',
+    'transplant_source',
+}
+
 def extsetup(ui):
     entry = extensions.wrapcommand(commands.table, 'commit', _commit)
     options = entry[1]
@@ -33,7 +47,15 @@
             extras = opts.get('extra')
             if extras:
                 for raw in extras:
+                    if '=' not in raw:
+                        msg = _("unable to parse '%s', should follow "
+                                "KEY=VALUE format")
+                        raise error.Abort(msg % raw)
                     k, v = raw.split('=', 1)
+                    if k in usedinternally:
+                        msg = _("key '%s' is used internally, can't be set "
+                                "manually")
+                        raise error.Abort(msg % k)
                     inneropts['extra'][k] = v
             return origcommit(*innerpats, **inneropts)