Index: PRESUBMIT.py |
diff --git a/PRESUBMIT.py b/PRESUBMIT.py |
index 6751f06d18b4676e92e14bba1c44d6b3379c4ed3..444f5bb7212946a52549e20d2aa00093f78686b9 100644 |
--- a/PRESUBMIT.py |
+++ b/PRESUBMIT.py |
@@ -9,10 +9,6 @@ for more details about the presubmit API built into gcl. |
""" |
-import re |
-import sys |
- |
- |
_EXCLUDED_PATHS = ( |
r"^breakpad[\\\/].*", |
r"^native_client_sdk[\\\/]src[\\\/]build_tools[\\\/]make_rules.py", |
@@ -517,6 +513,7 @@ def _CheckUnwantedDependencies(input_api, output_api): |
change. Breaking - rules is an error, breaking ! rules is a |
warning. |
""" |
+ import sys |
# 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__. |
@@ -569,8 +566,8 @@ def _CheckFilePermissions(input_api, output_api): |
"""Check that all files have their permissions properly set.""" |
if input_api.platform == 'win32': |
return [] |
- args = [sys.executable, 'tools/checkperms/checkperms.py', '--root', |
- input_api.change.RepositoryRoot()] |
+ args = [input_api.python_executable, 'tools/checkperms/checkperms.py', |
+ '--root', input_api.change.RepositoryRoot()] |
for f in input_api.AffectedFiles(): |
args += ['--file', f.LocalPath()] |
checkperms = input_api.subprocess.Popen(args, |
@@ -969,14 +966,14 @@ def _CheckSpamLogging(input_api, output_api): |
for f in input_api.AffectedSourceFiles(source_file_filter): |
contents = input_api.ReadFile(f, 'rb') |
- if re.search(r"\bD?LOG\s*\(\s*INFO\s*\)", contents): |
+ if input_api.re.search(r"\bD?LOG\s*\(\s*INFO\s*\)", contents): |
log_info.append(f.LocalPath()) |
- elif re.search(r"\bD?LOG_IF\s*\(\s*INFO\s*,", contents): |
+ elif input_api.re.search(r"\bD?LOG_IF\s*\(\s*INFO\s*,", contents): |
log_info.append(f.LocalPath()) |
- if re.search(r"\bprintf\(", contents): |
+ if input_api.re.search(r"\bprintf\(", contents): |
printf.append(f.LocalPath()) |
- elif re.search(r"\bfprintf\((stdout|stderr)", contents): |
+ elif input_api.re.search(r"\bfprintf\((stdout|stderr)", contents): |
printf.append(f.LocalPath()) |
if log_info: |
@@ -1198,6 +1195,7 @@ def _CheckParseErrors(input_api, output_api): |
def _CheckJavaStyle(input_api, output_api): |
"""Runs checkstyle on changed java files and returns errors if any exist.""" |
+ import sys |
original_sys_path = sys.path |
try: |
sys.path = sys.path + [input_api.os_path.join( |
@@ -1259,6 +1257,23 @@ def _CheckNoDeprecatedCSS(input_api, output_api): |
(fpath.LocalPath(), line_num, deprecated_value, value))) |
return results |
+ |
+def _CheckForOverrideAndFinalRules(input_api, output_api): |
+ """Checks for final and override used as per C++11""" |
+ problems = [] |
+ for f in input_api.AffectedFiles(): |
+ if (f.LocalPath().endswith(('.cc', '.cpp', '.h', '.mm'))): |
+ for line_num, line in f.ChangedContents(): |
+ if (input_api.re.search(r'\b(FINAL|OVERRIDE)\b', line)): |
+ problems.append(' %s:%d' % (f.LocalPath(), line_num)) |
+ |
+ if not problems: |
+ return [] |
+ return [output_api.PresubmitError('Use C++11\'s |final| and |override| ' |
+ 'rather than FINAL and OVERRIDE.', |
+ problems)] |
+ |
+ |
def _CommonChecks(input_api, output_api): |
"""Checks common to both upload and commit.""" |
results = [] |
@@ -1300,6 +1315,7 @@ def _CommonChecks(input_api, output_api): |
results.extend(_CheckNoDeprecatedCSS(input_api, output_api)) |
results.extend(_CheckParseErrors(input_api, output_api)) |
results.extend(_CheckForIPCRules(input_api, output_api)) |
+ results.extend(_CheckForOverrideAndFinalRules(input_api, output_api)) |
if any('PRESUBMIT.py' == f.LocalPath() for f in input_api.AffectedFiles()): |
results.extend(input_api.canned_checks.RunUnitTestsInDirectory( |
@@ -1453,7 +1469,7 @@ def _CheckForUsingSideEffectsOfPass(input_api, output_api): |
if f.LocalPath().endswith(('.h', '.c', '.cc', '.m', '.mm')): |
for lnum, line in f.ChangedContents(): |
# Disallow Foo(*my_scoped_thing.Pass()); See crbug.com/418297. |
- if re.search(r'\*[a-zA-Z0-9_]+\.Pass\(\)', line): |
+ if input_api.re.search(r'\*[a-zA-Z0-9_]+\.Pass\(\)', line): |
errors.append(output_api.PresubmitError( |
('%s:%d uses *foo.Pass() to delete the contents of scoped_ptr. ' + |
'See crbug.com/418297.') % (f.LocalPath(), lnum))) |
@@ -1647,6 +1663,7 @@ def CheckChangeOnCommit(input_api, output_api): |
def GetPreferredTryMasters(project, change): |
+ import re |
files = change.LocalPaths() |
if not files or all(re.search(r'[\\\/]OWNERS$', f) for f in files): |