docs/test2rst.py
author Patrick Mezard <patrick@mezard.eu>
Thu, 21 Jun 2012 18:00:32 +0200
changeset 296 c3ff47e6bd36
parent 235 8469ccb9550f
child 525 a0327c78a5d3
permissions -rw-r--r--
test-evolve: extend output and exhibit an amend bug The extended section shows the parent revision stabilizing itself on another revision, without --any. In theory, only descendants of the parent predecessors or of its descendants should be stabilized, and be stabilized in parent subtree. Unfortunately, stabilize implementation correctly picks the changesets to stabilize but not their target. This problem is aggravated by amend registering too many obsolete markers which prevents the stabilize selection heuristic to prune several changesets.

#!/usr/bin/env python

import os, os.path as op, re, 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:
        print 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
        print fn
        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 file(target, 'w') as f:
            f.write(content)
        print f

        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(file(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])