| Index: gm/rename_config.py
|
| diff --git a/gm/rename_config.py b/gm/rename_config.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..d1c6d568a7e2ca08201157a3f97ad8962f4e9d08
|
| --- /dev/null
|
| +++ b/gm/rename_config.py
|
| @@ -0,0 +1,104 @@
|
| +#!/usr/bin/python
|
| +# Copyright (c) 2014 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.
|
| +
|
| +"""Utility to rename a config in some subset of our GM expectation files.
|
| +
|
| +Created for http://skbug.com/2752 ('split existing "gpu" GM results into "gl"
|
| +and "gles"')
|
| +
|
| +Run with -h to see usage.
|
| +
|
| +Example command lines:
|
| + rename_config.py gpu gles '.*Android.*'
|
| +
|
| +TODO(epoger): Once https://codereview.chromium.org/397103003/ is committed,
|
| +we should add a unittest. Until then, we can test this as follows:
|
| +
|
| +OLD=expectations/gm && NEW=/tmp/expectations && \
|
| + rm -rf $NEW && \
|
| + cp -a $OLD $NEW && \
|
| + gm/rename_config.py msaa4 gles-msaa4 '.*Android.*' \
|
| + --expectations-root $NEW && \
|
| + diff --recursive $OLD $NEW
|
| +"""
|
| +__author__ = 'Elliot Poger'
|
| +
|
| +import argparse
|
| +import os
|
| +import re
|
| +
|
| +import gm_json
|
| +
|
| +DEFAULT_EXPECTATIONS_ROOT = os.path.join(
|
| + os.path.dirname(__file__), os.pardir, 'expectations', 'gm')
|
| +IMAGE_FILENAME_RE = re.compile(gm_json.IMAGE_FILENAME_PATTERN)
|
| +
|
| +
|
| +class Renamer(object):
|
| +
|
| + def __init__(self, args):
|
| + """
|
| + Params:
|
| + args: the Namespace object generated by argparse.parse_args()
|
| + """
|
| + self._args = args
|
| +
|
| + def run(self):
|
| + """Perform all the subsitutions."""
|
| + for path in self._get_file_list():
|
| + self._rename_config(path=path,
|
| + old=self._args.old_config_name,
|
| + new=self._args.new_config_name)
|
| +
|
| + def _rename_config(self, path, old, new):
|
| + """Renames all instances of a config within a GM expectations file.
|
| +
|
| + Params:
|
| + path: path to file which will be modified in place
|
| + old: old config name
|
| + new: new config name
|
| + """
|
| + dic = gm_json.LoadFromFile(file_path=path)
|
| + expected_results = dic[gm_json.JSONKEY_EXPECTEDRESULTS]
|
| + orig_keys = expected_results.keys()
|
| + for key in orig_keys:
|
| + result = expected_results.pop(key)
|
| + (testname, config) = IMAGE_FILENAME_RE.match(key).groups()
|
| + if config == old:
|
| + config = new
|
| + key = '%s_%s.png' % (testname, config)
|
| + expected_results[key] = result
|
| + gm_json.WriteToFile(json_dict=dic, file_path=path)
|
| +
|
| + def _get_file_list(self):
|
| + """Returns the list of files we want to operate on (the complete path
|
| + to each file)."""
|
| + root = self._args.expectations_root
|
| + regex = re.compile(self._args.builder_name_pattern)
|
| + return [os.path.join(root, builder, 'expected-results.json')
|
| + for builder in os.listdir(root)
|
| + if regex.match(builder)]
|
| +
|
| +
|
| +def main():
|
| + parser = argparse.ArgumentParser()
|
| + parser.add_argument('old_config_name',
|
| + help=('Config name we want to replace.'))
|
| + parser.add_argument('new_config_name',
|
| + help=('Config name we want to replace the old one with.'))
|
| + parser.add_argument('builder_name_pattern',
|
| + help=('Regex pattern describing which builders we want '
|
| + 'to make the substitution for; \'.*\' to perform '
|
| + 'the replacement on all builders.'))
|
| + parser.add_argument('--expectations-root',
|
| + default=DEFAULT_EXPECTATIONS_ROOT,
|
| + help=('Root of the GM expectations dir; defaults to '
|
| + '%(default)s'))
|
| + args = parser.parse_args()
|
| + renamer = Renamer(args)
|
| + renamer.run()
|
| +
|
| +if __name__ == '__main__':
|
| + main()
|
|
|