Home | History | Annotate | Download | only in tools
      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 
      7 See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for
      8 details on the presubmit API built into gcl.
      9 """
     10 
     11 import imp
     12 import os
     13 
     14 def _ExamineConfigFiles(input_api):
     15   for f in input_api.AffectedFiles():
     16     if (not f.LocalPath().endswith('run-bisect-perf-regression.cfg') and
     17         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 def _CheckNoChangesToBisectConfigFile(input_api, output_api):
     32   results = _ExamineConfigFiles(input_api)
     33   if results:
     34     return [output_api.PresubmitError(
     35         'The bisection config file should only contain a config dict with '
     36         'empty fields. Changes to this file should never be submitted.',
     37         items=[results])]
     38 
     39   return []
     40 
     41 def CommonChecks(input_api, output_api):
     42   results = []
     43   results.extend(_CheckNoChangesToBisectConfigFile(input_api, output_api))
     44   return results
     45 
     46 def CheckChangeOnUpload(input_api, output_api):
     47   return CommonChecks(input_api, output_api)
     48 
     49 def CheckChangeOnCommit(input_api, output_api):
     50   return CommonChecks(input_api, output_api)
     51