Index: build/copy_test_data_ios.py |
diff --git a/build/copy_test_data_ios.py b/build/copy_test_data_ios.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..e6c6a386084624085125ff0a5aad5600dcb2b1b9 |
--- /dev/null |
+++ b/build/copy_test_data_ios.py |
@@ -0,0 +1,98 @@ |
+#!/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) |
+ output_filename = os.path.join(output_basedir, file) |
+ |
+ # In cases where a directory has turned into a file or vice versa, delete it |
+ # before copying it below. |
+ if os.path.exists(output_dir) and not os.path.isdir(output_dir): |
+ os.remove(output_dir) |
+ if os.path.exists(output_filename) and os.path.isdir(output_filename): |
+ shutil.rmtree(output_filename) |
+ |
+ if not os.path.exists(output_dir): |
+ os.makedirs(output_dir) |
+ 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 |
+ |
+def main(argv): |
+ try: |
+ result = DoMain(argv[1:]) |
+ except WrongNumberOfArgumentsException, e: |
+ print >>sys.stderr, e |
+ return 1 |
+ if result: |
+ print result |
+ return 0 |
+ |
+if __name__ == '__main__': |
+ sys.exit(main(sys.argv)) |