SBB: order commands in man page by category
1 files changed, 25 insertions(+), 2 deletions(-)

M doc/gendoc.py
M doc/gendoc.py +25 -2
@@ 185,8 185,31 @@ def commandprinter(ui, cmdtable, section
         h[f] = c
     cmds = h.keys()
 
-    if True:
-        for f in sorted(cmds):
+    def helpcategory(cmd, h=h, cmdtable=cmdtable):
+        """Given a canonical command name from `cmds` (above), retrieve its
+        help category.
+        """
+        fullname = h[cmd]
+        details = cmdtable[fullname]
+        helpcategory = details[0].helpcategory
+        return helpcategory
+
+    # Print the help for each command. We present the commands grouped by
+    # category, and we use help.CATEGORY_ORDER as a guide for a helpful order
+    # in which to present the categories.
+    for category in help.CATEGORY_ORDER:
+        # Make a list of the commands in this category.
+        cmds_in_category = sorted([
+            cmd for cmd in cmds
+            if helpcategory(cmd) == category])
+        # Print a section header for the category. Skip empty categories. For
+        # now, the category header is at the same level as the headers for the
+        # commands in the category. This is because the commands are already at
+        # man page level .SS, and there is no lower level than that.
+        if cmds_in_category:
+            ui.write(sectionfunc(help.CATEGORY_NAMES[category]))
+        # Print each command in the category
+        for f in sorted(cmds_in_category):
             if f.startswith(b"debug"):
                 continue
             d = get_cmd(h[f], cmdtable)