##// END OF EJS Templates
sshrepo: don't quote obviously safe strings (issue2983)...
sshrepo: don't quote obviously safe strings (issue2983) This restores compatibility with hg-over-ssh servers that don't parse commandlines as sh does but works ok in the most common cases.

File last commit:

r14943:d3bb825d default
r15622:86fc364c default
Show More
gendoc.py
168 lines | 4.8 KiB | text/x-python | PythonLexer
Erik Zielke
gendoc: dedent documentation from docstrings...
r12780 import os, sys, textwrap
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 # import from the live mercurial repo
sys.path.insert(0, "..")
Cédric Duval
gendoc: fall back to pure modules if C extensions are not available (issue1711)
r9130 # fall back to pure modules if required C extensions are not available
sys.path.append(os.path.join('..', 'mercurial', 'pure'))
Matt Mackall
gendoc: use demandimport
r5209 from mercurial import demandimport; demandimport.enable()
Martin Geisler
test-gendoc: add tests for all languages...
r9485 from mercurial import encoding
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 from mercurial.commands import table, globalopts
Cédric Duval
gendoc: don't translate topic strings twice (issue1760)
r9240 from mercurial.i18n import _
Matt Mackall
Generate docs for help topics
r3797 from mercurial.help import helptable
Erik Zielke
gendoc: automatically create help for default extensions....
r12781 from mercurial import extensions
Augie Fackler
globally: use safehasattr(x, '__call__') instead of hasattr(x, '__call__')
r14943 from mercurial import util
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814
def get_desc(docstr):
if not docstr:
return "", ""
# sanitize
docstr = docstr.strip("\n")
docstr = docstr.rstrip()
shortdesc = docstr.splitlines()[0].strip()
i = docstr.find("\n")
if i != -1:
Matt Mackall
many, many trivial check-code fixups
r10282 desc = docstr[i + 2:]
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 else:
Erik Zielke
gendoc: dedent documentation from docstrings...
r12780 desc = shortdesc
desc = textwrap.dedent(desc)
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 return (shortdesc, desc)
def get_opts(opts):
FUJIWARA Katsunori
help: show value requirement and multiple occurrence of options...
r11321 for opt in opts:
if len(opt) == 5:
shortopt, longopt, default, desc, optlabel = opt
else:
shortopt, longopt, default, desc = opt
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 allopts = []
if shortopt:
allopts.append("-%s" % shortopt)
if longopt:
allopts.append("--%s" % longopt)
desc += default and _(" (default: %s)") % default or ""
Thomas Arendsen Hein
coding style: fix yield used as a function
r13077 yield (", ".join(allopts), desc)
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814
Erik Zielke
gendoc: refactor get_cmd...
r12756 def get_cmd(cmd, cmdtable):
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 d = {}
Erik Zielke
gendoc: refactor get_cmd...
r12756 attr = cmdtable[cmd]
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 cmds = cmd.lstrip("^").split("|")
d['cmd'] = cmds[0]
d['aliases'] = cmd.split("|")[1:]
d['desc'] = get_desc(attr[0].__doc__)
d['opts'] = list(get_opts(attr[1]))
Matt Mackall
doc: handle shortened command synopses
r7376
s = 'hg ' + cmds[0]
if len(attr) > 2:
if not attr[2].startswith('hg'):
Ori Avtalion
gendoc: add missing space in command synopsis
r8546 s += ' ' + attr[2]
Matt Mackall
doc: handle shortened command synopses
r7376 else:
s = attr[2]
Martin Geisler
gendoc: fix synopsis...
r9622 d['synopsis'] = s.strip()
Matt Mackall
doc: handle shortened command synopses
r7376
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 return d
Martin Geisler
gendoc: move section commands to module scope
r12776 def section(ui, s):
ui.write("%s\n%s\n\n" % (s, "-" * encoding.colwidth(s)))
def subsection(ui, s):
ui.write("%s\n%s\n\n" % (s, '"' * encoding.colwidth(s)))
Erik Zielke
gendoc: automatically create help for default extensions....
r12781 def subsubsection(ui, s):
ui.write("%s\n%s\n\n" % (s, "." * encoding.colwidth(s)))
def subsubsubsection(ui, s):
ui.write("%s\n%s\n\n" % (s, "#" * encoding.colwidth(s)))
Martin Geisler
gendoc: move section commands to module scope
r12776
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 def show_doc(ui):
# print options
Martin Geisler
gendoc: move section commands to module scope
r12776 section(ui, _("Options"))
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 for optstr, desc in get_opts(globalopts):
Martin Geisler
gendoc: re-add indentation to global option table...
r12812 ui.write("%s\n %s\n\n" % (optstr, desc))
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814
# print cmds
Martin Geisler
gendoc: move section commands to module scope
r12776 section(ui, _("Commands"))
Erik Zielke
gendoc: automatically create help for default extensions....
r12781 commandprinter(ui, table, subsection)
Erik Zielke
gendoc: refactor get_cmd...
r12756
# print topics
for names, sec, doc in helptable:
Martin Geisler
gendoc: config help topic is in hgrc.5, do not include it in hg.1
r14461 if names[0] == "config":
# The config help topic is included in the hgrc.5 man
# page.
continue
Erik Zielke
gendoc: refactor get_cmd...
r12756 for name in names:
ui.write(".. _%s:\n" % name)
ui.write("\n")
Martin Geisler
gendoc: move section commands to module scope
r12776 section(ui, sec)
Augie Fackler
globally: use safehasattr(x, '__call__') instead of hasattr(x, '__call__')
r14943 if util.safehasattr(doc, '__call__'):
Erik Zielke
gendoc: refactor get_cmd...
r12756 doc = doc()
ui.write(doc)
ui.write("\n")
Erik Zielke
gendoc: automatically create help for default extensions....
r12781 section(ui, _("Extensions"))
Martin Geisler
merge-tools: fixed typos...
r12804 ui.write(_("This section contains help for extensions that are distributed "
Erik Zielke
gendoc: automatically create help for default extensions....
r12781 "together with Mercurial. Help for other extensions is available "
"in the help system."))
ui.write("\n\n"
".. contents::\n"
" :class: htmlonly\n"
" :local:\n"
" :depth: 1\n\n")
for extensionname in sorted(allextensionnames()):
mod = extensions.load(None, extensionname, None)
subsection(ui, extensionname)
ui.write("%s\n\n" % mod.__doc__)
cmdtable = getattr(mod, 'cmdtable', None)
if cmdtable:
subsubsection(ui, _('Commands'))
commandprinter(ui, cmdtable, subsubsubsection)
def commandprinter(ui, cmdtable, sectionfunc):
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 h = {}
Erik Zielke
gendoc: refactor get_cmd...
r12756 for c, attr in cmdtable.items():
Christian Ebert
gendoc: fix indentation
r6488 f = c.split("|")[0]
f = f.lstrip("^")
h[f] = c
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 cmds = h.keys()
cmds.sort()
for f in cmds:
Matt Mackall
many, many trivial check-code fixups
r10282 if f.startswith("debug"):
continue
Erik Zielke
gendoc: refactor get_cmd...
r12756 d = get_cmd(h[f], cmdtable)
Erik Zielke
gendoc: automatically create help for default extensions....
r12781 sectionfunc(ui, d['cmd'])
Christian Ebert
gendoc: fix indentation
r6488 # synopsis
Martin Geisler
gendoc: support multi-line synopses
r12813 ui.write("::\n\n")
synopsislines = d['synopsis'].splitlines()
for line in synopsislines:
# some commands (such as rebase) have a multi-line
# synopsis
Martin Geisler
gendoc: do not strip 'hg ' from synopsis...
r12814 ui.write(" %s\n" % line)
Martin Geisler
gendoc: support multi-line synopses
r12813 ui.write('\n')
Christian Ebert
gendoc: fix indentation
r6488 # description
ui.write("%s\n\n" % d['desc'][1])
# options
opt_output = list(d['opts'])
if opt_output:
opts_len = max([len(line[0]) for line in opt_output])
Javi Merino
doc: Capitalize the "options" header of mercurial commands
r13345 ui.write(_("Options:\n\n"))
Christian Ebert
gendoc: fix indentation
r6488 for optstr, desc in opt_output:
if desc:
s = "%-*s %s" % (opts_len, optstr, desc)
else:
s = optstr
Erik Zielke
gendoc: dedent documentation from docstrings...
r12780 ui.write("%s\n" % s)
Christian Ebert
gendoc: fix indentation
r6488 ui.write("\n")
# aliases
if d['aliases']:
ui.write(_(" aliases: %s\n\n") % " ".join(d['aliases']))
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814
Matt Mackall
Generate docs for help topics
r3797
Erik Zielke
gendoc: automatically create help for default extensions....
r12781 def allextensionnames():
Matt Mackall
extensions: drop maxlength from enabled and disabled...
r14316 return extensions.enabled().keys() + extensions.disabled().keys()
Erik Zielke
gendoc: automatically create help for default extensions....
r12781
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 if __name__ == "__main__":
show_doc(sys.stdout)