##// END OF EJS Templates
merge: cache unknown dir checks (issue5716)...
merge: cache unknown dir checks (issue5716) As mentioned in D1222, the recent pathconflicts change regresses update performance in large repositories when many files are being updated. To mitigate this, we introduce two caches of directories that have already found to be either: - unknown directories, but which are not aliased by files and so don't need to be checked if they are files again; and - missing directores, which cannot cause path conflicts, and cannot contain a file that causes a path conflict. When checking the paths of a file, testing against this caches means we can skip tests that involve touching the filesystem. Differential Revision: https://phab.mercurial-scm.org/D1224

File last commit:

r32336:ff874d34 default
r35181:b8596235 stable
Show More
gendoc.py
228 lines | 6.6 KiB | text/x-python | PythonLexer
timeless
doc: add execute bit and fix shbang line for gendoc.py
r27496 #!/usr/bin/env python
Takumi IINO
gendoc: dispatch print document content by commandline arguments...
r19425 """usage: %s DOC ...
where DOC is the name of a document
"""
Pulkit Goyal
py3: make gendoc use absolute_import...
r28966 from __future__ import absolute_import
import os
import sys
import textwrap
Gregory Szorc
doc: make gendoc.py module import policy aware...
r27330
# This script is executed during installs and may not have C extensions
# available. Relax C module requirements.
os.environ['HGMODULEPOLICY'] = 'allow'
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 # import from the live mercurial repo
sys.path.insert(0, "..")
Matt Mackall
gendoc: use demandimport
r5209 from mercurial import demandimport; demandimport.enable()
Yuya Nishihara
gendoc: make sure locale path is set before loading any modules...
r32336 # Load util so that the locale path is set by i18n.setdatapath() before
# calling _().
from mercurial import util
util.datapath
Pulkit Goyal
py3: make gendoc use absolute_import...
r28966 from mercurial import (
commands,
extensions,
help,
minirst,
ui as uimod,
)
from mercurial.i18n import (
gettext,
_,
)
table = commands.table
globalopts = commands.globalopts
helptable = help.helptable
loaddoc = help.loaddoc
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
FUJIWARA Katsunori
doc: show details of command options in pages generated by docutils...
r20081 optlabel = _("VALUE")
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 allopts = []
if shortopt:
allopts.append("-%s" % shortopt)
if longopt:
allopts.append("--%s" % longopt)
FUJIWARA Katsunori
doc: show details of command options in pages generated by docutils...
r20081 if isinstance(default, list):
allopts[-1] += " <%s[+]>" % optlabel
elif (default is not None) and not isinstance(default, bool):
allopts[-1] += " <%s>" % optlabel
Simon Heimberg
doc: gendoc.py creates valid output for option descriptions with newlines...
r20655 if '\n' in desc:
# only remove line breaks and indentation
desc = ' '.join(l.lstrip() for l in desc.split('\n'))
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 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:]
Takumi IINO
gendoc: make commnd __doc__ and extension __doc__ as translatable...
r19231 d['desc'] = get_desc(gettext(attr[0].__doc__))
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 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
Takumi IINO
gendoc: rename to showdoc from show_doc...
r19423 def showdoc(ui):
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814 # print options
Dan Villiom Podlaski Christiansen
help: use a full header for topic titles...
r18748 ui.write(minirst.section(_("Options")))
FUJIWARA Katsunori
doc: show details of command options in pages generated by docutils...
r20081 multioccur = False
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))
FUJIWARA Katsunori
doc: show details of command options in pages generated by docutils...
r20081 if optstr.endswith("[+]>"):
multioccur = True
if multioccur:
ui.write(_("\n[+] marked option can be specified multiple times\n"))
ui.write("\n")
Benoit Boissinot
generate hg manpage from commands.py docstring...
r1814
# print cmds
Dan Villiom Podlaski Christiansen
help: use a full header for topic titles...
r18748 ui.write(minirst.section(_("Commands")))
commandprinter(ui, table, minirst.subsection)
Erik Zielke
gendoc: refactor get_cmd...
r12756
Takumi IINO
gendoc: extract print help topics into a dedicated function...
r19233 # print help topics
# The config help topic is included in the hgrc.5 man page.
helpprinter(ui, helptable, minirst.section, exclude=['config'])
Erik Zielke
gendoc: refactor get_cmd...
r12756
Dan Villiom Podlaski Christiansen
help: use a full header for topic titles...
r18748 ui.write(minirst.section(_("Extensions")))
Brodie Rao
cleanup: eradicate long lines
r16683 ui.write(_("This section contains help for extensions that are "
"distributed together with Mercurial. Help for other "
"extensions is available in the help system."))
FUJIWARA Katsunori
check-code: detect "missing _() in ui message" more exactly...
r29397 ui.write(("\n\n"
Erik Zielke
gendoc: automatically create help for default extensions....
r12781 ".. contents::\n"
" :class: htmlonly\n"
" :local:\n"
FUJIWARA Katsunori
check-code: detect "missing _() in ui message" more exactly...
r29397 " :depth: 1\n\n"))
Erik Zielke
gendoc: automatically create help for default extensions....
r12781
for extensionname in sorted(allextensionnames()):
Jun Wu
mercurial: pass ui to extensions.load (issue5007)...
r27660 mod = extensions.load(ui, extensionname, None)
Dan Villiom Podlaski Christiansen
help: use a full header for topic titles...
r18748 ui.write(minirst.subsection(extensionname))
Takumi IINO
gendoc: make commnd __doc__ and extension __doc__ as translatable...
r19231 ui.write("%s\n\n" % gettext(mod.__doc__))
Erik Zielke
gendoc: automatically create help for default extensions....
r12781 cmdtable = getattr(mod, 'cmdtable', None)
if cmdtable:
Dan Villiom Podlaski Christiansen
help: use a full header for topic titles...
r18748 ui.write(minirst.subsubsection(_('Commands')))
commandprinter(ui, cmdtable, minirst.subsubsubsection)
Erik Zielke
gendoc: automatically create help for default extensions....
r12781
Takumi IINO
gendoc: add showtopic...
r19424 def showtopic(ui, topic):
extrahelptable = [
(["common"], '', loaddoc('common')),
(["hg.1"], '', loaddoc('hg.1')),
Sean Farley
hg-ssh: copy doc string to man page...
r29090 (["hg-ssh.8"], '', loaddoc('hg-ssh.8')),
Takumi IINO
gendoc: add showtopic...
r19424 (["hgignore.5"], '', loaddoc('hgignore.5')),
(["hgrc.5"], '', loaddoc('hgrc.5')),
(["hgignore.5.gendoc"], '', loaddoc('hgignore')),
(["hgrc.5.gendoc"], '', loaddoc('config')),
]
helpprinter(ui, helptable + extrahelptable, None, include=[topic])
Takumi IINO
gendoc: extract print help topics into a dedicated function...
r19233 def helpprinter(ui, helptable, sectionfunc, include=[], exclude=[]):
for names, sec, doc in helptable:
if exclude and names[0] in exclude:
continue
if include and names[0] not in include:
continue
for name in names:
ui.write(".. _%s:\n" % name)
ui.write("\n")
if sectionfunc:
ui.write(sectionfunc(sec))
Augie Fackler
gendoc: restore use of callable() since it was readded in Python 3.2
r21793 if callable(doc):
Yuya Nishihara
help: pass around ui to doc loader (API)...
r26413 doc = doc(ui)
Takumi IINO
gendoc: extract print help topics into a dedicated function...
r19233 ui.write(doc)
ui.write("\n")
Erik Zielke
gendoc: automatically create help for default extensions....
r12781 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)
Dan Villiom Podlaski Christiansen
help: use a full header for topic titles...
r18748 ui.write(sectionfunc(d['cmd']))
FUJIWARA Katsunori
doc: show short description of each commands in generated documents...
r20689 # short description
ui.write(d['desc'][0])
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"))
FUJIWARA Katsunori
doc: show details of command options in pages generated by docutils...
r20081 multioccur = False
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)
FUJIWARA Katsunori
doc: show details of command options in pages generated by docutils...
r20081 if optstr.endswith("[+]>"):
multioccur = True
if multioccur:
ui.write(_("\n[+] marked option can be specified"
" multiple times\n"))
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__":
Takumi IINO
gendoc: dispatch print document content by commandline arguments...
r19425 doc = 'hg.1.gendoc'
if len(sys.argv) > 1:
doc = sys.argv[1]
Yuya Nishihara
ui: factor out ui.load() to create a ui without loading configs (API)...
r30559 ui = uimod.ui.load()
Takumi IINO
gendoc: dispatch print document content by commandline arguments...
r19425 if doc == 'hg.1.gendoc':
Yuya Nishihara
gendoc: use real ui in place of stdout...
r26412 showdoc(ui)
Takumi IINO
gendoc: dispatch print document content by commandline arguments...
r19425 else:
Yuya Nishihara
gendoc: use real ui in place of stdout...
r26412 showtopic(ui, sys.argv[1])