docs/test2rst.py
author Faheem Mitha <faheem@faheem.info>
Sat, 11 Oct 2014 02:27:21 +0530
changeset 1127 87625964c333
parent 525 a0327c78a5d3
child 2035 94fe2cc9cd41
permissions -rw-r--r--
debian: remove .PHONY line completely This does not work in the case of implicit pattern matching rules as used by dh. Consider this example from Geoffrey Thomas: $ ls -l total 16 -rw-r--r-- 1 faheem faheem 17 Aug 16 20:27 blue.c -rw-r--r-- 1 faheem faheem 17 Aug 16 20:27 green.c -rw-r--r-- 1 faheem faheem 35 Aug 16 20:26 Makefile -rw-r--r-- 1 faheem faheem 17 Aug 16 20:27 red.c $ cat Makefile %: %.c gcc -o $@ $< .PHONY: blue $ make red gcc -o red red.c $ make green gcc -o green green.c $ make blue make: Nothing to be done for blue'. The Make manual (http://www.gnu.org/software/make/manual/make.html#Phony-Targets) says Since it knows that phony targets do not name actual files that could be remade from other files, make skips the implicit rule search for phony targets (see Implicit Rules). Thanks to the good folks on #debian-mentors on OFTC for instruction and explanation in these matters.

#!/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:
        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 file(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(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])