doc/gendoc.py
author Pierre-Yves David <pierre-yves.david@octobus.net>
Tue, 11 Mar 2025 02:29:42 +0100
branchstable
changeset 53042 cdd7bf612c7b
parent 52656 3e84e001b6c1
permissions -rwxr-xr-x
bundle-spec: properly format boolean parameter (issue6960) This was breaking automatic clone bundle generation. This changeset fixes it and add a test to catch it in the future.
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)
52656
3e84e001b6c1 pyupgrade: drop redundant `open()` modes
Matt Harbison <matt_harbison@yahoo.com>
parents: 52636
diff changeset
   364
    with open(tplpath) as f:
52017
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)