1# Copyright (c) 2013 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5"""Top-level presubmit script for bisect/perf trybot.
6
7See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for
8details on the presubmit API built into gcl.
9"""
10
11import imp
12import os
13
14
15def _ExamineConfigFiles(input_api):
16    for f in input_api.AffectedFiles():
17        if (not f.LocalPath().endswith('run-perf-test.cfg')):
18            continue
19
20        try:
21            cfg_file = imp.load_source('config', os.path.basename(f.LocalPath()))
22
23            for k, v in cfg_file.config.iteritems():
24                if v:
25                    return f.LocalPath()
26        except (IOError, AttributeError, TypeError):
27            return f.LocalPath()
28
29    return None
30
31
32def _CheckNoChangesToBisectConfigFile(input_api, output_api):
33    results = _ExamineConfigFiles(input_api)
34    if results:
35        return [output_api.PresubmitError(
36            'The perf try config file should only contain a config dict with '
37            'empty fields. Changes to this file should never be submitted.',
38            items=[results])]
39
40    return []
41
42
43def CommonChecks(input_api, output_api):
44    results = []
45    results.extend(_CheckNoChangesToBisectConfigFile(input_api, output_api))
46    return results
47
48
49def CheckChangeOnUpload(input_api, output_api):
50    return CommonChecks(input_api, output_api)
51
52
53def CheckChangeOnCommit(input_api, output_api):
54    return CommonChecks(input_api, output_api)
55