Chromium Code Reviews| Index: build/copy_test_data.py |
| diff --git a/build/copy_test_data.py b/build/copy_test_data.py |
| new file mode 100755 |
| index 0000000000000000000000000000000000000000..539fe1dd55ae464f24f21975dcce8e35d4ecedac |
| --- /dev/null |
| +++ b/build/copy_test_data.py |
| @@ -0,0 +1,89 @@ |
| +#!/usr/bin/env python |
| +# Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| +# Use of this source code is governed by a BSD-style license that can be |
| +# found in the LICENSE file. |
| + |
| +"""Copies test data files or directories into a given output directory.""" |
| + |
| +import optparse |
| +import os |
| +import shutil |
| +import sys |
| + |
| +class WrongNumberOfArgumentsException(Exception): |
| + pass |
| + |
| +def ListFilesForPath(path): |
| + """Returns a list of all the files under a given path.""" |
| + output = [] |
| + # Files get returned without modification. |
| + if not os.path.isdir(path): |
| + output.append(path) |
| + return output |
| + |
| + # Directories get recursively expanded. |
| + contents = os.listdir(path) |
| + for item in contents: |
| + full_path = os.path.join(path, item) |
| + output.extend(ListFilesForPath(full_path)) |
| + return output |
| + |
| +def CalcInputs(inputs): |
| + """Computes the full list of input files for a set of command-line arguments. |
| + """ |
| + # |inputs| is a list of strings, each of which may contain muliple paths |
| + # separated by spaces. |
| + output = [] |
| + for input in inputs: |
| + tokens = input.split() |
| + for token in tokens: |
| + output.extend(ListFilesForPath(token)) |
| + return output |
| + |
| +def CopyFiles(relative_filenames, output_basedir): |
| + """Copies files to the given output directory.""" |
| + for file in relative_filenames: |
| + relative_dirname = os.path.dirname(file) |
| + output_dir = os.path.join(output_basedir, relative_dirname) |
| + if not os.path.exists(output_dir): |
|
Mark Mentovai
2012/07/16 17:48:45
This doesn’t really handle the case where what was
|
| + os.makedirs(output_dir) |
| + output_filename = os.path.join(output_basedir, file) |
| + shutil.copy(file, output_filename) |
| + |
| +def DoMain(argv): |
| + parser = optparse.OptionParser() |
| + usage = 'Usage: %prog -o <output_dir> [--inputs] [--outputs] <input_files>' |
| + parser.set_usage(usage) |
| + parser.add_option('-o', dest='output_dir') |
| + parser.add_option('--inputs', action='store_true', dest='list_inputs') |
| + parser.add_option('--outputs', action='store_true', dest='list_outputs') |
| + options, arglist = parser.parse_args(argv) |
| + |
| + if len(arglist) == 0: |
| + raise WrongNumberOfArgumentsException('<input_files> required.') |
| + |
| + files_to_copy = CalcInputs(arglist) |
| + if options.list_inputs: |
| + return '\n'.join(files_to_copy) |
| + |
| + if not options.output_dir: |
| + raise WrongNumberOfArgumentsException('-o required.') |
| + |
| + if options.list_outputs: |
| + outputs = [os.path.join(options.output_dir, x) for x in files_to_copy] |
| + return '\n'.join(outputs) |
| + |
| + CopyFiles(files_to_copy, options.output_dir) |
| + return 0 |
| + |
| +def main(argv): |
| + try: |
| + result = DoMain(argv[1:]) |
| + except WrongNumberOfArguments, e: |
| + print >>sys.stderr, e |
| + return 1 |
| + print result |
| + return 0 |
| + |
| +if __name__ == '__main__': |
| + sys.exit(main(sys.argv)) |