Index: tools/isolate/trace_test_cases.py |
diff --git a/tools/isolate/trace_test_cases.py b/tools/isolate/trace_test_cases.py |
index df807c164103f17106ba96d48aa51bdbaf5ea3d3..f010fbe14dfbc7cc18978577fc630e9ddfa90141 100755 |
--- a/tools/isolate/trace_test_cases.py |
+++ b/tools/isolate/trace_test_cases.py |
@@ -135,6 +135,8 @@ def trace_test_cases( |
else: |
print >> sys.stderr, 'Got exception while tracing %s: %s' % ( |
item['trace'], item['exception']) |
+ print '%.1fs Done stripping root.' % ( |
+ time.time() - progress.start) |
# Flatten. |
flattened = {} |
@@ -152,12 +154,16 @@ def trace_test_cases( |
'returncode': item['returncode'], |
'valid': item['valid'], |
'variables': |
- isolate_common.generate_dict( |
- sorted(f.path for f in item_results.files), |
- cwd_dir, |
- variables['<(PRODUCT_DIR)']), |
+ isolate_common.generate_simplified( |
+ item_results.existent, |
+ root_dir, |
+ variables, |
+ cwd_dir), |
}) |
del flattened[test_case]['trace'] |
+ print '%.1fs Done flattening.' % ( |
+ time.time() - progress.start) |
+ |
# Make it dense if there is more than 20 results. |
trace_inputs.write_json( |
output_file, |
@@ -172,9 +178,11 @@ def trace_test_cases( |
# Convert back to a list, discard the keys. |
files = files.values() |
- # TODO(maruel): Have isolate_common process a dict of variables. |
- value = isolate_common.generate_dict( |
- sorted(f.path for f in files), cwd_dir, variables['<(PRODUCT_DIR)']) |
+ value = isolate_common.generate_isolate( |
+ files, |
+ root_dir, |
+ variables, |
+ cwd_dir) |
with open('%s.isolate' % output_file, 'wb') as f: |
isolate_common.pretty_print(value, f) |
return 0 |
@@ -182,6 +190,11 @@ def trace_test_cases( |
def main(): |
"""CLI frontend to validate arguments.""" |
+ default_variables = [('OS', isolate_common.get_flavor())] |
+ if sys.platform in ('win32', 'cygwin'): |
+ default_variables.append(('EXECUTABLE_SUFFIX', '.exe')) |
+ else: |
+ default_variables.append(('EXECUTABLE_SUFFIX', '')) |
parser = optparse.OptionParser( |
usage='%prog <options> [gtest]', |
description=sys.modules['__main__'].__doc__) |
@@ -194,9 +207,13 @@ def main(): |
'gyp processing. Should be set to the relative path containing the ' |
'gyp file, e.g. \'chrome\' or \'net\'') |
parser.add_option( |
- '-p', '--product-dir', |
- default='out/Release', |
- help='Directory for PRODUCT_DIR. Default: %default') |
+ '-V', '--variable', |
+ nargs=2, |
+ action='append', |
+ default=default_variables, |
+ dest='variables', |
+ metavar='FOO BAR', |
+ help='Variables to process in the .isolate file, default: %default') |
parser.add_option( |
'--root-dir', |
default=ROOT_DIR, |
@@ -225,8 +242,18 @@ def main(): |
default=120, |
type='int', |
help='number of parallel jobs') |
+ parser.add_option( |
+ '-v', '--verbose', |
+ action='count', |
+ default=0, |
+ help='Use multiple times to increase verbosity') |
options, args = parser.parse_args() |
+ levels = [logging.ERROR, logging.WARNING, logging.INFO, logging.DEBUG] |
+ logging.basicConfig( |
+ level=levels[min(len(levels)-1, options.verbose)], |
+ format='%(levelname)5s %(module)15s(%(lineno)3d): %(message)s') |
+ |
if len(args) != 1: |
parser.error( |
'Please provide the executable line to run, if you need fancy things ' |
@@ -234,15 +261,14 @@ def main(): |
'.') |
executable = args[0] |
if not os.path.isabs(executable): |
- executable = os.path.join(options.root_dir, options.product_dir, args[0]) |
+ executable = os.path.abspath(os.path.join(options.root_dir, executable)) |
if not options.out: |
options.out = '%s.test_cases' % executable |
- variables = {'<(PRODUCT_DIR)': options.product_dir} |
return trace_test_cases( |
executable, |
options.root_dir, |
options.cwd, |
- variables, |
+ dict(options.variables), |
options.whitelist, |
options.blacklist, |
options.jobs, |