commitextras.py
72 lines
| 2.1 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, | ||||
Valentin Gatien-Baron
|
r39330 | util, | ||
Pulkit Goyal
|
r33546 | ) | ||
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): | ||||
Valentin Gatien-Baron
|
r39330 | if util.safehasattr(repo, 'unfiltered'): | ||
repo = repo.unfiltered() | ||||
class repoextra(repo.__class__): | ||||
def commit(self, *innerpats, **inneropts): | ||||
Pulkit Goyal
|
r34976 | extras = opts.get(r'extra') | ||
Valentin Gatien-Baron
|
r39331 | 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 not k: | ||||
msg = _("unable to parse '%s', keys can't be empty") | ||||
raise error.Abort(msg % raw) | ||||
Gregory Szorc
|
r41673 | if re.search(br'[^\w-]', k): | ||
Valentin Gatien-Baron
|
r39331 | msg = _("keys can only contain ascii letters, digits," | ||
" '_' and '-'") | ||||
raise error.Abort(msg) | ||||
if k in usedinternally: | ||||
msg = _("key '%s' is used internally, can't be set " | ||||
"manually") | ||||
raise error.Abort(msg % k) | ||||
inneropts[r'extra'][k] = v | ||||
Valentin Gatien-Baron
|
r39330 | return super(repoextra, self).commit(*innerpats, **inneropts) | ||
repo.__class__ = repoextra | ||||
return orig(ui, repo, *pats, **opts) | ||||