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