help: include section heading if section depth changes
authortimeless <timeless@mozdev.org>
Fri, 01 Jan 2016 16:59:13 +0000
changeset 27614 1d7e824ad093
parent 27613 dffd2ed9a7c4
child 27615 4030d3b79953
help: include section heading if section depth changes This makes it easier to distinguish between: "format" -------- "usestore" ... Enabled by default. and "progress.format" Format of the progress bar.
mercurial/minirst.py
tests/test-help.t
--- a/mercurial/minirst.py	Wed Dec 30 21:07:51 2015 +0000
+++ b/mercurial/minirst.py	Fri Jan 01 16:59:13 2016 +0000
@@ -661,12 +661,32 @@
         sections = getsections(blocks)
         blocks = []
         i = 0
+        lastparents = []
+        synthetic = []
+        collapse = True
         while i < len(sections):
             name, nest, b = sections[i]
             del parents[nest:]
-            parents.append(name)
+            parents.append(i)
             if name == section:
-                b[0]['path'] = parents[3:]
+                if lastparents != parents:
+                    llen = len(lastparents)
+                    plen = len(parents)
+                    if llen and llen != plen:
+                        collapse = False
+                    s = []
+                    for j in xrange(3, plen - 1):
+                        parent = parents[j]
+                        if (j >= llen or
+                            lastparents[j] != parent):
+                            s.append(len(blocks))
+                            sec = sections[parent][2]
+                            blocks.append(sec[0])
+                            blocks.append(sec[-1])
+                    if s:
+                        synthetic.append(s)
+
+                lastparents = parents[:]
                 blocks.extend(b)
 
                 ## Also show all subnested sections
@@ -674,18 +694,19 @@
                     i += 1
                     blocks.extend(sections[i][2])
             i += 1
+        if collapse:
+            synthetic.reverse()
+            for s in synthetic:
+                path = [blocks[i]['lines'][0] for i in s]
+                real = s[-1] + 2
+                realline = blocks[real]['lines']
+                realline[0] = ('"%s"' %
+                               '.'.join(path + [realline[0]]).replace('"', ''))
+                del blocks[s[0]:real]
 
     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	Wed Dec 30 21:07:51 2015 +0000
+++ b/tests/test-help.t	Fri Jan 01 16:59:13 2016 +0000
@@ -1162,6 +1162,31 @@
   $ hg help config.type | egrep '^$'|wc -l
   \s*3 (re)
 
+Separate sections from subsections
+
+  $ hg help config.format | egrep '^    ("|-)|^\s*$' | uniq
+      "format"
+      --------
+  
+      "usegeneraldelta"
+  
+      "dotencode"
+  
+      "usefncache"
+  
+      "usestore"
+  
+      "profiling"
+      -----------
+  
+      "format"
+  
+      "progress"
+      ----------
+  
+      "format"
+  
+
 Last item in help config.*:
 
   $ hg help config.`hg help config|grep '^    "'| \