docs/test2rst.py
author Boris Feld <boris.feld@octobus.net>
Fri, 09 Jun 2017 00:52:54 +0100
changeset 2591 1991935fb603
parent 2035 94fe2cc9cd41
child 2825 7608f1e04205
permissions -rw-r--r--
obsfate: add a new obsfate template The obsfate template display for each obsolete changeset a line summarizing what changed between the changeset and its successors. This dict is computed in obshistory._preparesuccessorset. It uses obshistory.FORMATSSETSFUNCTIONS which is a list of function that individually compute a part of each dict. You can override fields or add new ones by adding your own function in this list. The format of obsfate is computed in templatekw.obsfatedefaulttempl and can be wrapped if necessary, the code is not quite extendable for the moment but can be refactored later.

#!/usr/bin/env python

import os
import os.path as op
import re
import sys

# line starts with two chars one of which is not a space (and both are not
# newlines obviously) and ends with one or more newlines followed by two spaces
# on a next line (indented text)
CODEBLOCK = re.compile(r'()\n(([^ \n][^\n]|[^\n][^ \n])[^\n]*)\n+  ')

INDEX = '''
Mercurial tests
===============

.. toctree::
   :maxdepth: 1
'''


def rstify(orig, name):
    header = '%s\n%s\n\n' % (name, '=' * len(name))
    content = header + orig
    content = CODEBLOCK.sub(r'\n\1\n\n::\n\n  ', content)
    return content


def main(base):
    if os.path.isdir(base):
        one_dir(base)
    else:
        one_file(base)


def one_dir(base):
    index = INDEX
    # doc = lambda x: op.join(op.dirname(__file__), 'docs', x)

    for fn in sorted(os.listdir(base)):
        if not fn.endswith('.t'):
            continue
        name = os.path.splitext(fn)[0]
        content = one_file(op.join(base, fn))
        target = op.join(base, name + '.rst')
        # with file(doc(name + '.rst'), 'w') as f:
        with open(target, 'w') as f:
            f.write(content)

        index += '\n   ' + name

    # with file(doc('index.rst'), 'w') as f:
    #     f.write(index)


def one_file(path):
    name = os.path.basename(path)[:-2]
    return rstify(open(path).read(), name)


if __name__ == '__main__':
    if len(sys.argv) != 2:
        print('Please supply a path to tests dir as parameter')
        sys.exit()
    main(sys.argv[1])