help: move rst formatting of help documents into help.py
This slight refactor will help me improve the 'unknown command'
experience in our new glorious pager future.
--- a/mercurial/commands.py Tue Feb 21 11:06:02 2017 -0500
+++ b/mercurial/commands.py Tue Feb 21 14:17:31 2017 -0500
@@ -39,7 +39,6 @@
hg,
lock as lockmod,
merge as mergemod,
- minirst,
obsolete,
patch,
phases,
@@ -2721,10 +2720,6 @@
Returns 0 if successful.
"""
- textwidth = ui.configint('ui', 'textwidth', 78)
- termwidth = ui.termwidth() - 2
- if textwidth <= 0 or termwidth < textwidth:
- textwidth = termwidth
keep = opts.get('system') or []
if len(keep) == 0:
@@ -2740,37 +2735,7 @@
if ui.verbose:
keep.append('verbose')
- fullname = name
- section = None
- subtopic = None
- if name and '.' in name:
- name, remaining = name.split('.', 1)
- remaining = encoding.lower(remaining)
- if '.' in remaining:
- subtopic, section = remaining.split('.', 1)
- else:
- if name in help.subtopics:
- subtopic = remaining
- else:
- section = remaining
-
- text = help.help_(ui, name, subtopic=subtopic, **opts)
-
- formatted, pruned = minirst.format(text, textwidth, keep=keep,
- section=section)
-
- # We could have been given a weird ".foo" section without a name
- # to look for, or we could have simply failed to found "foo.bar"
- # because bar isn't a section of foo
- if section and not (formatted and name):
- raise error.Abort(_("help section not found: %s") % fullname)
-
- if 'verbose' in pruned:
- keep.append('omitted')
- else:
- keep.append('notomitted')
- formatted, pruned = minirst.format(text, textwidth, keep=keep,
- section=section)
+ formatted = help.formattedhelp(ui, name, keep=keep, **opts)
ui.pager('help')
ui.write(formatted)
--- a/mercurial/help.py Tue Feb 21 11:06:02 2017 -0500
+++ b/mercurial/help.py Tue Feb 21 14:17:31 2017 -0500
@@ -605,3 +605,47 @@
rst.extend(helplist(None, **opts))
return ''.join(rst)
+
+def formattedhelp(ui, name, keep=None, unknowncmd=False, full=True, **opts):
+ """get help for a given topic (as a dotted name) as rendered rst
+
+ Either returns the rendered help text or raises an exception.
+ """
+ if keep is None:
+ keep = []
+ fullname = name
+ section = None
+ subtopic = None
+ if name and '.' in name:
+ name, remaining = name.split('.', 1)
+ remaining = encoding.lower(remaining)
+ if '.' in remaining:
+ subtopic, section = remaining.split('.', 1)
+ else:
+ if name in subtopics:
+ subtopic = remaining
+ else:
+ section = remaining
+ textwidth = ui.configint('ui', 'textwidth', 78)
+ termwidth = ui.termwidth() - 2
+ if textwidth <= 0 or termwidth < textwidth:
+ textwidth = termwidth
+ text = help_(ui, name,
+ subtopic=subtopic, unknowncmd=unknowncmd, full=full, **opts)
+
+ formatted, pruned = minirst.format(text, textwidth, keep=keep,
+ section=section)
+
+ # We could have been given a weird ".foo" section without a name
+ # to look for, or we could have simply failed to found "foo.bar"
+ # because bar isn't a section of foo
+ if section and not (formatted and name):
+ raise error.Abort(_("help section not found: %s") % fullname)
+
+ if 'verbose' in pruned:
+ keep.append('omitted')
+ else:
+ keep.append('notomitted')
+ formatted, pruned = minirst.format(text, textwidth, keep=keep,
+ section=section)
+ return formatted