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