help: distinguish sections when multiple match (issue4802)
authortimeless@mozdev.org
Sun, 30 Aug 2015 19:03:38 -0400
changeset 26113 9b70eda7529c
parent 26112 cb6cfbf21735
child 26114 9d6d3fee0c3f
help: distinguish sections when multiple match (issue4802)
mercurial/minirst.py
tests/test-help.t
--- a/mercurial/minirst.py	Mon Aug 31 17:21:38 2015 -0500
+++ b/mercurial/minirst.py	Sun Aug 30 19:03:38 2015 -0400
@@ -656,13 +656,17 @@
 def format(text, width=80, indent=0, keep=None, style='plain', section=None):
     """Parse and format the text according to width."""
     blocks, pruned = parse(text, indent, keep or [])
+    parents = []
     if section:
         sections = getsections(blocks)
         blocks = []
         i = 0
         while i < len(sections):
             name, nest, b = sections[i]
+            del parents[nest:]
+            parents.append(name)
             if name == section:
+                b[0]['path'] = parents[3:]
                 blocks.extend(b)
 
                 ## Also show all subnested sections
@@ -674,6 +678,14 @@
     if style == 'html':
         text = formathtml(blocks)
     else:
+        if len([b for b in blocks if b['type'] == 'definition']) > 1:
+            i = 0
+            while i < len(blocks):
+                if blocks[i]['type'] == 'definition':
+                    if 'path' in blocks[i]:
+                        blocks[i]['lines'][0] = '"%s"' % '.'.join(
+                            blocks[i]['path'])
+                i += 1
         text = ''.join(formatblock(b, width) for b in blocks)
     if keep is None:
         return text
--- a/tests/test-help.t	Mon Aug 31 17:21:38 2015 -0500
+++ b/tests/test-help.t	Sun Aug 30 19:03:38 2015 -0400
@@ -912,6 +912,16 @@
       working directory is checked out, it is equivalent to null. If an
       uncommitted merge is in progress, "." is the revision of the first parent.
 
+Test repeated config section name
+
+  $ hg help config.host
+      "http_proxy.host"
+          Host name and (optional) port of the proxy server, for example
+          "myproxy:8000".
+  
+      "smtp.host"
+          Host name of mail server, e.g. "mail.example.com".
+  
 Test templating help
 
   $ hg help templating | egrep '(desc|diffstat|firstline|nonempty)  '