Mercurial > hg
annotate doc/runrst @ 52316:a820a7a1fce0 default tip
setup: require TLS 1.2 support from the Python interpreter (BC)
Before it was optional, and either 1.1 or 1.2 was sufficient. Now that the
default minimum is 1.2, it needs to be present to work out of the box.
The code here is more convoluted than the corresponding checks in `sslutil.py`,
but I'm leaving it alone because it can all be simplified when py38 is dropped.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Thu, 21 Nov 2024 11:46:10 -0500 |
parents | 2a875530a023 |
children |
rev | line source |
---|---|
45830
c102b704edb5
global: use python3 in shebangs
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43691
diff
changeset
|
1 #!/usr/bin/env python3 |
10971
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
2 # |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
3 # runrst - register custom roles and run correct writer |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
4 # |
46819
d4ba4d51f85f
contributor: change mentions of mpm to olivia
Raphaël Gomès <rgomes@octobus.net>
parents:
45830
diff
changeset
|
5 # Copyright 2010 Olivia Mackall <olivia@selenic.com> and others |
10971
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
6 # |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
7 # This software may be used and distributed according to the terms of the |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
8 # GNU General Public License version 2 or any later version. |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
9 |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
10 """usage: %s WRITER args... |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
11 |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
12 where WRITER is the name of a Docutils writer such as 'html' or 'manpage' |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
13 """ |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
14 |
39472
4e4fae1dda5c
doc: use modern import style in runrst
Yuya Nishihara <yuya@tcha.org>
parents:
28076
diff
changeset
|
15 |
52021
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
16 import re |
10971
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
17 import sys |
43691
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43690
diff
changeset
|
18 |
11707
13d79a7bf5b7
runrst: try to be more helpful if docutils is not installed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
10974
diff
changeset
|
19 try: |
39472
4e4fae1dda5c
doc: use modern import style in runrst
Yuya Nishihara <yuya@tcha.org>
parents:
28076
diff
changeset
|
20 import docutils.core as core |
4e4fae1dda5c
doc: use modern import style in runrst
Yuya Nishihara <yuya@tcha.org>
parents:
28076
diff
changeset
|
21 import docutils.nodes as nodes |
4e4fae1dda5c
doc: use modern import style in runrst
Yuya Nishihara <yuya@tcha.org>
parents:
28076
diff
changeset
|
22 import docutils.utils as utils |
4e4fae1dda5c
doc: use modern import style in runrst
Yuya Nishihara <yuya@tcha.org>
parents:
28076
diff
changeset
|
23 import docutils.parsers.rst.roles as roles |
11707
13d79a7bf5b7
runrst: try to be more helpful if docutils is not installed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
10974
diff
changeset
|
24 except ImportError: |
43691
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43690
diff
changeset
|
25 sys.stderr.write( |
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43690
diff
changeset
|
26 "abort: couldn't generate documentation: docutils " |
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43690
diff
changeset
|
27 "module is missing\n" |
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43690
diff
changeset
|
28 ) |
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43690
diff
changeset
|
29 sys.stderr.write( |
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43690
diff
changeset
|
30 "please install python-docutils or see " |
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43690
diff
changeset
|
31 "http://docutils.sourceforge.net/\n" |
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43690
diff
changeset
|
32 ) |
11707
13d79a7bf5b7
runrst: try to be more helpful if docutils is not installed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
10974
diff
changeset
|
33 sys.exit(-1) |
10972
0a2c6948f5f4
doc, minirst: support hg interpreted text role
Martin Geisler <mg@aragost.com>
parents:
10971
diff
changeset
|
34 |
52021
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
35 # Whether we are rendering a help page for a single topic. |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
36 # If false, we are rendering a monolithic page with all topics together. |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
37 is_individual_pages_mode = False |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
38 |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
39 |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
40 def make_cmd_ref_uri(cmd): |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
41 if is_individual_pages_mode: |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
42 return "hg-%s.html" % cmd |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
43 else: |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
44 return "hg.1.html#%s" % cmd |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
45 |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
46 |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
47 known_refs = None |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
48 |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
49 |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
50 def load_known_refs(fname): |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
51 try: |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
52 with open(fname, 'r') as fp: |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
53 text = fp.read() |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
54 return re.split(r'[ \n]+', text) |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
55 except OSError: |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
56 sys.stderr.write( |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
57 "abort: couldn't find '%', please run documentation generation " |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
58 "through the Makefile, or run 'make knownrefs'\n" |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
59 ) |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
60 sys.exit(-1) |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
61 |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
62 |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
63 def find_known_ref(ref): |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
64 global known_refs |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
65 if known_refs is None: |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
66 cmds = load_known_refs('commandlist.txt') |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
67 topics = load_known_refs('topiclist.txt') |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
68 exts = load_known_refs('extensionlist.txt') |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
69 known_refs = {'hg': cmds, 'topic': topics, 'ext': exts} |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
70 for reftype, refnames in known_refs.items(): |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
71 if ref in refnames: |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
72 return reftype |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
73 return None |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
74 |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
75 |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
76 def make_any_ref_uri(ref): |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
77 if is_individual_pages_mode: |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
78 # Try to find if ref is a command, topic, or extension. If not, |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
79 # reference the anchor in the main hg.1 help page. |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
80 reftype = find_known_ref(ref) |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
81 if reftype: |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
82 return '%s-%s.html' % (reftype, ref) |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
83 return "hg.1.html#%s" % ref |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
84 |
43691
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43690
diff
changeset
|
85 |
43690
15cccbacd5ce
doc: don't use mutable default arguments
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39472
diff
changeset
|
86 def role_hg(name, rawtext, text, lineno, inliner, options=None, content=None): |
10974
854ac04d712c
doc: make links for hg role
Martin Geisler <mg@aragost.com>
parents:
10972
diff
changeset
|
87 text = "hg " + utils.unescape(text) |
854ac04d712c
doc: make links for hg role
Martin Geisler <mg@aragost.com>
parents:
10972
diff
changeset
|
88 linktext = nodes.literal(rawtext, text) |
854ac04d712c
doc: make links for hg role
Martin Geisler <mg@aragost.com>
parents:
10972
diff
changeset
|
89 parts = text.split() |
854ac04d712c
doc: make links for hg role
Martin Geisler <mg@aragost.com>
parents:
10972
diff
changeset
|
90 cmd, args = parts[1], parts[2:] |
52021
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
91 refuri = make_cmd_ref_uri(cmd) |
10974
854ac04d712c
doc: make links for hg role
Martin Geisler <mg@aragost.com>
parents:
10972
diff
changeset
|
92 if cmd == 'help' and args: |
28075
63eae465095e
doc: translate from :hg:`help config` to a valid link to hgrc.5.html
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15314
diff
changeset
|
93 if args[0] == 'config': |
63eae465095e
doc: translate from :hg:`help config` to a valid link to hgrc.5.html
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15314
diff
changeset
|
94 # :hg:`help config` |
63eae465095e
doc: translate from :hg:`help config` to a valid link to hgrc.5.html
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15314
diff
changeset
|
95 refuri = "hgrc.5.html" |
28076
18c6b271579b
doc: translate from :hg:`help config.SECTION` to a valid link to hgrc.5.html
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28075
diff
changeset
|
96 elif args[0].startswith('config.'): |
18c6b271579b
doc: translate from :hg:`help config.SECTION` to a valid link to hgrc.5.html
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28075
diff
changeset
|
97 # :hg:`help config.SECTION...` |
18c6b271579b
doc: translate from :hg:`help config.SECTION` to a valid link to hgrc.5.html
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28075
diff
changeset
|
98 refuri = "hgrc.5.html#%s" % args[0].split('.', 2)[1] |
28075
63eae465095e
doc: translate from :hg:`help config` to a valid link to hgrc.5.html
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15314
diff
changeset
|
99 elif len(args) >= 2 and args[0] == '-c': |
63eae465095e
doc: translate from :hg:`help config` to a valid link to hgrc.5.html
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15314
diff
changeset
|
100 # :hg:`help -c COMMAND ...` is equivalent to :hg:`COMMAND` |
63eae465095e
doc: translate from :hg:`help config` to a valid link to hgrc.5.html
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15314
diff
changeset
|
101 # (mainly for :hg:`help -c config`) |
52021
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
102 refuri = make_cmd_ref_uri(args[1]) |
28075
63eae465095e
doc: translate from :hg:`help config` to a valid link to hgrc.5.html
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15314
diff
changeset
|
103 else: |
52021
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
104 refuri = make_any_ref_uri(args[0]) |
43691
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43690
diff
changeset
|
105 node = nodes.reference(rawtext, '', linktext, refuri=refuri) |
10972
0a2c6948f5f4
doc, minirst: support hg interpreted text role
Martin Geisler <mg@aragost.com>
parents:
10971
diff
changeset
|
106 return [node], [] |
0a2c6948f5f4
doc, minirst: support hg interpreted text role
Martin Geisler <mg@aragost.com>
parents:
10971
diff
changeset
|
107 |
43691
47ef023d0165
black: blacken scripts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43690
diff
changeset
|
108 |
10972
0a2c6948f5f4
doc, minirst: support hg interpreted text role
Martin Geisler <mg@aragost.com>
parents:
10971
diff
changeset
|
109 roles.register_local_role("hg", role_hg) |
10971
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
110 |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
111 if __name__ == "__main__": |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
112 if len(sys.argv) < 2: |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
113 sys.stderr.write(__doc__ % sys.argv[0]) |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
114 sys.exit(1) |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
115 |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
116 writer = sys.argv[1] |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
117 del sys.argv[1] |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff
changeset
|
118 |
52021
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
119 if sys.argv[1] == '--hg-individual-pages': |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
120 is_individual_pages_mode = True |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
121 del sys.argv[1] |
2a875530a023
doc: generate separate commands/topics/extension pages
Ludovic Chabant <ludovic@chabant.com>
parents:
48875
diff
changeset
|
122 |
39472
4e4fae1dda5c
doc: use modern import style in runrst
Yuya Nishihara <yuya@tcha.org>
parents:
28076
diff
changeset
|
123 core.publish_cmdline(writer_name=writer) |