146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)# Copyright 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file.
4effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
5effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch"""Presubmit script for changes affecting tools/perf/.
6effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
7effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochSee http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
8effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochfor more details about the presubmit API built into gcl (and git-cl).
9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch"""
10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import os
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import sys
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PYLINT_BLACKLIST = []
15effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochPYLINT_DISABLED_WARNINGS = [
16effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    'R0923',  # Interface not implemented
17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    'R0201',  # Method could be a function
18effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    'E1101',  # Non-existent member is accessed.
19effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch]
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def _CommonChecks(input_api, output_api):
23effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  """Performs common checks, which includes running pylint."""
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  results = []
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  old_sys_path = sys.path
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  try:
27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    # Modules in tools/perf depend on telemetry.
28a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    sys.path = [os.path.join(os.pardir, 'telemetry')] + sys.path
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    results.extend(input_api.canned_checks.RunPylint(
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        input_api, output_api,
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        black_list=PYLINT_BLACKLIST,
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        disabled_warnings=PYLINT_DISABLED_WARNINGS))
33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    results.extend(_CheckJson(input_api, output_api))
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  finally:
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sys.path = old_sys_path
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return results
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
38a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochdef _CheckJson(input_api, output_api):
40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  """Checks whether JSON files in this change can be parsed."""
41e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  for affected_file in input_api.AffectedFiles(include_deletes=False):
42e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    filename = affected_file.AbsoluteLocalPath()
43e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    if os.path.splitext(filename)[1] != '.json':
44e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      continue
45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    try:
46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      input_api.json.load(open(filename))
47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    except ValueError:
48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      return [output_api.PresubmitError('Error parsing JSON in %s!' % filename)]
49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  return []
50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def CheckChangeOnUpload(input_api, output_api):
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  report = []
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  report.extend(_CommonChecks(input_api, output_api))
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return report
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
57a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def CheckChangeOnCommit(input_api, output_api):
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  report = []
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  report.extend(_CommonChecks(input_api, output_api))
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return report
62