Simplify PRESUBMIT.py and check_package_boundaries.py

Bug: webrtc:6954
Change-Id: Ia93eb8cc8a13bdcba5217fd8d52b72defa108b2f
Reviewed-on: https://webrtc-review.googlesource.com/6021
Commit-Queue: Oleh Prypin <oprypin@webrtc.org>
Reviewed-by: Henrik Kjellander <kjellander@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20158}
This commit is contained in:
Oleh Prypin
2017-10-04 20:17:54 +02:00
committed by Commit Bot
parent 1af3d82b10
commit 2f33a5671e
7 changed files with 96 additions and 127 deletions

View File

@ -9,9 +9,9 @@
import json
import os
import re
import subprocess
import sys
from collections import defaultdict
from contextlib import contextmanager
# Files and directories that are *skipped* by cpplint in the presubmit script.
@ -107,16 +107,15 @@ SOURCES_RE = re.compile(r'sources \+?= \[(?P<sources>.*?)\]',
FILE_PATH_RE = re.compile(r'"(?P<file_path>(\w|\/)+)(?P<extension>\.\w+)"')
def _RunCommand(command, cwd):
"""Runs a command and returns the output from that command."""
p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
cwd=cwd)
stdout = p.stdout.read()
stderr = p.stderr.read()
p.wait()
p.stdout.close()
p.stderr.close()
return p.returncode, stdout, stderr
@contextmanager
def _AddToPath(*paths):
original_sys_path = sys.path
sys.path.extend(paths)
try:
yield
finally:
# Restore sys.path to what it was before.
sys.path = original_sys_path
def VerifyNativeApiHeadersListIsValid(input_api, output_api):
@ -379,15 +378,15 @@ def CheckNoMixingSources(input_api, gn_files, output_api):
def CheckNoPackageBoundaryViolations(input_api, gn_files, output_api):
cwd = input_api.PresubmitLocalPath()
script_path = os.path.join('tools_webrtc', 'presubmit_checks_lib',
'check_package_boundaries.py')
command = [sys.executable, script_path, cwd]
command += [os.path.join(cwd, gn_file.LocalPath()) for gn_file in gn_files]
returncode, _, stderr = _RunCommand(command, cwd)
if returncode:
with _AddToPath(input_api.os_path.join(
cwd, 'tools_webrtc', 'presubmit_checks_lib')):
from check_package_boundaries import CheckPackageBoundaries
build_files = [os.path.join(cwd, gn_file.LocalPath()) for gn_file in gn_files]
errors = CheckPackageBoundaries(cwd, build_files)[:5]
if errors:
return [output_api.PresubmitError(
'There are package boundary violations in the following GN files:\n\n'
'%s' % stderr)]
'There are package boundary violations in the following GN files:',
long_text='\n\n'.join(str(err) for err in errors))]
return []
def CheckGnChanges(input_api, output_api):
@ -417,21 +416,16 @@ def CheckUnwantedDependencies(input_api, output_api):
# We need to wait until we have an input_api object and use this
# roundabout construct to import checkdeps because this file is
# eval-ed and thus doesn't have __file__.
original_sys_path = sys.path
try:
checkdeps_path = input_api.os_path.join(input_api.PresubmitLocalPath(),
'buildtools', 'checkdeps')
if not os.path.exists(checkdeps_path):
return [output_api.PresubmitError(
'Cannot find checkdeps at %s\nHave you run "gclient sync" to '
'download Chromium and setup the symlinks?' % checkdeps_path)]
sys.path.append(checkdeps_path)
checkdeps_path = input_api.os_path.join(input_api.PresubmitLocalPath(),
'buildtools', 'checkdeps')
if not os.path.exists(checkdeps_path):
return [output_api.PresubmitError(
'Cannot find checkdeps at %s\nHave you run "gclient sync" to '
'download all the DEPS entries?' % checkdeps_path)]
with _AddToPath(checkdeps_path):
import checkdeps
from cpp_checker import CppChecker
from rules import Rule
finally:
# Restore sys.path to what it was before.
sys.path = original_sys_path
added_includes = []
for f in input_api.AffectedFiles():
@ -708,15 +702,10 @@ def CheckOrphanHeaders(input_api, output_api):
error_msg = """Header file {} is not listed in any GN target.
Please create a target or add it to an existing one in {}"""
results = []
original_sys_path = sys.path
try:
sys.path = sys.path + [input_api.os_path.join(
input_api.PresubmitLocalPath(), 'tools_webrtc', 'presubmit_checks_lib')]
with _AddToPath(input_api.os_path.join(
input_api.PresubmitLocalPath(), 'tools_webrtc', 'presubmit_checks_lib')):
from check_orphan_headers import GetBuildGnPathFromFilePath
from check_orphan_headers import IsHeaderInBuildGn
finally:
# Restore sys.path to what it was before.
sys.path = original_sys_path
for f in input_api.AffectedSourceFiles(input_api.FilterSourceFile):
if f.LocalPath().endswith('.h') and f.Action() == 'A':