Source

SCons / bin / import-test.py

Full commit
Steven Knight dd65a71 




































Steven Knight 088b413 
Steven Knight dd65a71 



Greg Noel 2395d93 

Steven Knight dd65a71 



























Greg Noel 450d604 
Steven Knight dd65a71 








Steven Knight aaffacc 



Steven Knight dd65a71 






Steven Knight 9aa3f9a 




#!/usr/bin/env python
#
# __COPYRIGHT__
#
# tree2test.py - turn a directory tree into TestSCons code
#
# A quick script for importing directory hierarchies containing test
# cases that people supply (typically in a .zip or .tar.gz file) into a
# TestSCons.py script.  No error checking or options yet, it just walks
# the first command-line argument (assumed to be the directory containing
# the test case) and spits out code looking like the following:
#
#       test.subdir(['sub1'],
#                   ['sub1', 'sub2'])
#
#       test.write(['sub1', 'file1'], """\
#       contents of file1
#       """)
#
#       test.write(['sub1', 'sub2', 'file2'], """\
#       contents of file2
#       """)
#
# There's no massaging of contents, so any files that themselves contain
# """ triple-quotes will need to have their contents edited by hand.
#

__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"

import os.path
import sys

directory = sys.argv[1]

Top = None
TopPath = None

class Dir(object):
    def __init__(self, path):
        self.path = path
        self.entries = {}
    def call_for_each_entry(self, func):
        for name in sorted(self.entries.keys()):
            func(name, self.entries[name])

def lookup(dirname):
    global Top, TopPath
    if not Top:
        Top = Dir([])
        TopPath = dirname + os.sep
        return Top
    dirname = dirname.replace(TopPath, '')
    dirs = dirname.split(os.sep)
    t = Top
    for d in dirs[:-1]:
        t = t.entries[d]
    node = t.entries[dirs[-1]] = Dir(dirs)
    return node

def collect_dirs(l, dir):
    if dir.path:
        l.append(dir.path)
    def recurse(n, d):
        if d:
            collect_dirs(l, d)
    dir.call_for_each_entry(recurse)

def print_files(dir):
    def print_a_file(n, d):
        if not d:
            l = dir.path + [n]
            sys.stdout.write('\ntest.write(%s, """\\\n' % l)
            p = os.path.join(directory, *l)
            sys.stdout.write(open(p, 'r').read())
            sys.stdout.write('""")\n')
    dir.call_for_each_entry(print_a_file)

    def recurse(n, d):
        if d:
            print_files(d)
    dir.call_for_each_entry(recurse)

for dirpath, dirnames, filenames in os.walk(directory):
    dir = lookup(dirpath)
    for f in fnames:
        dir.entries[f] = None

subdir_list = []
collect_dirs(subdir_list, Top)
subdir_list = [ str(l) for l in subdir_list ]
sys.stdout.write('test.subdir(' + ',\n            '.join(subdir_list) + ')\n')

print_files(Top)

# Local Variables:
# tab-width:4
# indent-tabs-mode:nil
# End:
# vim: set expandtab tabstop=4 shiftwidth=4: