aboutsummaryrefslogtreecommitdiffhomepage
path: root/PRESUBMIT.py
diff options
context:
space:
mode:
authorGravatar rmistry <rmistry@google.com>2015-03-12 07:48:40 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-03-12 07:48:40 -0700
commit01cbf6c4673b805ab80e2b37e35eb4c89b135a1b (patch)
treef3fae603d7b10ef611d2564ba1d3efb5a2375051 /PRESUBMIT.py
parent2e1c47e13551dfc592bd3d92074f3f4b69c4b6a9 (diff)
Make presubmit check that #if or #ifdef does not come before includes.
Diffstat (limited to 'PRESUBMIT.py')
-rw-r--r--PRESUBMIT.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index a4d90c8a8e..d62249a605 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -77,6 +77,47 @@ def _PythonChecks(input_api, output_api):
white_list=affected_python_files)
+def _IfDefChecks(input_api, output_api):
+ """Ensures if/ifdef are not before includes. See skbug/3362 for details."""
+ comment_block_start_pattern = re.compile('^\s*\/\*.*$')
+ comment_block_middle_pattern = re.compile('^\s+\*.*')
+ comment_block_end_pattern = re.compile('^\s+\*\/.*$')
+ single_line_comment_pattern = re.compile('^\s*//.*$')
+ def is_comment(line):
+ return (comment_block_start_pattern.match(line) or
+ comment_block_middle_pattern.match(line) or
+ comment_block_end_pattern.match(line) or
+ single_line_comment_pattern.match(line))
+
+ empty_line_pattern = re.compile('^\s*$')
+ def is_empty_line(line):
+ return empty_line_pattern.match(line)
+
+ failing_files = []
+ for affected_file in input_api.AffectedSourceFiles(None):
+ affected_file_path = affected_file.LocalPath()
+ if affected_file_path.endswith('.cpp') or affected_file_path.endswith('.h'):
+ f = open(affected_file_path)
+ for line in f.xreadlines():
+ if is_comment(line) or is_empty_line(line):
+ continue
+ # The below will be the first real line after comments and newlines.
+ if line.startswith('#if 0 '):
+ pass
+ elif line.startswith('#if ') or line.startswith('#ifdef '):
+ failing_files.append(affected_file_path)
+ break
+
+ results = []
+ if failing_files:
+ results.append(
+ output_api.PresubmitError(
+ 'The following files have #if or #ifdef before includes:\n%s\n\n'
+ 'See skbug.com/3362 for why this should be fixed.' %
+ '\n'.join(failing_files)))
+ return results
+
+
def _CommonChecks(input_api, output_api):
"""Presubmit checks common to upload and commit."""
results = []
@@ -90,6 +131,7 @@ def _CommonChecks(input_api, output_api):
_CheckChangeHasEol(
input_api, output_api, source_file_filter=sources))
results.extend(_PythonChecks(input_api, output_api))
+ results.extend(_IfDefChecks(input_api, output_api))
return results