[PATCH] help: include section heading if section depth changes

timeless timeless at mozdev.org
Fri Jan 1 18:57:07 UTC 2016


# HG changeset patch
# User timeless <timeless at mozdev.org>
# Date 1451667553 0
#      Fri Jan 01 16:59:13 2016 +0000
# Node ID b225e760bdb47c0aafdfde7268905fdcefd97779
# Parent  44f717c879033f28d3f7e7dc9f34aa394d2fea3f
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.

diff --git a/mercurial/minirst.py b/mercurial/minirst.py
--- a/mercurial/minirst.py
+++ b/mercurial/minirst.py
@@ -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
diff --git a/tests/test-help.t b/tests/test-help.t
--- a/tests/test-help.t
+++ b/tests/test-help.t
@@ -1162,6 +1162,32 @@
   $ hg help config.type | egrep '^$'|wc -l
   \s*3 (re)
 
+Separate sections from subsections
+
+  $ hg help config.format | egrep '^    ("|-)|^\s*$' | uniq
+  
+      "format"
+      --------
+  
+      "usegeneraldelta"
+  
+      "usestore"
+  
+      "usefncache"
+  
+      "dotencode"
+  
+      "profiling"
+      -----------
+  
+      "format"
+  
+      "progress"
+      ----------
+  
+      "format"
+  
+
 Last item in help config.*:
 
   $ hg help config.`hg help config|grep '^    "'| \


More information about the Mercurial-devel mailing list