Mercurial > hg
view hgext/commitextras.py @ 43104:74802979dd9d
py3: define and use pycompat.itervalues()
.itervalues() only exists on Python 2. Python 3's equivalent is
.values(). But we don't want to blindly use .values() everywhere
because on Python 2, it will create a list, which will have performance
implications.
This commit introduces pycompat.itervalues() which will call the appropriate
method on the passed object. We update all callers of obj.itervalues()
to pycompat.itervalues(obj) instead.
With this commit, the only source tranforming remaining is for
iteritems(). Victory is near...
Differential Revision: https://phab.mercurial-scm.org/D7013
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sun, 06 Oct 2019 17:59:15 -0400 |
parents | 687b865b95ad |
children | 4aa72cdf616f |
line wrap: on
line source
# 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. '''adds a new flag extras to commit (ADVANCED)''' from __future__ import absolute_import import re from mercurial.i18n import _ from mercurial import ( commands, error, extensions, registrar, util, ) cmdtable = {} command = registrar.command(cmdtable) testedwith = b'ships-with-hg-core' usedinternally = { b'amend_source', b'branch', b'close', b'histedit_source', b'topic', b'rebase_source', b'intermediate-source', b'__touch-noise__', b'source', b'transplant_source', } def extsetup(ui): entry = extensions.wrapcommand(commands.table, b'commit', _commit) options = entry[1] options.append( ( b'', b'extra', [], _(b'set a changeset\'s extra values'), _(b"KEY=VALUE"), ) ) def _commit(orig, ui, repo, *pats, **opts): if util.safehasattr(repo, b'unfiltered'): repo = repo.unfiltered() class repoextra(repo.__class__): def commit(self, *innerpats, **inneropts): extras = opts.get(r'extra') for raw in extras: if b'=' not in raw: msg = _( b"unable to parse '%s', should follow " b"KEY=VALUE format" ) raise error.Abort(msg % raw) k, v = raw.split(b'=', 1) if not k: msg = _(b"unable to parse '%s', keys can't be empty") raise error.Abort(msg % raw) if re.search(br'[^\w-]', k): msg = _( b"keys can only contain ascii letters, digits," b" '_' and '-'" ) raise error.Abort(msg) if k in usedinternally: msg = _( b"key '%s' is used internally, can't be set " b"manually" ) raise error.Abort(msg % k) inneropts[r'extra'][k] = v return super(repoextra, self).commit(*innerpats, **inneropts) repo.__class__ = repoextra return orig(ui, repo, *pats, **opts)