changeset 28828:3640c1702c43

help: report source of aliases
author timeless <timeless@mozdev.org>
date Fri, 08 Apr 2016 18:35:49 +0000
parents 1e184241de51
children 65fb87479792
files mercurial/dispatch.py mercurial/help.py tests/test-help.t
diffstat 3 files changed, 63 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/dispatch.py	Fri Apr 08 16:05:52 2016 +0000
+++ b/mercurial/dispatch.py	Fri Apr 08 18:35:49 2016 +0000
@@ -379,7 +379,7 @@
     return r.sub(lambda x: replacemap[x.group()], cmd)
 
 class cmdalias(object):
-    def __init__(self, name, definition, cmdtable):
+    def __init__(self, name, definition, cmdtable, source):
         self.name = self.cmd = name
         self.cmdname = ''
         self.definition = definition
@@ -389,6 +389,7 @@
         self.help = ''
         self.badalias = None
         self.unknowncmd = False
+        self.source = source
 
         try:
             aliases, entry = cmdutil.findcmd(self.name, cmdtable)
@@ -499,7 +500,8 @@
     # 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'):
-        aliasdef = cmdalias(alias, definition, cmdtable)
+        source = ui.configsource('alias', alias)
+        aliasdef = cmdalias(alias, definition, cmdtable, source)
 
         try:
             olddef = cmdtable[aliasdef.cmd][0]
--- a/mercurial/help.py	Fri Apr 08 16:05:52 2016 +0000
+++ b/mercurial/help.py	Fri Apr 08 18:35:49 2016 +0000
@@ -336,10 +336,13 @@
         if not doc:
             doc = _("(no help text available)")
         if util.safehasattr(entry[0], 'definition'):  # aliased command
+            source = entry[0].source
             if entry[0].definition.startswith('!'):  # shell alias
-                doc = _('shell alias for::\n\n    %s') % entry[0].definition[1:]
+                doc = (_('shell alias for::\n\n    %s\n\ndefined by: %s\n') %
+                       (entry[0].definition[1:], source))
             else:
-                doc = _('alias for: hg %s\n\n%s') % (entry[0].definition, doc)
+                doc = (_('alias for: hg %s\n\n%s\n\ndefined by: %s\n') %
+                       (entry[0].definition, doc, source))
         doc = doc.splitlines(True)
         if ui.quiet or not full:
             rst.append(doc[0])
--- a/tests/test-help.t	Fri Apr 08 16:05:52 2016 +0000
+++ b/tests/test-help.t	Fri Apr 08 18:35:49 2016 +0000
@@ -673,10 +673,50 @@
   > def nohelp(ui, *args, **kwargs):
   >     pass
   > 
+  > def uisetup(ui):
+  >     ui.setconfig('alias', 'shellalias', '!echo hi', 'helpext')
+  >     ui.setconfig('alias', 'hgalias', 'summary', 'helpext')
+  > 
   > EOF
   $ echo '[extensions]' >> $HGRCPATH
   $ echo "helpext = `pwd`/helpext.py" >> $HGRCPATH
 
+Test for aliases
+
+  $ hg help hgalias
+  hg hgalias [--remote]
+  
+  alias for: hg summary
+  
+  summarize working directory state
+  
+      This generates a brief summary of the working directory state, including
+      parents, branch, commit status, phase and available updates.
+  
+      With the --remote option, this will check the default paths for incoming
+      and outgoing changes. This can be time-consuming.
+  
+      Returns 0 on success.
+  
+  defined by: helpext
+  
+  options:
+  
+    --remote check for push and pull
+  
+  (some details hidden, use --verbose to show complete help)
+
+  $ hg help shellalias
+  hg shellalias
+  
+  shell alias for:
+  
+    echo hi
+  
+  defined by: helpext
+  
+  (some details hidden, use --verbose to show complete help)
+
 Test command with no help text
 
   $ hg help nohelp
@@ -2064,6 +2104,13 @@
   show help for a given topic or a help overview
   </td></tr>
   <tr><td>
+  <a href="/help/hgalias">
+  hgalias
+  </a>
+  </td><td>
+  summarize working directory state
+  </td></tr>
+  <tr><td>
   <a href="/help/identify">
   identify
   </a>
@@ -2155,6 +2202,13 @@
   print the root (top) of the current working directory
   </td></tr>
   <tr><td>
+  <a href="/help/shellalias">
+  shellalias
+  </a>
+  </td><td>
+  (no help text available)
+  </td></tr>
+  <tr><td>
   <a href="/help/tag">
   tag
   </a>