doc/runrst
author Gregory Szorc <gregory.szorc@gmail.com>
Mon, 13 Nov 2017 19:20:34 -0800
changeset 35132 e96613048bdd
parent 28076 18c6b271579b
child 39489 4e4fae1dda5c
permissions -rwxr-xr-x
perf: add command to benchmark bundle reading Upcoming commits will be refactoring bundle2 I/O code. This commit establishes a `hg perfbundleread` command that measures how long it takes to read a bundle using various mechanisms. As a baseline, here's output from an uncompressed bundle1 bundle of my Firefox repo (7,098,622,890 bytes): ! read(8k) ! wall 0.763481 comb 0.760000 user 0.160000 sys 0.600000 (best of 6) ! read(16k) ! wall 0.644512 comb 0.640000 user 0.110000 sys 0.530000 (best of 16) ! read(32k) ! wall 0.581172 comb 0.590000 user 0.060000 sys 0.530000 (best of 18) ! read(128k) ! wall 0.535183 comb 0.530000 user 0.010000 sys 0.520000 (best of 19) ! cg1 deltaiter() ! wall 0.873500 comb 0.880000 user 0.840000 sys 0.040000 (best of 12) ! cg1 getchunks() ! wall 6.283797 comb 6.270000 user 5.570000 sys 0.700000 (best of 3) ! cg1 read(8k) ! wall 1.097173 comb 1.100000 user 0.400000 sys 0.700000 (best of 10) ! cg1 read(16k) ! wall 0.810750 comb 0.800000 user 0.200000 sys 0.600000 (best of 13) ! cg1 read(32k) ! wall 0.671215 comb 0.670000 user 0.110000 sys 0.560000 (best of 15) ! cg1 read(128k) ! wall 0.597857 comb 0.600000 user 0.020000 sys 0.580000 (best of 15) And from an uncompressed bundle2 bundle (6,070,036,163 bytes): ! read(8k) ! wall 0.676997 comb 0.680000 user 0.160000 sys 0.520000 (best of 15) ! read(16k) ! wall 0.592706 comb 0.590000 user 0.080000 sys 0.510000 (best of 17) ! read(32k) ! wall 0.529395 comb 0.530000 user 0.050000 sys 0.480000 (best of 16) ! read(128k) ! wall 0.491270 comb 0.490000 user 0.010000 sys 0.480000 (best of 19) ! bundle2 forwardchunks() ! wall 2.997131 comb 2.990000 user 2.270000 sys 0.720000 (best of 4) ! bundle2 iterparts() ! wall 12.247197 comb 10.670000 user 8.170000 sys 2.500000 (best of 3) ! bundle2 part seek() ! wall 11.761675 comb 10.500000 user 8.240000 sys 2.260000 (best of 3) ! bundle2 part read(8k) ! wall 9.116163 comb 9.110000 user 8.240000 sys 0.870000 (best of 3) ! bundle2 part read(16k) ! wall 8.984362 comb 8.970000 user 8.110000 sys 0.860000 (best of 3) ! bundle2 part read(32k) ! wall 8.758364 comb 8.740000 user 7.860000 sys 0.880000 (best of 3) ! bundle2 part read(128k) ! wall 8.749040 comb 8.730000 user 7.830000 sys 0.900000 (best of 3) We already see some interesting data. Notably that bundle2 has significant overhead compared to bundle1. This matters for e.g. stream clone bundles, which can be applied at >1Gbps. Differential Revision: https://phab.mercurial-scm.org/D1385
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10971
cbe400a8e217 doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff changeset
     1
#!/usr/bin/env python
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
#
cbe400a8e217 doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff changeset
     5
# Copyright 2010 Matt Mackall <mpm@selenic.com> and others
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
cbe400a8e217 doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff changeset
    15
import sys
11707
13d79a7bf5b7 runrst: try to be more helpful if docutils is not installed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10974
diff changeset
    16
try:
13d79a7bf5b7 runrst: try to be more helpful if docutils is not installed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10974
diff changeset
    17
    from docutils.parsers.rst import roles
13d79a7bf5b7 runrst: try to be more helpful if docutils is not installed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10974
diff changeset
    18
    from docutils.core import publish_cmdline
13d79a7bf5b7 runrst: try to be more helpful if docutils is not installed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10974
diff changeset
    19
    from docutils import nodes, utils
