Chromium Code Reviews| Index: testing/buildbot/manage.py |
| diff --git a/testing/buildbot/manage.py b/testing/buildbot/manage.py |
| new file mode 100755 |
| index 0000000000000000000000000000000000000000..1ba69f04a1602c5ae573722c0a32a2d8835dee58 |
| --- /dev/null |
| +++ b/testing/buildbot/manage.py |
| @@ -0,0 +1,80 @@ |
| +#!/usr/bin/env python |
| +# Copyright 2015 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. |
| + |
| +"""Toolbox to manage all the json files in this directory. |
| + |
| +It can reformat them in their canonical format or ensures they are well |
| +formatted. |
| +""" |
| + |
| +import argparse |
| +import glob |
| +import json |
| +import os |
| +import sys |
| + |
| + |
| +THIS_DIR = os.path.dirname(os.path.abspath(__file__)) |
| + |
| + |
| +# These are not 'builders'. |
| +SKIP = { |
| + 'compile_targets', 'gtest_tests', 'filter_compile_builders', |
| + 'non_filter_builders', 'non_filter_tests_builders', |
| +} |
| + |
| + |
| +def upgrade_test(test): |
| + """Converts from old style string to new style dict.""" |
| + if isinstance(test, basestring): |
| + return {'test': test} |
| + assert isinstance(test, dict) |
| + return test |
| + |
| + |
| +def main(): |
| + parser = argparse.ArgumentParser(description=sys.modules[__name__].__doc__) |
| + group = parser.add_mutually_exclusive_group(required=True) |
| + group.add_argument( |
| + '-c', '--check', action='store_true', help='Only check the files') |
| + group.add_argument( |
| + '-w', '--write', action='store_true', help='Rewrite the files') |
| + args = parser.parse_args() |
| + |
| + result = 0 |
| + for filepath in glob.glob(os.path.join(THIS_DIR, '*.json')): |
| + filename = os.path.basename(filepath) |
| + with open(filepath) as f: |
| + content = f.read() |
| + config = json.loads(content) |
| + for builder, data in sorted(config.iteritems()): |
| + if builder in SKIP: |
| + # Oddities. |
| + continue |
| + |
| + if not isinstance(data, dict): |
| + print('%s: %s is broken: %s' % (filename, builder, data)) |
| + continue |
| + |
| + if 'gtest_tests' in data: |
| + config[builder]['gtest_tests'] = sorted( |
| + (upgrade_test(l) for l in data['gtest_tests']), |
| + key=lambda x: x['test']) |
| + |
| + expected = json.dumps( |
| + config, sort_keys=True, indent=2, separators=(',', ': ')) + '\n' |
| + if content != expected: |
| + result = 1 |
| + if args.write: |
| + with open(filepath, 'wb') as f: |
| + f.write(expected) |
| + print('Updated %s' % filename) |
| + else: |
| + print('%s is not in canonical format' % filename) |
|
Nico
2015/05/29 04:38:08
This is a pretty useless output. Maybe it could pr
|
| + return result |
| + |
| + |
| +if __name__ == "__main__": |
| + sys.exit(main()) |