12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Copyright (c) 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)"""Top-level presubmit script for bisect trybot.
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)details on the presubmit API built into gcl.
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)"""
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import imp
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)def _ExamineBisectConfigFile(input_api, output_api):
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for f in input_api.AffectedFiles():
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if not f.LocalPath().endswith('run-bisect-perf-regression.cfg'):
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      continue
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    try:
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      cfg_file = imp.load_source('config', 'run-bisect-perf-regression.cfg')
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      for k, v in cfg_file.config.iteritems():
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        if v:
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          return f.LocalPath()
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    except (IOError, AttributeError, TypeError):
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return f.LocalPath()
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return None
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)def _CheckNoChangesToBisectConfigFile(input_api, output_api):
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  results = _ExamineBisectConfigFile(input_api, output_api)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if results:
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return [output_api.PresubmitError(
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        'The bisection config file should only contain a config dict with '
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        'empty fields. Changes to this file should never be submitted.',
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        items=[results])]
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return []
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)def CommonChecks(input_api, output_api):
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  results = []
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  results.extend(_CheckNoChangesToBisectConfigFile(input_api, output_api))
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return results
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)def CheckChangeOnUpload(input_api, output_api):
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return CommonChecks(input_api, output_api)
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)def CheckChangeOnCommit(input_api, output_api):
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return CommonChecks(input_api, output_api)
49