13d79a7bf5b7 runrst: try to be more helpful if docutils is not installed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10974
diff changeset
    20
except ImportError:
13d79a7bf5b7 runrst: try to be more helpful if docutils is not installed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10974
diff changeset
    21
    sys.stderr.write("abort: couldn't generate documentation: docutils "
13d79a7bf5b7 runrst: try to be more helpful if docutils is not installed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10974
diff changeset
    22
                     "module is missing\n")
15314
1ae824142c01 runrst: improve error message when Docutils is missing
Martin Geisler <mg@aragost.com>
parents: 11707
diff changeset
    23
    sys.stderr.write("please install python-docutils or see "
1ae824142c01 runrst: improve error message when Docutils is missing
Martin Geisler <mg@aragost.com>
parents: 11707
diff changeset
    24
                     "http://docutils.sourceforge.net/\n")
11707
13d79a7bf5b7 runrst: try to be more helpful if docutils is not installed
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 10974
diff changeset
    25
    sys.exit(-1)
10972
0a2c6948f5f4 doc, minirst: support hg interpreted text role
Martin Geisler <mg@aragost.com>
parents: 10971
diff changeset
    26
0a2c6948f5f4 doc, minirst: support hg interpreted text role
Martin Geisler <mg@aragost.com>
parents: 10971
diff changeset
    27
def role_hg(name, rawtext, text, lineno, inliner,
0a2c6948f5f4 doc, minirst: support hg interpreted text role
Martin Geisler <mg@aragost.com>
parents: 10971
diff changeset
    28
            options={}, content=[]):
10974
854ac04d712c doc: make links for hg role
Martin Geisler <mg@aragost.com>
parents: 10972
diff changeset
    29
    text = "hg " + utils.unescape(text)
854ac04d712c doc: make links for hg role
Martin Geisler <mg@aragost.com>
parents: 10972
diff changeset
    30
    linktext = nodes.literal(rawtext, text)
854ac04d712c doc: make links for hg role
Martin Geisler <mg@aragost.com>
parents: 10972
diff changeset
    31
    parts = text.split()
854ac04d712c doc: make links for hg role
Martin Geisler <mg@aragost.com>
parents: 10972
diff changeset
    32
    cmd, args = parts[1], parts[2:]
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
    33
    refuri = "hg.1.html#%s" % cmd
10974
854ac04d712c doc: make links for hg role
Martin Geisler <mg@aragost.com>
parents: 10972
diff changeset
    34
    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
    35
        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
    36
            # :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
    37
            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
    38
        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
    39
            # :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
    40
            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
    41
        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
    42
            # :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
    43
            # (mainly for :hg:`help -c 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
    44
            refuri = "hg.1.html#%s" % args[1]
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
    45
        else:
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
    46
            refuri = "hg.1.html#%s" % args[0]
10974
854ac04d712c doc: make links for hg role
Martin Geisler <mg@aragost.com>
parents: 10972
diff changeset
    47
    node = nodes.reference(rawtext, '', linktext,
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
    48
                           refuri=refuri)
10972
0a2c6948f5f4 doc, minirst: support hg interpreted text role
Martin Geisler <mg@aragost.com>
parents: 10971
diff changeset
    49
    return [node], []
0a2c6948f5f4 doc, minirst: support hg interpreted text role
Martin Geisler <mg@aragost.com>
parents: 10971
diff changeset
    50
0a2c6948f5f4 doc, minirst: support hg interpreted text role
Martin Geisler <mg@aragost.com>
parents: 10971
diff changeset
    51
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
    52
cbe400a8e217 doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff changeset
    53
if __name__ == "__main__":
cbe400a8e217 doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff changeset
    54
    if len(sys.argv) < 2:
cbe400a8e217 doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff changeset
    55
        sys.stderr.write(__doc__ % sys.argv[0])
cbe400a8e217 doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff changeset
    56
        sys.exit(1)
cbe400a8e217 doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff changeset
    57
cbe400a8e217 doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff changeset
    58
    writer = sys.argv[1]
cbe400a8e217 doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff changeset
    59
    del sys.argv[1]
cbe400a8e217 doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff changeset
    60
cbe400a8e217 doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
diff changeset
    61
    publish_cmdline(writer_name=writer)