[PATCH] help: supports 'hg help config.alias' (issue2804)

Yun Lee yun.lee.bj at gmail.com
Tue May 24 09:46:39 CDT 2011


# HG changeset patch
# User Yun Lee <yun.lee.bj at gmail.com>
# Date 1306248390 -28800
# Branch stable
# Node ID 39fc1a69bcd2f80b24c06943360c39eafacd4a52
# Parent  4ee293cb1e61fe24ed22c75dc1086034053926a4
help: supports 'hg help config.alias' (issue2804)

diff -r 4ee293cb1e61 -r 39fc1a69bcd2 doc/hgrc.5.txt
--- a/doc/hgrc.5.txt	Tue May 24 22:07:19 2011 +0800
+++ b/doc/hgrc.5.txt	Tue May 24 22:46:30 2011 +0800
@@ -179,47 +179,7 @@
 
 ``alias``
 """""""""
-Defines command aliases.
-Aliases allow you to define your own commands in terms of other
-commands (or aliases), optionally including arguments.
-
-Alias definitions consist of lines of the form::
-
-    <alias> = <command> [<argument]...
-
-For example, this definition::
-
-    latest = log --limit 5
-
-creates a new command ``latest`` that shows only the five most recent
-changesets. You can define subsequent aliases using earlier ones::
-
-    stable5 = latest -b stable
-
-.. note:: It is possible to create aliases with the same names as
-   existing commands, which will then override the original
-   definitions. This is almost always a bad idea!
-
-An alias can start with an exclamation point (``!``) to make it a
-shell alias. A shell alias is executed with the shell and will let you
-run arbitrary commands. As an example, ::
-
-   echo = !echo
-
-will let you do ``hg echo foo`` to have ``foo`` printed in your
-terminal. A better example might be::
-
-   purge = !$HG status --no-status --unknown -0 | xargs -0 rm
-
-which will make ``hg purge`` delete all unknown files in the
-repository in the same manner as the purge extension.
-
-Shell aliases are executed in an environment where ``$HG`` expand to
-the path of the Mercurial that was used to execute the alias. This is
-useful when you want to call further Mercurial commands in a shell
-alias, as was done above for the purge alias. In addition,
-``$HG_ARGS`` expand to the arguments given to Mercurial. In the ``hg
-echo foo`` call above, ``$HG_ARGS`` would expand to ``echo foo``.
+.. include:: ../mercurial/help/config/alias.txt
 
 ``auth``
 """"""""
diff -r 4ee293cb1e61 -r 39fc1a69bcd2 mercurial/commands.py
--- a/mercurial/commands.py	Tue May 24 22:07:19 2011 +0800
+++ b/mercurial/commands.py	Tue May 24 22:46:30 2011 +0800
@@ -2083,13 +2083,25 @@
             addglobalopts(True)
 
     def helptopic(name):
+        topicname, subtopicname = (name, None)
+        
+        if '.' in name:
+            topicname, subtopicname = name.split('.')
+        
         for names, header, doc, subtopics in help.helptable:
-            if name in names:
+            if topicname in names:
                 break
         else:
             raise error.UnknownCommand(name)
 
-        # description
+
+        if subtopicname:
+            for name, header, doc in subtopics:
+                if subtopicname ==name:
+                    break
+            else:
+                raise error.UnknownCommand(name)               
+
         if not doc:
             doc = _("(no help text available)")
         if hasattr(doc, '__call__'):
@@ -2098,7 +2110,7 @@
         ui.write("%s\n\n" % header)
         ui.write("%s\n" % minirst.format(doc, textwidth, indent=4))
         
-        if subtopics:
+        if not subtopicname and subtopics:
             ui.write("\n\nsubtopics:\n\n")
             
             for subtopic in subtopics:
diff -r 4ee293cb1e61 -r 39fc1a69bcd2 mercurial/help.py
--- a/mercurial/help.py	Tue May 24 22:07:19 2011 +0800
+++ b/mercurial/help.py	Tue May 24 22:46:30 2011 +0800
@@ -88,29 +88,29 @@
 
 helptable = [
     (["config", "hgrc"], _("Configuration Files"), loaddoc('config'), 
-      [('alias', 'Defines command aliases'), 
-       ('auth', 'Authentication credentials for HTTP authentication'), 
-       ('encode', 'Filters for transforming files on checkin'),
-       ('decode', 'Filters for transforming files on checkout'),
-       ('defaults', 'Use the [defaults] section to define command defaults'),
-       ('diff', 'Settings used when displaying diffs'),
-       ('email', 'Settings for extensions that send email messages'),
-       ('extensions', 'Extension mechanism for adding new features'),
-       ('hostfingerprints', 'Fingerprints of the certificates of known HTTPS servers'),
-       ('format', 'Configuration for repository format'),
-       ('merge-patterns', 'Merge tools to associate with particular file patterns'),
-       ('merge-tools', 'Configures external merge tools to use for file-level merges'),
-       ('hooks', 'Commands or Python functions'),
-       ('http_proxy', 'Configuration for access web-based Mercurial repositories through a HTTP proxy'),
-       ('smtp', 'Configuration for extensions that need to send email messages'),
-       ('patch', 'Settings used when applying patches'),
-       ('paths', 'Assigns symbolic names to repositories'),
-       ('profiling', 'Specifies profiling format and file output'),
-       ('server', 'Controls generic server settings'),
-       ('subpaths', 'Defines subrepositories source locations rewriting rules of the form'),
-       ('trusted', 'specifies what users and groups are trusted'),
-       ('ui', 'User interface controls'),
-       ('web', 'Web interface configuration'),
+      [('alias', 'Defines command aliases', loaddoc('config/alias')), 
+       ('auth', 'Authentication credentials for HTTP authentication', None), 
+       ('encode', 'Filters for transforming files on checkin', None),
+       ('decode', 'Filters for transforming files on checkout', None),
+       ('defaults', 'Use the [defaults] section to define command defaults', None),
+       ('diff', 'Settings used when displaying diffs', None),
+       ('email', 'Settings for extensions that send email messages', None),
+       ('extensions', 'Extension mechanism for adding new features', None),
+       ('hostfingerprints', 'Fingerprints of the certificates of known HTTPS servers', None),
+       ('format', 'Configuration for repository format', None),
+       ('merge-patterns', 'Merge tools to associate with particular file patterns', None),
+       ('merge-tools', 'Configures external merge tools to use for file-level merges', None),
+       ('hooks', 'Commands or Python functions', None),
+       ('http_proxy', 'Configuration for access web-based Mercurial repositories through a HTTP proxy', None),
+       ('smtp', 'Configuration for extensions that need to send email messages', None),
+       ('patch', 'Settings used when applying patches', None),
+       ('paths', 'Assigns symbolic names to repositories', None),
+       ('profiling', 'Specifies profiling format and file output', None),
+       ('server', 'Controls generic server settings', None),
+       ('subpaths', 'Defines subrepositories source locations rewriting rules of the form', None),
+       ('trusted', 'specifies what users and groups are trusted', None),
+       ('ui', 'User interface controls', None),
+       ('web', 'Web interface configuration', None),
        ]),
     (["dates"], _("Date Formats"), loaddoc('dates'), []),
     (["patterns"], _("File Name Patterns"), loaddoc('patterns'), []),
diff -r 4ee293cb1e61 -r 39fc1a69bcd2 setup.py
--- a/setup.py	Tue May 24 22:07:19 2011 +0800
+++ b/setup.py	Tue May 24 22:46:30 2011 +0800
@@ -350,7 +350,7 @@
         packages.extend(['hgext.inotify', 'hgext.inotify.linux'])
 
 packagedata = {'mercurial': ['locale/*/LC_MESSAGES/hg.mo',
-                             'help/*.txt']}
+                             'help/*.txt', 'help/config/*.txt']}
 
 def ordinarypath(p):
     return p and p[0] != '.' and p[-1] != '~'
diff -r 4ee293cb1e61 -r 39fc1a69bcd2 tests/test-help.t
--- a/tests/test-help.t	Tue May 24 22:07:19 2011 +0800
+++ b/tests/test-help.t	Tue May 24 22:46:30 2011 +0800
@@ -882,3 +882,55 @@
     trusted           specifies what users and groups are trusted
     ui                User interface controls
     web               Web interface configuration
+
+Test 'hg help config.alias'
+  $ hg help config.alias
+  Defines command aliases
+  
+      Defines command aliases. Aliases allow you to define your own commands in
+      terms of other commands (or aliases), optionally including arguments.
+  
+      Alias definitions consist of lines of the form:
+  
+        <alias> = <command> [<argument]...
+  
+      For example, this definition:
+  
+        latest = log --limit 5
+  
+      creates a new command "latest" that shows only the five most recent
+      changesets. You can define subsequent aliases using earlier ones:
+  
+        stable5 = latest -b stable
+  
+      Note:
+         It is possible to create aliases with the same names as existing
+         commands, which will then override the original definitions. This is
+         almost always a bad idea!
+  
+      An alias can start with an exclamation point ("!") to make it a shell
+      alias. A shell alias is executed with the shell and will let you run
+      arbitrary commands. As an example,
+  
+        echo = !echo
+  
+      will let you do "hg echo foo" to have "foo" printed in your terminal. A
+      better example might be:
+  
+        purge = !$HG status --no-status --unknown -0 | xargs -0 rm
+  
+      which will make "hg purge" delete all unknown files in the repository in
+      the same manner as the purge extension.
+  
+      Shell aliases are executed in an environment where "$HG" expand to the
+      path of the Mercurial that was used to execute the alias. This is useful
+      when you want to call further Mercurial commands in a shell alias, as was
+      done above for the purge alias. In addition, "$HG_ARGS" expand to the
+      arguments given to Mercurial. In the "hg echo foo" call above, "$HG_ARGS"
+      would expand to "echo foo".
+ 
+Test 'hg help config.auth'
+  $ hg help config.auth 
+  Authentication credentials for HTTP authentication
+  
+      (no help text available)


More information about the Mercurial-devel mailing list