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