commitextras.py
76 lines
| 2.3 KiB
| text/x-python
|
PythonLexer
/ hgext / commitextras.py
Pulkit Goyal
|
r33546 | # commitextras.py | ||
# | ||||
# Copyright 2013 Facebook, Inc. | ||||
# | ||||
# This software may be used and distributed according to the terms of the | ||||
# GNU General Public License version 2 or any later version. | ||||
Pulkit Goyal
|
r33562 | '''adds a new flag extras to commit (ADVANCED)''' | ||
Pulkit Goyal
|
r33546 | |||
from __future__ import absolute_import | ||||
Pulkit Goyal
|
r33603 | import re | ||
Pulkit Goyal
|
r33546 | from mercurial.i18n import _ | ||
from mercurial import ( | ||||
commands, | ||||
Pulkit Goyal
|
r33547 | error, | ||
Pulkit Goyal
|
r33546 | extensions, | ||
registrar, | ||||
) | ||||
cmdtable = {} | ||||
command = registrar.command(cmdtable) | ||||
testedwith = 'ships-with-hg-core' | ||||
Pulkit Goyal
|
r33547 | usedinternally = { | ||
'amend_source', | ||||
'branch', | ||||
'close', | ||||
'histedit_source', | ||||
'topic', | ||||
'rebase_source', | ||||
'intermediate-source', | ||||
'__touch-noise__', | ||||
'source', | ||||
'transplant_source', | ||||
} | ||||
Pulkit Goyal
|
r33546 | def extsetup(ui): | ||
entry = extensions.wrapcommand(commands.table, 'commit', _commit) | ||||
options = entry[1] | ||||
options.append(('', 'extra', [], | ||||
_('set a changeset\'s extra values'), _("KEY=VALUE"))) | ||||
def _commit(orig, ui, repo, *pats, **opts): | ||||
origcommit = repo.commit | ||||
try: | ||||
def _wrappedcommit(*innerpats, **inneropts): | ||||
Pulkit Goyal
|
r34976 | extras = opts.get(r'extra') | ||
Pulkit Goyal
|
r33546 | if extras: | ||
for raw in extras: | ||||
Pulkit Goyal
|
r33547 | if '=' not in raw: | ||
msg = _("unable to parse '%s', should follow " | ||||
"KEY=VALUE format") | ||||
raise error.Abort(msg % raw) | ||||
Pulkit Goyal
|
r33546 | k, v = raw.split('=', 1) | ||
Pulkit Goyal
|
r33607 | if not k: | ||
msg = _("unable to parse '%s', keys can't be empty") | ||||
raise error.Abort(msg % raw) | ||||
Pulkit Goyal
|
r33603 | if re.search('[^\w-]', k): | ||
msg = _("keys can only contain ascii letters, digits," | ||||
" '_' and '-'") | ||||
raise error.Abort(msg) | ||||
Pulkit Goyal
|
r33547 | if k in usedinternally: | ||
msg = _("key '%s' is used internally, can't be set " | ||||
"manually") | ||||
raise error.Abort(msg % k) | ||||
Pulkit Goyal
|
r34976 | inneropts[r'extra'][k] = v | ||
Pulkit Goyal
|
r33546 | return origcommit(*innerpats, **inneropts) | ||
# This __dict__ logic is needed because the normal | ||||
# extension.wrapfunction doesn't seem to work. | ||||
repo.__dict__['commit'] = _wrappedcommit | ||||
return orig(ui, repo, *pats, **opts) | ||||
finally: | ||||
del repo.__dict__['commit'] | ||||