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.
This commit is contained in:
Augie Fackler 2017-02-21 14:17:31 -05:00
parent dfa0dfc344
commit 01f8d0793b
2 changed files with 45 additions and 36 deletions

View File

@ -39,7 +39,6 @@ from . import (
hg,
lock as lockmod,
merge as mergemod,
minirst,
obsolete,
patch,
phases,
@ -2721,10 +2720,6 @@ def help_(ui, name=None, **opts):
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 @@ def help_(ui, name=None, **opts):
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)

View File

@ -605,3 +605,47 @@ def help_(ui, name, unknowncmd=False, full=True, subtopic=None, **opts):
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