Commit e387aa3b authored by Takeshi Yoshino's avatar Takeshi Yoshino Committed by Commit Bot

Make PRESUBMIT.py check changes on src/WATCHLISTS

First, parse WATCHLISTS. If it parses, scan the lines to check that:
- the entries are sorted
- WATCHLIST_DEFINITIONS matches WATCHLISTS.

The scanner doesn't parse the dictionary literal but extracts names
using re assuming that:
- the lines providing the name of rules matches a regexp pattern
- WATCHLIST_DEFINITIONS comes before WATCHLISTS
as it's sufficient for this purpose.

Stop grouping blink_.* rules and separating from the others in
WATCHLISTS_DEFINTIONS. WATCHLISTS already has them mixed.

As a bonus, remove an unused method GetDefaultTryConfigs().

Bug: 
Change-Id: I92ccc1e4d31b9bdfb97f5cf187ee44191397c895
Reviewed-on: https://chromium-review.googlesource.com/593708
Commit-Queue: Paweł Hajdan Jr. <phajdan.jr@chromium.org>
Reviewed-by: default avatarDirk Pranke <dpranke@chromium.org>
Cr-Commit-Position: refs/heads/master@{#491353}
parent e91cfbaf
......@@ -2134,6 +2134,64 @@ def _CheckForRelativeIncludes(input_api, output_api):
return results
def _CheckEntriesInWATCHLISTSAreSorted(contents, input_api, output_api):
watchlists_start_re = input_api.re.compile(r"^ 'WATCHLISTS'")
entry_re = input_api.re.compile(r"^ '([\dA-Za-z_]+)'")
watchlist_definitions = []
watchlists = []
in_watchlists = False
for line in contents.split('\n'):
if not in_watchlists and watchlists_start_re.match(line) is not None:
in_watchlists = True
continue
m = entry_re.match(line)
if m is not None:
name = m.group(1)
if not in_watchlists:
watchlist_definitions.append(name)
else:
watchlists.append(name)
results = []
sorted_watchlist_definitions = sorted(watchlist_definitions)
if sorted_watchlist_definitions != watchlist_definitions:
results.append(output_api.PresubmitError(
'WATCHLIST_DEFINITIONS entries are not sorted'))
sorted_watchlists = sorted(watchlists)
if sorted_watchlists != watchlists:
results.append(output_api.PresubmitError(
'WATCHLISTS entries are not sorted'))
if watchlist_definitions != watchlists:
results.append(output_api.PresubmitError(
'WATCHLIST_DEFINITIONS doesn\'t match WATCHLISTS'))
return results
def _CheckWATCHLISTS(input_api, output_api):
for f in input_api.AffectedFiles(include_deletes=False):
if f.LocalPath() == 'WATCHLISTS':
contents = input_api.ReadFile(f, 'r')
try:
input_api.ast.literal_eval(contents)
except ValueError:
return [output_api.PresubmitError('Cannot parse WATCHLISTS' + e)]
except TypeError:
return [output_api.PresubmitError('Cannot parse WATCHLISTS' + e)]
return _CheckEntriesInWATCHLISTSAreSorted(contents, input_api, output_api)
return []
def _AndroidSpecificOnUploadChecks(input_api, output_api):
"""Groups checks that target android code."""
results = []
......@@ -2195,6 +2253,7 @@ def _CommonChecks(input_api, output_api):
results.extend(_CheckUselessForwardDeclarations(input_api, output_api))
results.extend(_CheckForRiskyJsFeatures(input_api, output_api))
results.extend(_CheckForRelativeIncludes(input_api, output_api))
results.extend(_CheckWATCHLISTS(input_api, output_api))
if any('PRESUBMIT.py' == f.LocalPath() for f in input_api.AffectedFiles()):
results.extend(input_api.canned_checks.RunUnitTestsInDirectory(
......@@ -2472,19 +2531,6 @@ def GetTryServerMasterForBot(bot):
return master
def GetDefaultTryConfigs(bots):
"""Returns a list of ('bot', set(['tests']), filtered by [bots].
"""
builders_and_tests = dict((bot, set(['defaulttests'])) for bot in bots)
# Build up the mapping from tryserver master to bot/test.
out = dict()
for bot, tests in builders_and_tests.iteritems():
out.setdefault(GetTryServerMasterForBot(bot), {})[bot] = tests
return out
def CheckChangeOnCommit(input_api, output_api):
results = []
results.extend(_CommonChecks(input_api, output_api))
......
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment