doc/gendoc.py
author Matt Harbison <matt_harbison@yahoo.com>
Mon, 06 Jan 2025 13:29:42 -0500
changeset 52636 0e11e532c958
parent 52017 2a875530a023
child 52656 3e84e001b6c1
permissions -rwxr-xr-x
style: use `ui.xxxnoi18n()` methods instead of wrapping msg in `()` These aliases were introduced back in 5209fc94b982, because `black` was going to strip away the extra parentheses, but they're needed to subvert `test-check-code.t`. That obviously changed at some point, but `pyupgrade`[1] also strips these out. While that tool is very useful in adapting code to modern standards, it lacks the ability to turn off most conversions, so constantly reverting these is a pain. Even without that, the code is more understandable with an explicit declaration. It also would have been an easy typo to miss the leading `_` in the i18n method `_()` that the checker is looking for, and fail to detect the problem. The `contrib/perf.py` code just uses a local alias to the original methods because (IIUC), this tries to be compatible with old versions of hg. But practically, these noi18n aliases were added before useful py3 support, and at some point, it won't be feasible to do py2 benchmarking anymore, and maybe this module can be cleaned up some. [1] https://github.com/asottile/pyupgrade
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
45830
c102b704edb5 global: use python3 in shebangs
Gregory Szorc <gregory.szorc@gmail.com>
parents: 44975
diff changeset
     1
#!/usr/bin/env python3
19425
81fbd4e66ff5 gendoc: dispatch print document content by commandline arguments
Takumi IINO <trot.thunder@gmail.com>
parents: 19424
diff changeset
     2
"""usage: %s DOC ...
81fbd4e66ff5 gendoc: dispatch print document content by commandline arguments
Takumi IINO <trot.thunder@gmail.com>
parents: 19424
diff changeset
     3
81fbd4e66ff5 gendoc: dispatch print document content by commandline arguments
Takumi IINO <trot.thunder@gmail.com>
parents: 19424
diff changeset
     4
where DOC is the name of a document
81fbd4e66ff5 gendoc: dispatch print document content by commandline arguments
Takumi IINO <trot.thunder@gmail.com>
parents: 19424
diff changeset
     5
"""
81fbd4e66ff5 gendoc: dispatch print document content by commandline arguments
Takumi IINO <trot.thunder@gmail.com>
parents: 19424
diff changeset
     6
28966
ea1fab5293ca py3: make gendoc use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27660
diff changeset
     7
ea1fab5293ca py3: make gendoc use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27660
diff changeset
     8
import os
ea1fab5293ca py3: make gendoc use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27660
diff changeset
     9
import sys
ea1fab5293ca py3: make gendoc use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27660
diff changeset
    10
import textwrap
52016
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
    11
import argparse
27330
6fbf1159a85a doc: make gendoc.py module import policy aware
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26413
diff changeset
    12
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
    13
try:
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
    14
    import msvcrt
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
    15
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
    16
    msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
    17
    msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY)
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
    18
except ImportError:
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
    19
    pass
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
    20
27330
6fbf1159a85a doc: make gendoc.py module import policy aware
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26413
diff changeset
    21
# This script is executed during installs and may not have C extensions
6fbf1159a85a doc: make gendoc.py module import policy aware
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26413
diff changeset
    22
# available. Relax C module requirements.
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
    23
os.environ['HGMODULEPOLICY'] = 'allow'
1814
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
    24
# import from the live mercurial repo
49151
1b6e381521c5 doc: use an absolute path in sys.path to work around a python DLL loading bug
Matt Harbison <matt_harbison@yahoo.com>
parents: 46518
diff changeset
    25
sys.path.insert(0, os.path.abspath(".."))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
    26
from mercurial import demandimport
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
    27
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
    28
demandimport.enable()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
    29
28966
ea1fab5293ca py3: make gendoc use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27660
diff changeset
    30
from mercurial import (
ea1fab5293ca py3: make gendoc use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27660
diff changeset
    31
    commands,
41030
c0865f3da285 py3: byteify sys.argv in gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 41004
diff changeset
    32
    encoding,
28966
ea1fab5293ca py3: make gendoc use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27660
diff changeset
    33
    extensions,
46516
921e1253c8ba gendoc: support defaults on customopts a bit better
Kyle Lippincott <spectral@google.com>
parents: 45830
diff changeset
    34
    fancyopts,
28966
ea1fab5293ca py3: make gendoc use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27660
diff changeset
    35
    help,
ea1fab5293ca py3: make gendoc use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27660
diff changeset
    36
    minirst,
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
    37
    pycompat,
28966
ea1fab5293ca py3: make gendoc use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27660
diff changeset
    38
    ui as uimod,
ea1fab5293ca py3: make gendoc use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27660
diff changeset
    39
)
ea1fab5293ca py3: make gendoc use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27660
diff changeset
    40
from mercurial.i18n import (
ea1fab5293ca py3: make gendoc use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27660
diff changeset
    41
    gettext,
ea1fab5293ca py3: make gendoc use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27660
diff changeset
    42
    _,
ea1fab5293ca py3: make gendoc use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27660
diff changeset
    43
)
44975
1a4b9b602e54 py3: fix broken man page generation, it was generating `(default: NUL*)`
Kyle Lippincott <spectral@google.com>
parents: 43673
diff changeset
    44
from mercurial.utils import stringutil
28966
ea1fab5293ca py3: make gendoc use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27660
diff changeset
    45
ea1fab5293ca py3: make gendoc use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27660
diff changeset
    46
table = commands.table
ea1fab5293ca py3: make gendoc use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27660
diff changeset
    47
globalopts = commands.globalopts
ea1fab5293ca py3: make gendoc use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27660
diff changeset
    48
helptable = help.helptable
ea1fab5293ca py3: make gendoc use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27660
diff changeset
    49
loaddoc = help.loaddoc
1814
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
    50
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
    51
1814
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
    52
def get_desc(docstr):
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
    53
    if not docstr:
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
    54
        return b"", b""
1814
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
    55
    # sanitize
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
    56
    docstr = docstr.strip(b"\n")
1814
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
    57
    docstr = docstr.rstrip()
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
    58
    shortdesc = docstr.splitlines()[0].strip()
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
    59
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
    60
    i = docstr.find(b"\n")
1814
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
    61
    if i != -1:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
    62
        desc = docstr[i + 2 :]
1814
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
    63
    else:
12780
bdc1cf692447 gendoc: dedent documentation from docstrings
Erik Zielke <ez@aragost.com>
parents: 12777
diff changeset
    64
        desc = shortdesc
bdc1cf692447 gendoc: dedent documentation from docstrings
Erik Zielke <ez@aragost.com>
parents: 12777
diff changeset
    65
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
    66
    desc = textwrap.dedent(desc.decode('latin1')).encode('latin1')
12780
bdc1cf692447 gendoc: dedent documentation from docstrings
Erik Zielke <ez@aragost.com>
parents: 12777
diff changeset
    67
1814
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
    68
    return (shortdesc, desc)
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
    69
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
    70
1814
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
    71
def get_opts(opts):
11321
40c06bbf58be help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 10282
diff changeset
    72
    for opt in opts:
40c06bbf58be help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 10282
diff changeset
    73
        if len(opt) == 5:
40c06bbf58be help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 10282
diff changeset
    74
            shortopt, longopt, default, desc, optlabel = opt
40c06bbf58be help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 10282
diff changeset
    75
        else:
40c06bbf58be help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 10282
diff changeset
    76
            shortopt, longopt, default, desc = opt
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
    77
            optlabel = _(b"VALUE")
1814
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
    78
        allopts = []
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
    79
        if shortopt:
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
    80
            allopts.append(b"-%s" % shortopt)
1814
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
    81
        if longopt:
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
    82
            allopts.append(b"--%s" % longopt)
20081
93f9d11603d8 doc: show details of command options in pages generated by docutils
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19425
diff changeset
    83
        if isinstance(default, list):
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
    84
            allopts[-1] += b" <%s[+]>" % optlabel
20081
93f9d11603d8 doc: show details of command options in pages generated by docutils
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19425
diff changeset
    85
        elif (default is not None) and not isinstance(default, bool):
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
    86
            allopts[-1] += b" <%s>" % optlabel
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
    87
        if b'\n' in desc:
20655
37f3be9d1541 doc: gendoc.py creates valid output for option descriptions with newlines
Simon Heimberg <simohe@besonet.ch>
parents: 20081
diff changeset
    88
            # only remove line breaks and indentation
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
    89
            desc = b' '.join(l.lstrip() for l in desc.split(b'\n'))
46516
921e1253c8ba gendoc: support defaults on customopts a bit better
Kyle Lippincott <spectral@google.com>
parents: 45830
diff changeset
    90
        if isinstance(default, fancyopts.customopt):
921e1253c8ba gendoc: support defaults on customopts a bit better
Kyle Lippincott <spectral@google.com>
parents: 45830
diff changeset
    91
            default = default.getdefaultvalue()
44975
1a4b9b602e54 py3: fix broken man page generation, it was generating `(default: NUL*)`
Kyle Lippincott <spectral@google.com>
parents: 43673
diff changeset
    92
        if default:
1a4b9b602e54 py3: fix broken man page generation, it was generating `(default: NUL*)`
Kyle Lippincott <spectral@google.com>
parents: 43673
diff changeset
    93
            default = stringutil.forcebytestr(default)
1a4b9b602e54 py3: fix broken man page generation, it was generating `(default: NUL*)`
Kyle Lippincott <spectral@google.com>
parents: 43673
diff changeset
    94
            desc += _(b" (default: %s)") % default
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
    95
        yield (b", ".join(allopts), desc)
1814
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
    96
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
    97
12756
13f0acfa974a gendoc: refactor get_cmd
Erik Zielke <ez@aragost.com>
parents: 11570
diff changeset
    98
def get_cmd(cmd, cmdtable):
1814
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
    99
    d = {}
12756
13f0acfa974a gendoc: refactor get_cmd
Erik Zielke <ez@aragost.com>
parents: 11570
diff changeset
   100
    attr = cmdtable[cmd]
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
   101
    cmds = cmd.lstrip(b"^").split(b"|")
1814
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
   102
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
   103
    d[b'cmd'] = cmds[0]
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
   104
    d[b'aliases'] = cmd.split(b"|")[1:]
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
   105
    d[b'desc'] = get_desc(gettext(pycompat.getdoc(attr[0])))
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
   106
    d[b'opts'] = list(get_opts(attr[1]))
7376
fc06bd17c985 doc: handle shortened command synopses
Matt Mackall <mpm@selenic.com>
parents: 7014
diff changeset
   107
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
   108
    s = b'hg ' + cmds[0]
7376
fc06bd17c985 doc: handle shortened command synopses
Matt Mackall <mpm@selenic.com>
parents: 7014
diff changeset
   109
    if len(attr) > 2:
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
   110
        if not attr[2].startswith(b'hg'):
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
   111
            s += b' ' + attr[2]
7376
fc06bd17c985 doc: handle shortened command synopses
Matt Mackall <mpm@selenic.com>
parents: 7014
diff changeset
   112
        else:
fc06bd17c985 doc: handle shortened command synopses
Matt Mackall <mpm@selenic.com>
parents: 7014
diff changeset
   113
            s = attr[2]
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
   114
    d[b'synopsis'] = s.strip()
7376
fc06bd17c985 doc: handle shortened command synopses
Matt Mackall <mpm@selenic.com>
parents: 7014
diff changeset
   115
1814
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
   116
    return d
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
   117
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   118
52016
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   119
def showdoc(ui, debugcmds=False):
1814
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
   120
    # print options
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
   121
    ui.write(minirst.section(_(b"Options")))
20081
93f9d11603d8 doc: show details of command options in pages generated by docutils
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19425
diff changeset
   122
    multioccur = False
1814
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
   123
    for optstr, desc in get_opts(globalopts):
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
   124
        ui.write(b"%s\n    %s\n\n" % (optstr, desc))
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
   125
        if optstr.endswith(b"[+]>"):
20081
93f9d11603d8 doc: show details of command options in pages generated by docutils
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19425
diff changeset
   126
            multioccur = True
93f9d11603d8 doc: show details of command options in pages generated by docutils
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19425
diff changeset
   127
    if multioccur:
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
   128
        ui.write(_(b"\n[+] marked option can be specified multiple times\n"))
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
   129
        ui.write(b"\n")
1814
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
   130
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
   131
    # print cmds
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
   132
    ui.write(minirst.section(_(b"Commands")))
52016
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   133
    commandprinter(
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   134
        ui,
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   135
        table,
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   136
        minirst.subsection,
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   137
        minirst.subsubsection,
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   138
        debugcmds=debugcmds,
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   139
    )
12756
13f0acfa974a gendoc: refactor get_cmd
Erik Zielke <ez@aragost.com>
parents: 11570
diff changeset
   140
19233
81d9a7f6f2e7 gendoc: extract print help topics into a dedicated function
Takumi IINO <trot.thunder@gmail.com>
parents: 19231
diff changeset
   141
    # print help topics
81d9a7f6f2e7 gendoc: extract print help topics into a dedicated function
Takumi IINO <trot.thunder@gmail.com>
parents: 19231
diff changeset
   142
    # The config help topic is included in the hgrc.5 man page.
52016
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   143
    topics = findtopics(helptable, exclude=[b'config'])
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   144
    helpprinter(ui, topics, minirst.section)
12756
13f0acfa974a gendoc: refactor get_cmd
Erik Zielke <ez@aragost.com>
parents: 11570
diff changeset
   145
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
   146
    ui.write(minirst.section(_(b"Extensions")))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   147
    ui.write(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   148
        _(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   149
            b"This section contains help for extensions that are "
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   150
            b"distributed together with Mercurial. Help for other "
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   151
            b"extensions is available in the help system."
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   152
        )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   153
    )
52636
0e11e532c958 style: use `ui.xxxnoi18n()` methods instead of wrapping msg in `()`
Matt Harbison <matt_harbison@yahoo.com>
parents: 52017
diff changeset
   154
    ui.writenoi18n(
0e11e532c958 style: use `ui.xxxnoi18n()` methods instead of wrapping msg in `()`
Matt Harbison <matt_harbison@yahoo.com>
parents: 52017
diff changeset
   155
        b"\n\n"
0e11e532c958 style: use `ui.xxxnoi18n()` methods instead of wrapping msg in `()`
Matt Harbison <matt_harbison@yahoo.com>
parents: 52017
diff changeset
   156
        b".. contents::\n"
0e11e532c958 style: use `ui.xxxnoi18n()` methods instead of wrapping msg in `()`
Matt Harbison <matt_harbison@yahoo.com>
parents: 52017
diff changeset
   157
        b"   :class: htmlonly\n"
0e11e532c958 style: use `ui.xxxnoi18n()` methods instead of wrapping msg in `()`
Matt Harbison <matt_harbison@yahoo.com>
parents: 52017
diff changeset
   158
        b"   :local:\n"
0e11e532c958 style: use `ui.xxxnoi18n()` methods instead of wrapping msg in `()`
Matt Harbison <matt_harbison@yahoo.com>
parents: 52017
diff changeset
   159
        b"   :depth: 1\n\n"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   160
    )
12781
0d09991f91ee gendoc: automatically create help for default extensions.
Erik Zielke <ez@aragost.com>
parents: 12780
diff changeset
   161
0d09991f91ee gendoc: automatically create help for default extensions.
Erik Zielke <ez@aragost.com>
parents: 12780
diff changeset
   162
    for extensionname in sorted(allextensionnames()):
27660
512f883c234c mercurial: pass ui to extensions.load (issue5007)
Jun Wu <quark@fb.com>
parents: 27496
diff changeset
   163
        mod = extensions.load(ui, extensionname, None)
18748
6e676fb6ea44 help: use a full header for topic titles
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 17267
diff changeset
   164
        ui.write(minirst.subsection(extensionname))
51840
76387080f238 help: add :config-doc:`section.key` shorthand to insert documentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49164
diff changeset
   165
        ext_doc = help.ext_help(ui, mod)
76387080f238 help: add :config-doc:`section.key` shorthand to insert documentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49164
diff changeset
   166
        ui.write(b"%s\n\n" % ext_doc)
12781
0d09991f91ee gendoc: automatically create help for default extensions.
Erik Zielke <ez@aragost.com>
parents: 12780
diff changeset
   167
        cmdtable = getattr(mod, 'cmdtable', None)
0d09991f91ee gendoc: automatically create help for default extensions.
Erik Zielke <ez@aragost.com>
parents: 12780
diff changeset
   168
        if cmdtable:
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
   169
            ui.write(minirst.subsubsection(_(b'Commands')))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   170
            commandprinter(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   171
                ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   172
                cmdtable,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   173
                minirst.subsubsubsection,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   174
                minirst.subsubsubsubsection,
52016
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   175
                debugcmds=debugcmds,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   176
            )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   177
12781
0d09991f91ee gendoc: automatically create help for default extensions.
Erik Zielke <ez@aragost.com>
parents: 12780
diff changeset
   178
52017
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   179
def showcommandlist(ui, debugcmds=False):
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   180
    """Render a plain text list of all command names
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   181
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   182
    Args:
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   183
        ui: the UI object to output to
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   184
        debugcmds: whether to include debug commands
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   185
    """
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   186
    cmdnames = allcommandnames(table, debugcmds=debugcmds)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   187
    for mainname in cmdnames.keys():
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   188
        # Make does not like semicolons in filenames (or what it
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   189
        # considers as filenames). We use command names as targets so
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   190
        # it applies here. For now let's skip commands with semicolons
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   191
        # in them (at this time it only includes the `admin::verify`
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   192
        # advanced command).
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   193
        if b'::' in mainname:
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   194
            continue
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   195
        ui.write(mainname)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   196
        ui.write(b" ")
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   197
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   198
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   199
def showtopiclist(ui):
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   200
    """Render a plain text list of all help topic names
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   201
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   202
    Args:
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   203
        ui: the UI object to output to
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   204
    """
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   205
    for topic in helptable:
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   206
        topicname = topic[0][0]
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   207
        if help.filtertopic(ui, topicname):
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   208
            continue
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   209
        ui.write(topicname)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   210
        ui.write(b" ")
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   211
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   212
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   213
def showextensionlist(ui):
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   214
    """Render a plain text list of all extension names
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   215
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   216
    Args:
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   217
        ui: the UI object to output to
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   218
    """
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   219
    for extensionname in allextensionnames():
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   220
        ui.write(extensionname)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   221
        ui.write(b" ")
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   222
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   223
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   224
def showhelpindex(ui, debugcmds=False):
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   225
    """Render restructured text for a complete mercurial help index
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   226
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   227
    This index will show a list of commands, followed by a list of help topics,
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   228
    and finally a list of extensions. These lists are split in categories and
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   229
    ordered 'nicely' as defined by alphabetical and categeory order.
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   230
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   231
    Each entry in this index is a reference to the specific help page of the
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   232
    command, topic, or extension at hand.
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   233
    """
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   234
    ui.write(minirst.section(_(b"Mercurial Distributed SCM")))
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   235
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   236
    missingdoc = _(b"(no help text available)")
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   237
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   238
    cats, h, syns = help._getcategorizedhelpcmds(ui, table, None)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   239
    ui.write(minirst.subsection(_(b"Commands")))
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   240
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   241
    for cat in help.CATEGORY_ORDER:
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   242
        catfns = sorted(cats.get(cat, []))
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   243
        if not catfns:
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   244
            continue
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   245
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   246
        catname = gettext(help.CATEGORY_NAMES[cat])
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   247
        ui.write(minirst.subsubsection(catname))
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   248
        for c in catfns:
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   249
            url = b'hg-%s.html' % c
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   250
            ui.write(b" :`%s <%s>`__: %s" % (c, url, h[c]))
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   251
            syns[c].remove(c)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   252
            if syns[c]:
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   253
                ui.write(_(b" (aliases: *%s*)") % (b', '.join(syns[c])))
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   254
            ui.write(b"\n")
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   255
        ui.write(b"\n\n")
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   256
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   257
    ui.write(b"\n\n")
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   258
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   259
    ui.write(minirst.subsection(_(b"Additional Help Topics")))
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   260
    topiccats, topicsyns = help._getcategorizedhelptopics(ui, helptable)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   261
    for cat in help.TOPIC_CATEGORY_ORDER:
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   262
        topics = topiccats.get(cat, [])
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   263
        if not topics:
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   264
            continue
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   265
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   266
        catname = gettext(help.TOPIC_CATEGORY_NAMES[cat])
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   267
        ui.write(minirst.subsubsection(catname))
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   268
        for t, desc in topics:
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   269
            url = b'topic-%s.html' % t
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   270
            ui.write(b" :`%s <%s>`__: %s" % (t, url, desc))
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   271
            topicsyns[t].remove(t)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   272
            if topicsyns[t]:
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   273
                ui.write(_(b" (aliases: *%s*)") % (b', '.join(topicsyns[t])))
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   274
            ui.write(b"\n")
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   275
        ui.write(b"\n\n")
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   276
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   277
    ui.write(b"\n\n")
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   278
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   279
    # Add an alphabetical list of extensions, categorized by group.
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   280
    sectionkeywords = [
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   281
        (b"(ADVANCED)", _(b"(ADVANCED)")),
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   282
        (b"(EXPERIMENTAL)", _(b"(EXPERIMENTAL)")),
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   283
        (b"(DEPRECATED)", _(b"(DEPRECATED)")),
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   284
    ]
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   285
    extensionsections = [
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   286
        (b"Extensions", []),
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   287
        (b"Advanced Extensions", []),
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   288
        (b"Experimental Extensions", []),
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   289
        (b"Deprecated Extensions", []),
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   290
    ]
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   291
    for extensionname in allextensionnames():
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   292
        mod = extensions.load(ui, extensionname, None)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   293
        shortdoc, longdoc = _splitdoc(mod)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   294
        for i, kwds in enumerate(sectionkeywords):
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   295
            if any([kwd in shortdoc for kwd in kwds]):
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   296
                extensionsections[i + 1][1].append(
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   297
                    (extensionname, mod, shortdoc)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   298
                )
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   299
                break
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   300
        else:
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   301
            extensionsections[0][1].append((extensionname, mod, shortdoc))
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   302
    for sectiontitle, extinfos in extensionsections:
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   303
        ui.write(minirst.subsection(_(sectiontitle)))
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   304
        for extinfo in sorted(extinfos, key=lambda ei: ei[0]):
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   305
            extensionname, mod, shortdoc = extinfo
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   306
            url = b'ext-%s.html' % extensionname
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   307
            ui.write(
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   308
                minirst.subsubsection(b'`%s <%s>`__' % (extensionname, url))
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   309
            )
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   310
            ui.write(shortdoc)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   311
            ui.write(b'\n\n')
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   312
            cmdtable = getattr(mod, 'cmdtable', None)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   313
            if cmdtable:
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   314
                cmdnames = allcommandnames(cmdtable, debugcmds=debugcmds)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   315
                for f in sorted(cmdnames.keys()):
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   316
                    d = get_cmd(cmdnames[f], cmdtable)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   317
                    ui.write(b':%s: ' % d[b'cmd'])
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   318
                    ui.write(d[b'desc'][0] or (missingdoc + b"\n"))
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   319
                    ui.write(b'\n')
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   320
            ui.write(b'\n')
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   321
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   322
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   323
def showcommand(ui, mainname):
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   324
    # Always pass debugcmds=True so that we find whatever command we are told
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   325
    # to display.
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   326
    cmdnames = allcommandnames(table, debugcmds=True)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   327
    allnames = cmdnames[mainname]
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   328
    d = get_cmd(allnames, table)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   329
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   330
    header = _rendertpl(
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   331
        'cmdheader.txt',
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   332
        {
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   333
            'cmdname': mainname,
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   334
            'cmdtitle': minirst.section(b'hg ' + mainname),
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   335
            'cmdshortdesc': minirst.subsection(d[b'desc'][0]),
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   336
            'cmdlongdesc': d[b'desc'][1],
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   337
            'cmdsynopsis': d[b'synopsis'],
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   338
        },
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   339
    )
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   340
    ui.write(header.encode())
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   341
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   342
    _optionsprinter(ui, d, minirst.subsubsection)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   343
    if d[b'aliases']:
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   344
        ui.write(minirst.subsubsection(_(b"Aliases")))
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   345
        ui.write(b"::\n\n   ")
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   346
        ui.write(b", ".join(d[b'aliases']))
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   347
        ui.write(b"\n")
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   348
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   349
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   350
def _splitdoc(obj):
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   351
    objdoc = pycompat.getdoc(obj)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   352
    firstnl = objdoc.find(b'\n')
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   353
    if firstnl > 0:
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   354
        shortdoc = objdoc[:firstnl]
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   355
        longdoc = objdoc[firstnl + 1 :]
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   356
    else:
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   357
        shortdoc = objdoc
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   358
        longdoc = ''
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   359
    return shortdoc.lstrip(), longdoc.lstrip()
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   360
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   361
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   362
def _rendertpl(tplname, data):
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   363
    tplpath = os.path.join(os.path.dirname(__file__), 'templates', tplname)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   364
    with open(tplpath, 'r') as f:
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   365
        tpl = f.read()
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   366
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   367
    if isinstance(tpl, bytes):
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   368
        tpl = tpl.decode()
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   369
    for k in data:
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   370
        data[k] = data[k].decode()
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   371
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   372
    return tpl % data
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   373
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   374
52016
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   375
def gettopicstable():
19424
762e51ce3411 gendoc: add showtopic
Takumi IINO <trot.thunder@gmail.com>
parents: 19423
diff changeset
   376
    extrahelptable = [
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
   377
        ([b"common"], b'', loaddoc(b'common'), help.TOPIC_CATEGORY_MISC),
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
   378
        ([b"hg.1"], b'', loaddoc(b'hg.1'), help.TOPIC_CATEGORY_CONFIG),
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
   379
        ([b"hg-ssh.8"], b'', loaddoc(b'hg-ssh.8'), help.TOPIC_CATEGORY_CONFIG),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   380
        (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   381
            [b"hgignore.5"],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   382
            b'',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   383
            loaddoc(b'hgignore.5'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   384
            help.TOPIC_CATEGORY_CONFIG,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   385
        ),
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
   386
        ([b"hgrc.5"], b'', loaddoc(b'hgrc.5'), help.TOPIC_CATEGORY_CONFIG),
52016
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   387
        ([b"hg-ssh.8.gendoc"], b'', b'', help.TOPIC_CATEGORY_CONFIG),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   388
        (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   389
            [b"hgignore.5.gendoc"],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   390
            b'',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   391
            loaddoc(b'hgignore'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   392
            help.TOPIC_CATEGORY_CONFIG,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   393
        ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   394
        (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   395
            [b"hgrc.5.gendoc"],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   396
            b'',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   397
            loaddoc(b'config'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   398
            help.TOPIC_CATEGORY_CONFIG,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   399
        ),
19424
762e51ce3411 gendoc: add showtopic
Takumi IINO <trot.thunder@gmail.com>
parents: 19423
diff changeset
   400
    ]
52016
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   401
    return helptable + extrahelptable
19424
762e51ce3411 gendoc: add showtopic
Takumi IINO <trot.thunder@gmail.com>
parents: 19423
diff changeset
   402
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   403
52016
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   404
def findtopics(helptable, include=[], exclude=[]):
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   405
    """Find topics whose names match the given include/exclude rules
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   406
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   407
    Note that exclude rules take precedence over include rules.
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   408
    """
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   409
    found = []
40291
170926caf44c help: adding support for command categories
rdamazio@google.com
parents: 32336
diff changeset
   410
    for h in helptable:
170926caf44c help: adding support for command categories
rdamazio@google.com
parents: 32336
diff changeset
   411
        names, sec, doc = h[0:3]
19233
81d9a7f6f2e7 gendoc: extract print help topics into a dedicated function
Takumi IINO <trot.thunder@gmail.com>
parents: 19231
diff changeset
   412
        if exclude and names[0] in exclude:
81d9a7f6f2e7 gendoc: extract print help topics into a dedicated function
Takumi IINO <trot.thunder@gmail.com>
parents: 19231
diff changeset
   413
            continue
81d9a7f6f2e7 gendoc: extract print help topics into a dedicated function
Takumi IINO <trot.thunder@gmail.com>
parents: 19231
diff changeset
   414
        if include and names[0] not in include:
81d9a7f6f2e7 gendoc: extract print help topics into a dedicated function
Takumi IINO <trot.thunder@gmail.com>
parents: 19231
diff changeset
   415
            continue
52016
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   416
        found.append((names, sec, doc))
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   417
    return found
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   418
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   419
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   420
def showtopic(ui, topic, wraptpl=False):
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   421
    """Render a help topic
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   422
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   423
    Args:
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   424
        ui: the UI object to output to
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   425
        topic: the topic name to output
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   426
        wraptpl: whether to wrap the output in the individual help topic
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   427
            pages' header/footer
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   428
    """
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   429
    found = findtopics(gettopicstable(), include=[topic])
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   430
    if not found:
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   431
        ui.write_err(_(b"ERROR: no such topic: %s\n") % topic)
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   432
        sys.exit(1)
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   433
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   434
    if wraptpl:
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   435
        header = _rendertpl(
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   436
            'topicheader.txt',
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   437
            {'topicname': topic, 'topictitle': minirst.section(found[0][1])},
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   438
        )
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   439
        ui.write(header.encode())
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   440
    helpprinter(ui, found, None)
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   441
    return True
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   442
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   443
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   444
def helpprinter(ui, topics, sectionfunc):
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   445
    """Print a help topic
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   446
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   447
    Args:
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   448
        ui: the UI object to output to
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   449
        topics: a list of help topics to output
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   450
        sectionfunc: a callback to write the section title
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   451
    """
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   452
    for h in topics:
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   453
        names, sec, doc = h[0:3]
19233
81d9a7f6f2e7 gendoc: extract print help topics into a dedicated function
Takumi IINO <trot.thunder@gmail.com>
parents: 19231
diff changeset
   454
        for name in names:
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
   455
            ui.write(b".. _%s:\n" % name)
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
   456
        ui.write(b"\n")
19233
81d9a7f6f2e7 gendoc: extract print help topics into a dedicated function
Takumi IINO <trot.thunder@gmail.com>
parents: 19231
diff changeset
   457
        if sectionfunc:
81d9a7f6f2e7 gendoc: extract print help topics into a dedicated function
Takumi IINO <trot.thunder@gmail.com>
parents: 19231
diff changeset
   458
            ui.write(sectionfunc(sec))
21793
e0b29a0c36c4 gendoc: restore use of callable() since it was readded in Python 3.2
Augie Fackler <raf@durin42.com>
parents: 20689
diff changeset
   459
        if callable(doc):
26413
e0c572d4d112 help: pass around ui to doc loader (API)
Yuya Nishihara <yuya@tcha.org>
parents: 26412
diff changeset
   460
            doc = doc(ui)
19233
81d9a7f6f2e7 gendoc: extract print help topics into a dedicated function
Takumi IINO <trot.thunder@gmail.com>
parents: 19231
diff changeset
   461
        ui.write(doc)
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
   462
        ui.write(b"\n")
19233
81d9a7f6f2e7 gendoc: extract print help topics into a dedicated function
Takumi IINO <trot.thunder@gmail.com>
parents: 19231
diff changeset
   463
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   464
52017
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   465
def showextension(ui, extensionname, debugcmds=False):
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   466
    """Render the help text for an extension
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   467
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   468
    Args:
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   469
        ui: the UI object to output to
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   470
        extensionname: the name of the extension to output
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   471
        debugcmds: whether to include the extension's debug commands, if any
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   472
    """
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   473
    mod = extensions.load(ui, extensionname, None)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   474
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   475
    header = _rendertpl(
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   476
        'extheader.txt',
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   477
        {'extname': extensionname, 'exttitle': minirst.section(extensionname)},
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   478
    )
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   479
    ui.write(header.encode())
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   480
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   481
    shortdoc, longdoc = _splitdoc(mod)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   482
    if shortdoc:
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   483
        ui.write(b"%s\n\n" % gettext(shortdoc))
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   484
    if longdoc:
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   485
        ui.write(minirst.subsection(_(b"Description")))
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   486
        ui.write(b"%s\n\n" % gettext(longdoc))
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   487
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   488
    cmdtable = getattr(mod, 'cmdtable', None)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   489
    if cmdtable:
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   490
        ui.write(minirst.subsection(_(b'Commands')))
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   491
        commandprinter(
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   492
            ui,
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   493
            cmdtable,
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   494
            minirst.subsubsection,
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   495
            minirst.subsubsubsection,
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   496
            debugcmds=debugcmds,
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   497
        )
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   498
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   499
52016
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   500
def commandprinter(ui, cmdtable, sectionfunc, subsectionfunc, debugcmds=False):
42252
a42cc325b682 gendoc: nest command headers under category headers
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42250
diff changeset
   501
    """Render restructuredtext describing a list of commands and their
a42cc325b682 gendoc: nest command headers under category headers
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42250
diff changeset
   502
    documentations, grouped by command category.
a42cc325b682 gendoc: nest command headers under category headers
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42250
diff changeset
   503
a42cc325b682 gendoc: nest command headers under category headers
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42250
diff changeset
   504
    Args:
a42cc325b682 gendoc: nest command headers under category headers
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42250
diff changeset
   505
      ui: UI object to write the output to
a42cc325b682 gendoc: nest command headers under category headers
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42250
diff changeset
   506
      cmdtable: a dict that maps a string of the command name plus its aliases
a42cc325b682 gendoc: nest command headers under category headers
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42250
diff changeset
   507
        (separated with pipes) to a 3-tuple of (the command's function, a list
a42cc325b682 gendoc: nest command headers under category headers
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42250
diff changeset
   508
        of its option descriptions, and a string summarizing available
a42cc325b682 gendoc: nest command headers under category headers
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42250
diff changeset
   509
        options). Example, with aliases added for demonstration purposes:
a42cc325b682 gendoc: nest command headers under category headers
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42250
diff changeset
   510
a42cc325b682 gendoc: nest command headers under category headers
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42250
diff changeset
   511
          'phase|alias1|alias2': (
a42cc325b682 gendoc: nest command headers under category headers
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42250
diff changeset
   512
             <function phase at 0x7f0816b05e60>,
a42cc325b682 gendoc: nest command headers under category headers
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42250
diff changeset
   513
             [ ('p', 'public', False, 'set changeset phase to public'),
a42cc325b682 gendoc: nest command headers under category headers
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42250
diff changeset
   514
               ...,
a42cc325b682 gendoc: nest command headers under category headers
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42250
diff changeset
   515
               ('r', 'rev', [], 'target revision', 'REV')],
a42cc325b682 gendoc: nest command headers under category headers
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42250
diff changeset
   516
             '[-p|-d|-s] [-f] [-r] [REV...]'
a42cc325b682 gendoc: nest command headers under category headers
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42250
diff changeset
   517
          )
a42cc325b682 gendoc: nest command headers under category headers
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42250
diff changeset
   518
      sectionfunc: minirst function to format command category headers
a42cc325b682 gendoc: nest command headers under category headers
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42250
diff changeset
   519
      subsectionfunc: minirst function to format command headers
a42cc325b682 gendoc: nest command headers under category headers
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42250
diff changeset
   520
    """
52016
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   521
    h = allcommandnames(cmdtable, debugcmds=debugcmds)
1814
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
   522
    cmds = h.keys()
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
   523
42249
3816e361e3d8 gendoc: group commands by category in man page and HTML help
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42248
diff changeset
   524
    def helpcategory(cmd):
3816e361e3d8 gendoc: group commands by category in man page and HTML help
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42248
diff changeset
   525
        """Given a canonical command name from `cmds` (above), retrieve its
3816e361e3d8 gendoc: group commands by category in man page and HTML help
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42248
diff changeset
   526
        help category. If helpcategory is None, default to CATEGORY_NONE.
3816e361e3d8 gendoc: group commands by category in man page and HTML help
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42248
diff changeset
   527
        """
3816e361e3d8 gendoc: group commands by category in man page and HTML help
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42248
diff changeset
   528
        fullname = h[cmd]
3816e361e3d8 gendoc: group commands by category in man page and HTML help
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42248
diff changeset
   529
        details = cmdtable[fullname]
3816e361e3d8 gendoc: group commands by category in man page and HTML help
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42248
diff changeset
   530
        helpcategory = details[0].helpcategory
3816e361e3d8 gendoc: group commands by category in man page and HTML help
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42248
diff changeset
   531
        return helpcategory or help.registrar.command.CATEGORY_NONE
3816e361e3d8 gendoc: group commands by category in man page and HTML help
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42248
diff changeset
   532
42250
037a97d62625 gendoc: guarantee that all commands were processed
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42249
diff changeset
   533
    cmdsbycategory = {category: [] for category in help.CATEGORY_ORDER}
037a97d62625 gendoc: guarantee that all commands were processed
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42249
diff changeset
   534
    for cmd in cmds:
037a97d62625 gendoc: guarantee that all commands were processed
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42249
diff changeset
   535
        # If a command category wasn't registered, the command won't get
037a97d62625 gendoc: guarantee that all commands were processed
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42249
diff changeset
   536
        # rendered below, so we raise an AssertionError.
037a97d62625 gendoc: guarantee that all commands were processed
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42249
diff changeset
   537
        if helpcategory(cmd) not in cmdsbycategory:
037a97d62625 gendoc: guarantee that all commands were processed
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42249
diff changeset
   538
            raise AssertionError(
037a97d62625 gendoc: guarantee that all commands were processed
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42249
diff changeset
   539
                "The following command did not register its (category) in "
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   540
                "help.CATEGORY_ORDER: %s (%s)" % (cmd, helpcategory(cmd))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   541
            )
42250
037a97d62625 gendoc: guarantee that all commands were processed
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42249
diff changeset
   542
        cmdsbycategory[helpcategory(cmd)].append(cmd)
037a97d62625 gendoc: guarantee that all commands were processed
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42249
diff changeset
   543
42249
3816e361e3d8 gendoc: group commands by category in man page and HTML help
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42248
diff changeset
   544
    # Print the help for each command. We present the commands grouped by
3816e361e3d8 gendoc: group commands by category in man page and HTML help
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42248
diff changeset
   545
    # category, and we use help.CATEGORY_ORDER as a guide for a helpful order
3816e361e3d8 gendoc: group commands by category in man page and HTML help
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42248
diff changeset
   546
    # in which to present the categories.
3816e361e3d8 gendoc: group commands by category in man page and HTML help
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42248
diff changeset
   547
    for category in help.CATEGORY_ORDER:
3816e361e3d8 gendoc: group commands by category in man page and HTML help
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42248
diff changeset
   548
        categorycmds = cmdsbycategory[category]
3816e361e3d8 gendoc: group commands by category in man page and HTML help
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42248
diff changeset
   549
        if not categorycmds:
3816e361e3d8 gendoc: group commands by category in man page and HTML help
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42248
diff changeset
   550
            # Skip empty categories
3816e361e3d8 gendoc: group commands by category in man page and HTML help
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42248
diff changeset
   551
            continue
3816e361e3d8 gendoc: group commands by category in man page and HTML help
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42248
diff changeset
   552
        # Print a section header for the category.
3816e361e3d8 gendoc: group commands by category in man page and HTML help
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42248
diff changeset
   553
        # For now, the category header is at the same level as the headers for
3816e361e3d8 gendoc: group commands by category in man page and HTML help
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42248
diff changeset
   554
        # the commands in the category; this is fixed in the next commit.
3816e361e3d8 gendoc: group commands by category in man page and HTML help
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42248
diff changeset
   555
        ui.write(sectionfunc(help.CATEGORY_NAMES[category]))
3816e361e3d8 gendoc: group commands by category in man page and HTML help
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42248
diff changeset
   556
        # Print each command in the category
3816e361e3d8 gendoc: group commands by category in man page and HTML help
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42248
diff changeset
   557
        for f in sorted(categorycmds):
42248
0786b791b3b5 gendoc: indent loop to make next patch more legible
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 41037
diff changeset
   558
            d = get_cmd(h[f], cmdtable)
42252
a42cc325b682 gendoc: nest command headers under category headers
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 42250
diff changeset
   559
            ui.write(subsectionfunc(d[b'cmd']))
42248
0786b791b3b5 gendoc: indent loop to make next patch more legible
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 41037
diff changeset
   560
            # short description
0786b791b3b5 gendoc: indent loop to make next patch more legible
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 41037
diff changeset
   561
            ui.write(d[b'desc'][0])
12813
13fdef670c43 gendoc: support multi-line synopses
Martin Geisler <mg@lazybytes.net>
parents: 12812
diff changeset
   562
            # synopsis
42248
0786b791b3b5 gendoc: indent loop to make next patch more legible
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 41037
diff changeset
   563
            ui.write(b"::\n\n")
0786b791b3b5 gendoc: indent loop to make next patch more legible
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 41037
diff changeset
   564
            synopsislines = d[b'synopsis'].splitlines()
0786b791b3b5 gendoc: indent loop to make next patch more legible
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 41037
diff changeset
   565
            for line in synopsislines:
0786b791b3b5 gendoc: indent loop to make next patch more legible
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 41037
diff changeset
   566
                # some commands (such as rebase) have a multi-line
0786b791b3b5 gendoc: indent loop to make next patch more legible
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 41037
diff changeset
   567
                # synopsis
0786b791b3b5 gendoc: indent loop to make next patch more legible
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 41037
diff changeset
   568
                ui.write(b"   %s\n" % line)
0786b791b3b5 gendoc: indent loop to make next patch more legible
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 41037
diff changeset
   569
            ui.write(b'\n')
0786b791b3b5 gendoc: indent loop to make next patch more legible
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 41037
diff changeset
   570
            # description
0786b791b3b5 gendoc: indent loop to make next patch more legible
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 41037
diff changeset
   571
            ui.write(b"%s\n\n" % d[b'desc'][1])
52016
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   572
42248
0786b791b3b5 gendoc: indent loop to make next patch more legible
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 41037
diff changeset
   573
            # options
52016
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   574
            def _optsection(s):
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   575
                return b"%s:\n\n" % s
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   576
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   577
            _optionsprinter(ui, d, _optsection)
42248
0786b791b3b5 gendoc: indent loop to make next patch more legible
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 41037
diff changeset
   578
            # aliases
0786b791b3b5 gendoc: indent loop to make next patch more legible
Sietse Brouwer <sbbrouwer@gmail.com>
parents: 41037
diff changeset
   579
            if d[b'aliases']:
46518
85ec89c47a04 gendoc: use an empty comment so aliases are separated from previous elements
Kyle Lippincott <spectral@google.com>
parents: 46517
diff changeset
   580
                # Note the empty comment, this is required to separate this
85ec89c47a04 gendoc: use an empty comment so aliases are separated from previous elements
Kyle Lippincott <spectral@google.com>
parents: 46517
diff changeset
   581
                # (which should be a blockquote) from any preceding things (such
85ec89c47a04 gendoc: use an empty comment so aliases are separated from previous elements
Kyle Lippincott <spectral@google.com>
parents: 46517
diff changeset
   582
                # as a definition list).
85ec89c47a04 gendoc: use an empty comment so aliases are separated from previous elements
Kyle Lippincott <spectral@google.com>
parents: 46517
diff changeset
   583
                ui.write(
85ec89c47a04 gendoc: use an empty comment so aliases are separated from previous elements
Kyle Lippincott <spectral@google.com>
parents: 46517
diff changeset
   584
                    _(b"..\n\n    aliases: %s\n\n") % b" ".join(d[b'aliases'])
85ec89c47a04 gendoc: use an empty comment so aliases are separated from previous elements
Kyle Lippincott <spectral@google.com>
parents: 46517
diff changeset
   585
                )
1814
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
   586
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   587
52016
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   588
def _optionsprinter(ui, cmd, sectionfunc):
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   589
    """Outputs the list of options for a given command object"""
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   590
    opt_output = list(cmd[b'opts'])
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   591
    if opt_output:
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   592
        opts_len = max([len(line[0]) for line in opt_output])
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   593
        ui.write(sectionfunc(_(b"Options")))
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   594
        multioccur = False
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   595
        for optstr, desc in opt_output:
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   596
            if desc:
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   597
                s = b"%-*s  %s" % (opts_len, optstr, desc)
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   598
            else:
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   599
                s = optstr
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   600
            ui.write(b"%s\n" % s)
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   601
            if optstr.endswith(b"[+]>"):
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   602
                multioccur = True
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   603
        if multioccur:
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   604
            ui.write(
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   605
                _(b"\n[+] marked option can be specified multiple times\n")
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   606
            )
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   607
        ui.write(b"\n")
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   608
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   609
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   610
def allcommandnames(cmdtable, debugcmds=False):
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   611
    """Get a collection of all command names in the given command table
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   612
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   613
    Args:
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   614
        cmdtable: the command table to get the names from
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   615
        debugcmds: whether to include debug commands
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   616
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   617
    Returns a dictionary where the keys are the main command names, and the
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   618
    values are the "raw" names (in the form of `name|alias1|alias2`).
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   619
    """
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   620
    allcmdnames = {}
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   621
    for rawnames, attr in cmdtable.items():
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   622
        mainname = rawnames.split(b"|")[0].lstrip(b"^")
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   623
        if not debugcmds and mainname.startswith(b"debug"):
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   624
            continue
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   625
        allcmdnames[mainname] = rawnames
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   626
    return allcmdnames
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   627
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   628
12781
0d09991f91ee gendoc: automatically create help for default extensions.
Erik Zielke <ez@aragost.com>
parents: 12780
diff changeset
   629
def allextensionnames():
52016
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   630
    """Get a set of all known extension names"""
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
   631
    return set(extensions.enabled().keys()) | set(extensions.disabled().keys())
12781
0d09991f91ee gendoc: automatically create help for default extensions.
Erik Zielke <ez@aragost.com>
parents: 12780
diff changeset
   632
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42252
diff changeset
   633
1814
7956893e8458 generate hg manpage from commands.py docstring
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff changeset
   634
if __name__ == "__main__":
52016
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   635
    parser = argparse.ArgumentParser(
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   636
        prog='gendoc', description="Generate mercurial documentation files"
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   637
    )
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   638
    parser.add_argument('doc', default='hg.1.gendoc', nargs='?')
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   639
    parser.add_argument(
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   640
        '-d',
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   641
        '--debug-cmds',
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   642
        action='store_true',
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   643
        help="Show debug commands in help pages",
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   644
    )
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   645
    args = parser.parse_args()
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   646
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   647
    doc = encoding.strtolocal(args.doc)
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   648
    debugcmds = args.debug_cmds
19425
81fbd4e66ff5 gendoc: dispatch print document content by commandline arguments
Takumi IINO <trot.thunder@gmail.com>
parents: 19424
diff changeset
   649
30559
d83ca854fa21 ui: factor out ui.load() to create a ui without loading configs (API)
Yuya Nishihara <yuya@tcha.org>
parents: 29397
diff changeset
   650
    ui = uimod.ui.load()
46517
eb36f7a71291 gendoc: add support for loading extensions from config settings
Kyle Lippincott <spectral@google.com>
parents: 46516
diff changeset
   651
    # Trigger extensions to load. This is disabled by default because it uses
eb36f7a71291 gendoc: add support for loading extensions from config settings
Kyle Lippincott <spectral@google.com>
parents: 46516
diff changeset
   652
    # the current user's configuration, which is often not what is wanted.
eb36f7a71291 gendoc: add support for loading extensions from config settings
Kyle Lippincott <spectral@google.com>
parents: 46516
diff changeset
   653
    if encoding.environ.get(b'GENDOC_LOAD_CONFIGURED_EXTENSIONS', b'0') != b'0':
eb36f7a71291 gendoc: add support for loading extensions from config settings
Kyle Lippincott <spectral@google.com>
parents: 46516
diff changeset
   654
        extensions.loadall(ui)
eb36f7a71291 gendoc: add support for loading extensions from config settings
Kyle Lippincott <spectral@google.com>
parents: 46516
diff changeset
   655
52016
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   656
    # ui.debugflag determines if the help module returns debug commands to us.
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   657
    ui.debugflag = debugcmds
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   658
52017
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   659
    # Render the 'all-in-one' giant documentation file
41004
e10641c48fa7 py3: byteify gendoc.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40294
diff changeset
   660
    if doc == b'hg.1.gendoc':
26412
7e8e3c0920a6 gendoc: use real ui in place of stdout
Yuya Nishihara <yuya@tcha.org>
parents: 21793
diff changeset
   661
        showdoc(ui)
52017
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   662
    # Render a command/help-topic/extension name list (for internal use)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   663
    elif doc == b'commandlist':
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   664
        showcommandlist(ui, debugcmds=debugcmds)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   665
    elif doc == b'topiclist':
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   666
        showtopiclist(ui)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   667
    elif doc == b'extensionlist':
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   668
        showextensionlist(ui)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   669
    # Render the help index/main page
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   670
    elif doc == b'index':
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   671
        showhelpindex(ui, debugcmds=debugcmds)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   672
    # Render an individual command/help-topic/extension page
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   673
    elif doc.startswith(b'cmd-'):
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   674
        showcommand(ui, doc[4:])
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   675
    elif doc.startswith(b'topic-'):
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   676
        showtopic(ui, doc[6:], wraptpl=True)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   677
    elif doc.startswith(b'ext-'):
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   678
        showextension(ui, doc[4:], debugcmds=debugcmds)
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   679
    # Render a help-topic page without any title/footer, for later inclusion
2a875530a023 doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents: 52016
diff changeset
   680
    # into a hand-written help text file
19425
81fbd4e66ff5 gendoc: dispatch print document content by commandline arguments
Takumi IINO <trot.thunder@gmail.com>
parents: 19424
diff changeset
   681
    else:
52016
1f5974f8f730 doc: refactor gendoc for better reusability
Ludovic Chabant <ludovic@chabant.com>
parents: 51840
diff changeset
   682
        showtopic(ui, doc)