view doc/runrst @ 52182:fa58f4f97337 stable tip

ci: shard the test run on mac os X This should comes with some benefit: - spread the load across more runner, - reduce the real-time CI run, - reduce the "retry" run when we need them. We start with the Mac jobs, but that would be tremendously useful for Windows too. For linux, we need to reduce the startup overhead for this to be worth it. Building smaller image and speeding up clone should help with that.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Fri, 08 Nov 2024 17:08:11 +0100
parents 2a875530a023
children
line wrap: on
line source

#!/usr/bin/env python3
#
# runrst - register custom roles and run correct writer
#
# Copyright 2010 Olivia Mackall <olivia@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.

"""usage: %s WRITER args...

where WRITER is the name of a Docutils writer such as 'html' or 'manpage'
"""


import re
import sys

try:
    import docutils.core as core
    import docutils.nodes as nodes
    import docutils.utils as utils
    import docutils.parsers.rst.roles as roles
except ImportError:
    sys.stderr.write(
        "abort: couldn't generate documentation: docutils "
        "module is missing\n"
    )
    sys.stderr.write(
        "please install python-docutils or see "
        "http://docutils.sourceforge.net/\n"
    )
    sys.exit(-1)

# Whether we are rendering a help page for a single topic.
# If false, we are rendering a monolithic page with all topics together.
is_individual_pages_mode = False


def make_cmd_ref_uri(cmd):
    if is_individual_pages_mode:
        return "hg-%s.html" % cmd
    else:
        return "hg.1.html#%s" % cmd


known_refs = None


def load_known_refs(fname):
    try:
        with open(fname, 'r') as fp:
            text = fp.read()
            return re.split(r'[ \n]+', text)
    except OSError:
        sys.stderr.write(
            "abort: couldn't find '%', please run documentation generation "
            "through the Makefile, or run 'make knownrefs'\n"
        )
        sys.exit(-1)


def find_known_ref(ref):
    global known_refs
    if known_refs is None:
        cmds = load_known_refs('commandlist.txt')
        topics = load_known_refs('topiclist.txt')
        exts = load_known_refs('extensionlist.txt')
        known_refs = {'hg': cmds, 'topic': topics, 'ext': exts}
    for reftype, refnames in known_refs.items():
        if ref in refnames:
            return reftype
    return None


def make_any_ref_uri(ref):
    if is_individual_pages_mode:
        # Try to find if ref is a command, topic, or extension. If not,
        # reference the anchor in the main hg.1 help page.
        reftype = find_known_ref(ref)
        if reftype:
            return '%s-%s.html' % (reftype, ref)
    return "hg.1.html#%s" % ref


def role_hg(name, rawtext, text, lineno, inliner, options=None, content=None):
    text = "hg " + utils.unescape(text)
    linktext = nodes.literal(rawtext, text)
    parts = text.split()
    cmd, args = parts[1], parts[2:]
    refuri = make_cmd_ref_uri(cmd)
    if cmd == 'help' and args:
        if args[0] == 'config':
            # :hg:`help config`
            refuri = "hgrc.5.html"
        elif args[0].startswith('config.'):
            # :hg:`help config.SECTION...`
            refuri = "hgrc.5.html#%s" % args[0].split('.', 2)[1]
        elif len(args) >= 2 and args[0] == '-c':
            # :hg:`help -c COMMAND ...` is equivalent to :hg:`COMMAND`
            # (mainly for :hg:`help -c config`)
            refuri = make_cmd_ref_uri(args[1])
        else:
            refuri = make_any_ref_uri(args[0])
    node = nodes.reference(rawtext, '', linktext, refuri=refuri)
    return [node], []


roles.register_local_role("hg", role_hg)

if __name__ == "__main__":
    if len(sys.argv) < 2:
        sys.stderr.write(__doc__ % sys.argv[0])
        sys.exit(1)

    writer = sys.argv[1]
    del sys.argv[1]

    if sys.argv[1] == '--hg-individual-pages':
        is_individual_pages_mode = True
        del sys.argv[1]

    core.publish_cmdline(writer_name=writer)