D805: alias: make alias command lazily resolved
quark (Jun Wu)
phabricator at mercurial-scm.org
Sat Sep 23 17:41:45 EDT 2017
quark updated this revision to Diff 2052.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D805?vs=2050&id=2052
REVISION DETAIL
https://phab.mercurial-scm.org/D805
AFFECTED FILES
mercurial/dispatch.py
CHANGE DETAILS
diff --git a/mercurial/dispatch.py b/mercurial/dispatch.py
--- a/mercurial/dispatch.py
+++ b/mercurial/dispatch.py
@@ -523,21 +523,52 @@
ui.debug("alias '%s' expands to '%s'\n" % (self.name, args))
raise
+class lazyaliasentry(object):
+ """like a typical command entry (func, opts, help), but is lazy"""
+
+ def __init__(self, name, definition, cmdtable, source):
+ self.name = name
+ self.definition = definition
+ self.cmdtable = cmdtable.copy()
+ self.source = source
+
+ @util.propertycache
+ def _aliasdef(self):
+ return cmdalias(self.name, self.definition, self.cmdtable, self.source)
+
+ def __getitem__(self, n):
+ aliasdef = self._aliasdef
+ if n == 0:
+ return aliasdef
+ elif n == 1:
+ return aliasdef.opts
+ elif n == 2:
+ return aliasdef.help
+ else:
+ raise IndexError
+
+ def __iter__(self):
+ for i in range(3):
+ yield self[i]
+
+ def __len__(self):
+ return 3
+
def addaliases(ui, cmdtable):
# aliases are processed after extensions have been loaded, so they
# may use extension commands. Aliases can also use other alias definitions,
# but only if they have been defined prior to the current definition.
for alias, definition in ui.configitems('alias'):
try:
- if cmdtable[alias][0].definition == definition:
+ if cmdtable[alias].definition == definition:
continue
except (KeyError, AttributeError):
# definition might not exist or it might not be a cmdalias
pass
source = ui.configsource('alias', alias)
- aliasdef = cmdalias(alias, definition, cmdtable, source)
- cmdtable[aliasdef.name] = (aliasdef, aliasdef.opts, aliasdef.help)
+ entry = lazyaliasentry(alias, definition, cmdtable, source)
+ cmdtable[alias] = entry
def _parse(ui, args):
options = {}
To: quark, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list