Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3017)

Unified Diff: android_webview/tools/webview_licenses.py

Issue 622493004: [Android WebView] Rewrite copyrights scanner in Python (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add license header to the manual test script Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « android_webview/tools/tests/non-generated-05 ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: android_webview/tools/webview_licenses.py
diff --git a/android_webview/tools/webview_licenses.py b/android_webview/tools/webview_licenses.py
index 11c85d1570e8bd012796a96277e1981adb124f68..8d0963077982207589c088d89fc416751290a66e 100755
--- a/android_webview/tools/webview_licenses.py
+++ b/android_webview/tools/webview_licenses.py
@@ -1,5 +1,5 @@
#!/usr/bin/python
-# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
@@ -22,7 +22,6 @@ import multiprocessing
import optparse
import os
import re
-import subprocess
import sys
import textwrap
@@ -40,6 +39,7 @@ third_party = \
sys.path.append(os.path.join(REPOSITORY_ROOT, 'tools'))
import licenses
+import copyright_scanner
import known_issues
class InputApi(object):
@@ -97,41 +97,12 @@ class ScanResult(object):
Ok, Warnings, Errors = range(3)
# Needs to be a top-level function for multiprocessing
-def _FindCopyrights(files_to_scan):
- args = [os.path.join('android_webview', 'tools', 'find_copyrights.pl')]
- p = subprocess.Popen(
- args=args, cwd=REPOSITORY_ROOT,
- stdin=subprocess.PIPE, stdout=subprocess.PIPE)
- lines = p.communicate(files_to_scan)[0].splitlines()
-
- offending_files = []
- allowed_copyrights = '^(?:\*No copyright\*' \
- '|20[0-9][0-9](?:-20[0-9][0-9])? The Chromium Authors\. ' \
- 'All rights reserved.*)$'
- allowed_copyrights_re = re.compile(allowed_copyrights)
- for l in lines:
- entries = l.split('\t')
- if entries[1] == "GENERATED FILE":
- continue
- copyrights = entries[1].split(' / ')
- for c in copyrights:
- if c and not allowed_copyrights_re.match(c):
- offending_files.append(os.path.normpath(entries[0]))
- break
- return offending_files
-
-def _ShardString(s, delimiter, shard_len):
- result = []
- index = 0
- last_pos = 0
- for m in re.finditer(delimiter, s):
- index += 1
- if index % shard_len == 0:
- result.append(s[last_pos:m.end()])
- last_pos = m.end()
- if not index % shard_len == 0:
- result.append(s[last_pos:])
- return result
+def _FindCopyrightViolations(files_to_scan_as_string):
+ return copyright_scanner.FindCopyrightViolations(
+ REPOSITORY_ROOT, files_to_scan_as_string)
+
+def _ShardList(l, shard_len):
+ return [l[i:i + shard_len] for i in range(0, len(l), shard_len)]
def _CheckLicenseHeaders(excluded_dirs_list, whitelisted_files):
"""Checks that all files which are not in a listed third-party directory,
@@ -185,16 +156,12 @@ def _CheckLicenseHeaders(excluded_dirs_list, whitelisted_files):
# This is not part of open source chromium, but are included on some bots.
excluded_dirs_list.append('skia/tools/clusterfuzz-data')
- args = [os.path.join('android_webview', 'tools', 'find_files.pl'),
- '.'
- ] + excluded_dirs_list
- p = subprocess.Popen(args=args, cwd=REPOSITORY_ROOT, stdout=subprocess.PIPE)
- files_to_scan = p.communicate()[0]
-
- sharded_files_to_scan = _ShardString(files_to_scan, '\n', 2000)
+ files_to_scan = copyright_scanner.FindFiles(
+ REPOSITORY_ROOT, ['.'], excluded_dirs_list)
+ sharded_files_to_scan = _ShardList(files_to_scan, 2000)
pool = multiprocessing.Pool()
offending_files_chunks = pool.map_async(
- _FindCopyrights, sharded_files_to_scan).get(999999)
+ _FindCopyrightViolations, sharded_files_to_scan).get(999999)
pool.close()
pool.join()
# Flatten out the result
@@ -234,7 +201,8 @@ def _ReadFile(path):
The contents of the file as a string.
"""
- return open(os.path.join(REPOSITORY_ROOT, path), 'rb').read()
+ with open(os.path.join(REPOSITORY_ROOT, path), 'rb') as f:
+ return f.read()
def _FindThirdPartyDirs():
@@ -347,14 +315,16 @@ def main():
parser = optparse.OptionParser(formatter=FormatterWithNewLines(),
usage='%prog [options]')
parser.description = (__doc__ +
- '\nCommands:\n' \
- ' scan Check licenses.\n' \
- ' notice Generate Android NOTICE file on stdout.\n' \
- ' incompatible_directories Scan for incompatibly'
- ' licensed directories.\n'
- ' all_incompatible_directories Scan for incompatibly'
- ' licensed directories (even those in'
- ' known_issues.py).\n')
+ '\nCommands:\n'
+ ' scan Check licenses.\n'
+ ' notice Generate Android NOTICE file on stdout.\n'
+ ' incompatible_directories Scan for incompatibly'
+ ' licensed directories.\n'
+ ' all_incompatible_directories Scan for incompatibly'
+ ' licensed directories (even those in'
+ ' known_issues.py).\n'
+ ' display_copyrights Display autorship on the files'
+ ' using names provided via stdin.\n')
(_, args) = parser.parse_args()
if len(args) != 1:
parser.print_help()
@@ -372,6 +342,11 @@ def main():
return _ProcessIncompatibleResult(GetUnknownIncompatibleDirectories())
elif args[0] == 'all_incompatible_directories':
return _ProcessIncompatibleResult(GetIncompatibleDirectories())
+ elif args[0] == 'display_copyrights':
+ files = sys.stdin.read().splitlines()
+ for f, c in zip(files, copyright_scanner.FindCopyrights('.', files)):
+ print f, '\t', ' / '.join(sorted(c))
+ return ScanResult.Ok
parser.print_help()
return ScanResult.Errors
« no previous file with comments | « android_webview/tools/tests/non-generated-05 ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698