text: # Copyright 2012 The Chromium Authors. All rights reserved.
  # Use of this source code is governed by a BSD-style license that can be
  # found in the LICENSE file.
  
  """Presubmit script for changes affecting tools/perf/.
  
  See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
  for more details about the presubmit API built into gcl (and git-cl).
  """
  
  import os
  import sys
  
  PYLINT_BLACKLIST = []
  PYLINT_DISABLED_WARNINGS = [
      'R0923',  # Interface not implemented
      'R0201',  # Method could be a function
      'E1101',  # Non-existent member is accessed.
  ]
  
  
  def _CommonChecks(input_api, output_api):
    """Performs common checks, which includes running pylint."""
    results = []
    old_sys_path = sys.path
    try:
      # Modules in tools/perf depend on telemetry.
      sys.path = [os.path.join(os.pardir, 'telemetry')] + sys.path
      results.extend(input_api.canned_checks.RunPylint(
          input_api, output_api,
          black_list=PYLINT_BLACKLIST,
          disabled_warnings=PYLINT_DISABLED_WARNINGS))
      results.extend(_CheckJson(input_api, output_api))
    finally:
      sys.path = old_sys_path
    return results
  
  
  def _CheckJson(input_api, output_api):
    """Checks whether JSON files in this change can be parsed."""
    for affected_file in input_api.AffectedFiles(include_deletes=False):
      filename = affected_file.AbsoluteLocalPath()
      if os.path.splitext(filename)[1] != '.json':
        continue
      try:
        input_api.json.load(open(filename))
      except ValueError:
        return [output_api.PresubmitError('Error parsing JSON in %s!' % filename)]
    return []
  
  
  def CheckChangeOnUpload(input_api, output_api):
    report = []
    report.extend(_CommonChecks(input_api, output_api))
    return report
  
  
  def CheckChangeOnCommit(input_api, output_api):
    report = []
    report.extend(_CommonChecks(input_api, output_api))
    return report
  