doc/check-seclevel.py
branchstable
changeset 26813 b66e3ca0b90c
parent 26413 e0c572d4d112
child 27221 ab776610fc6d
--- a/doc/check-seclevel.py	Thu Oct 08 23:24:38 2015 +0900
+++ b/doc/check-seclevel.py	Tue Oct 20 15:59:10 2015 -0500
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 #
-# checkseclevel - checking section title levels in each online help documents
+# checkseclevel - checking section title levels in each online help document
 
 import sys, os
 import optparse
@@ -14,15 +14,7 @@
 from mercurial.help import helptable
 from mercurial import extensions
 from mercurial import minirst
-
-_verbose = False
-
-def verbose(msg):
-    if _verbose:
-        print msg
-
-def error(msg):
-    sys.stderr.write('%s\n' % msg)
+from mercurial import ui as uimod
 
 level2mark = ['"', '=', '-', '.', '#']
 reservedmarks = ['"']
@@ -37,12 +29,12 @@
 initlevel_ext = 1
 initlevel_ext_cmd = 3
 
-def showavailables(initlevel):
-    error('    available marks and order of them in this help: %s' %
-          (', '.join(['%r' % (m * 4) for m in level2mark[initlevel + 1:]])))
+def showavailables(ui, initlevel):
+    ui.warn(('    available marks and order of them in this help: %s\n') %
+            (', '.join(['%r' % (m * 4) for m in level2mark[initlevel + 1:]])))
 
-def checkseclevel(doc, name, initlevel):
-    verbose('checking "%s"' % name)
+def checkseclevel(ui, doc, name, initlevel):
+    ui.note(('checking "%s"\n') % name)
     blocks, pruned = minirst.parse(doc, 0, ['verbose'])
     errorcnt = 0
     curlevel = initlevel
@@ -52,66 +44,66 @@
         mark = block['underline']
         title = block['lines'][0]
         if (mark not in mark2level) or (mark2level[mark] <= initlevel):
-            error('invalid section mark %r for "%s" of %s' %
-                  (mark * 4, title, name))
-            showavailables(initlevel)
+            ui.warn(('invalid section mark %r for "%s" of %s\n') %
+                    (mark * 4, title, name))
+            showavailables(ui, initlevel)
             errorcnt += 1
             continue
         nextlevel = mark2level[mark]
         if curlevel < nextlevel and curlevel + 1 != nextlevel:
-            error('gap of section level at "%s" of %s' %
-                  (title, name))
-            showavailables(initlevel)
+            ui.warn(('gap of section level at "%s" of %s\n') %
+                    (title, name))
+            showavailables(ui, initlevel)
             errorcnt += 1
             continue
-        verbose('appropriate section level for "%s %s"' %
+        ui.note(('appropriate section level for "%s %s"\n') %
                 (mark * (nextlevel * 2), title))
         curlevel = nextlevel
 
     return errorcnt
 
-def checkcmdtable(cmdtable, namefmt, initlevel):
+def checkcmdtable(ui, cmdtable, namefmt, initlevel):
     errorcnt = 0
     for k, entry in cmdtable.items():
         name = k.split("|")[0].lstrip("^")
         if not entry[0].__doc__:
-            verbose('skip checking %s: no help document' %
+            ui.note(('skip checking %s: no help document\n') %
                     (namefmt % name))
             continue
-        errorcnt += checkseclevel(entry[0].__doc__,
+        errorcnt += checkseclevel(ui, entry[0].__doc__,
                                   namefmt % name,
                                   initlevel)
     return errorcnt
 
-def checkhghelps():
+def checkhghelps(ui):
     errorcnt = 0
     for names, sec, doc in helptable:
         if callable(doc):
-            doc = doc()
-        errorcnt += checkseclevel(doc,
+            doc = doc(ui)
+        errorcnt += checkseclevel(ui, doc,
                                   '%s help topic' % names[0],
                                   initlevel_topic)
 
-    errorcnt += checkcmdtable(table, '%s command', initlevel_cmd)
+    errorcnt += checkcmdtable(ui, table, '%s command', initlevel_cmd)
 
     for name in sorted(extensions.enabled().keys() +
                        extensions.disabled().keys()):
         mod = extensions.load(None, name, None)
         if not mod.__doc__:
-            verbose('skip checking %s extension: no help document' % name)
+            ui.note(('skip checking %s extension: no help document\n') % name)
             continue
-        errorcnt += checkseclevel(mod.__doc__,
+        errorcnt += checkseclevel(ui, mod.__doc__,
                                   '%s extension' % name,
                                   initlevel_ext)
 
         cmdtable = getattr(mod, 'cmdtable', None)
         if cmdtable:
-            errorcnt += checkcmdtable(cmdtable,
+            errorcnt += checkcmdtable(ui, cmdtable,
                                       '%s command of ' + name + ' extension',
                                       initlevel_ext_cmd)
     return errorcnt
 
-def checkfile(filename, initlevel):
+def checkfile(ui, filename, initlevel):
     if filename == '-':
         filename = 'stdin'
         doc = sys.stdin.read()
@@ -122,11 +114,11 @@
         finally:
             fp.close()
 
-    verbose('checking input from %s with initlevel %d' %
+    ui.note(('checking input from %s with initlevel %d\n') %
             (filename, initlevel))
-    return checkseclevel(doc, 'input from %s' % filename, initlevel)
+    return checkseclevel(ui, doc, 'input from %s' % filename, initlevel)
 
-if __name__ == "__main__":
+def main():
     optparser = optparse.OptionParser("""%prog [options]
 
 This checks all help documents of Mercurial (topics, commands,
@@ -159,11 +151,15 @@
 
     (options, args) = optparser.parse_args()
 
-    _verbose = options.verbose
+    ui = uimod.ui()
+    ui.setconfig('ui', 'verbose', options.verbose, '--verbose')
 
     if options.file:
-        if checkfile(options.file, options.initlevel):
+        if checkfile(ui, options.file, options.initlevel):
             sys.exit(1)
     else:
-        if checkhghelps():
+        if checkhghelps(ui):
             sys.exit(1)
+
+if __name__ == "__main__":
+    main()