changeset 28621:d856e85a8a7a

dispatch: make cmdalias forward command attributes to function This delays resolution of command attributes so that missing attributes can be warned only when necessary.
author Yuya Nishihara <yuya@tcha.org>
date Mon, 14 Mar 2016 00:06:52 +0900
parents 759d167f75cf
children 527cf881d000
files mercurial/dispatch.py
diffstat 1 files changed, 8 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/dispatch.py	Sun Mar 20 17:18:06 2016 -0700
+++ b/mercurial/dispatch.py	Mon Mar 14 00:06:52 2016 +0900
@@ -437,9 +437,6 @@
         self.args = []
         self.opts = []
         self.help = ''
-        self.norepo = True
-        self.optionalrepo = False
-        self.inferrepo = False
         self.badalias = None
         self.unknowncmd = False
 
@@ -501,12 +498,6 @@
                 self.fn, self.opts = tableentry
 
             self.args = aliasargs(self.fn, args)
-            if not self.fn.norepo:
-                self.norepo = False
-            if self.fn.optionalrepo:
-                self.optionalrepo = True
-            if self.fn.inferrepo:
-                self.inferrepo = True
             if self.help.startswith("hg " + cmd):
                 # drop prefix in old-style help lines so hg shows the alias
                 self.help = self.help[4 + len(cmd):]
@@ -520,6 +511,14 @@
             self.badalias = (_("alias '%s' resolves to ambiguous command '%s'")
                              % (self.name, cmd))
 
+    def __getattr__(self, name):
+        adefaults = {'norepo': True, 'optionalrepo': False, 'inferrepo': False}
+        if name not in adefaults:
+            raise AttributeError(name)
+        if self.badalias or util.safehasattr(self, 'shell'):
+            return adefaults[name]
+        return getattr(self.fn, name)
+
     def __call__(self, ui, *args, **opts):
         if self.badalias:
             hint = None