Chromium Code Reviews| Index: android_webview/tools/webview_licenses.py |
| diff --git a/android_webview/tools/webview_licenses.py b/android_webview/tools/webview_licenses.py |
| index f747cb8a36f8559aac39b46695e28bb48c9f20e8..0e5d37c551cdccbd3888d2206d4392cd2651e710 100755 |
| --- a/android_webview/tools/webview_licenses.py |
| +++ b/android_webview/tools/webview_licenses.py |
| @@ -36,6 +36,8 @@ third_party = \ |
| imp.load_source('PRESUBMIT', \ |
| os.path.join(REPOSITORY_ROOT, 'third_party', 'PRESUBMIT.py')) |
| +sys.path.append(os.path.join(REPOSITORY_ROOT, 'build/android/gyp/util')) |
| +import build_utils |
| sys.path.append(os.path.join(REPOSITORY_ROOT, 'third_party')) |
| import jinja2 |
| sys.path.append(os.path.join(REPOSITORY_ROOT, 'tools')) |
| @@ -170,15 +172,9 @@ def _Scan(): |
| class TemplateEntryGenerator(object): |
| def __init__(self): |
| - self._generate_licenses_file_list_only = False |
| self._toc_index = 0 |
| - def SetGenerateLicensesFileListOnly(self, generate_licenses_file_list_only): |
| - self._generate_licenses_file_list_only = generate_licenses_file_list_only |
| - |
| def _ReadFileGuessEncoding(self, name): |
| - if self._generate_licenses_file_list_only: |
| - return '' |
| contents = '' |
| with open(name, 'rb') as input_file: |
| contents = input_file.read() |
| @@ -200,15 +196,13 @@ class TemplateEntryGenerator(object): |
| } |
| -def GenerateNoticeFile(generate_licenses_file_list_only=False): |
| +def GenerateNoticeFile(): |
| """Generates the contents of an Android NOTICE file for the third-party code. |
| This is used by the snapshot tool. |
| Returns: |
| - The contents of the NOTICE file. |
| + A tuple of (input paths, contents of the NOTICE file). |
| """ |
| - |
| generator = TemplateEntryGenerator() |
| - generator.SetGenerateLicensesFileListOnly(generate_licenses_file_list_only) |
| # Start from Chromium's LICENSE file |
| entries = [generator.MetadataToTemplateEntry({ |
| 'Name': 'The Chromium Project', |
| @@ -234,14 +228,16 @@ def GenerateNoticeFile(generate_licenses_file_list_only=False): |
| if license_file and license_file != licenses.NOT_SHIPPED: |
| entries.append(generator.MetadataToTemplateEntry(metadata)) |
| - if generate_licenses_file_list_only: |
| - return [entry['license_file'] for entry in entries] |
| - else: |
| - env = jinja2.Environment( |
| - loader=jinja2.FileSystemLoader(os.path.dirname(__file__)), |
| - extensions=['jinja2.ext.autoescape']) |
| - template = env.get_template('licenses_notice.tmpl') |
| - return template.render({ 'entries': entries }).encode('utf8') |
| + entries.sort(key=lambda entry: entry['name']) |
| + |
| + license_file_list = sorted(set([entry['license_file'] for entry in entries])) |
| + license_file_list = [os.path.relpath(p) for p in license_file_list] |
| + env = jinja2.Environment( |
| + loader=jinja2.FileSystemLoader(os.path.dirname(__file__)), |
| + extensions=['jinja2.ext.autoescape']) |
| + template = env.get_template('licenses_notice.tmpl') |
| + notice_file_contents = template.render({'entries': entries}).encode('utf8') |
| + return (license_file_list, notice_file_contents) |
| def main(): |
| @@ -254,16 +250,16 @@ def main(): |
| parser = optparse.OptionParser(formatter=FormatterWithNewLines(), |
| usage='%prog [options]') |
| parser.add_option('--json', help='Path to JSON output file') |
| + build_utils.AddDepfileOption(parser) |
| parser.description = (__doc__ + |
| '\nCommands:\n' |
| ' scan Check licenses.\n' |
| - ' notice_deps Generate the list of dependencies for ' |
| 'Android NOTICE file.\n' |
| ' notice [file] Generate Android NOTICE file on ' |
| 'stdout or into |file|.\n' |
| ' display_copyrights Display autorship on the files' |
| ' using names provided via stdin.\n') |
| - (options, args) = parser.parse_args() |
| + options, args = parser.parse_args() |
| if len(args) < 1: |
| parser.print_help() |
| return ScanResult.Errors |
| @@ -276,25 +272,23 @@ def main(): |
| with open(options.json, 'w') as f: |
| json.dump(problem_paths, f) |
| return scan_result |
| - elif args[0] == 'notice_deps': |
| - # 'set' is used to eliminate duplicate references to the same license file. |
| - print ' '.join( |
| - sorted(set(GenerateNoticeFile(generate_licenses_file_list_only=True)))) |
| - return ScanResult.Ok |
| - elif args[0] == 'gn_notice_deps': |
| - # generate list for gn. |
| - # 'set' is used to eliminate duplicate references to the same license file. |
| - gn_file_list = ['"' + f + '"' for f in |
| - sorted(set(GenerateNoticeFile(generate_licenses_file_list_only=True)))] |
| - print '[%s] ' % ','.join(gn_file_list) |
| - return ScanResult.Ok |
| elif args[0] == 'notice': |
| - notice_file_contents = GenerateNoticeFile() |
| + license_file_list, notice_file_contents = GenerateNoticeFile() |
| if len(args) == 1: |
| print notice_file_contents |
| else: |
| with open(args[1], 'w') as output_file: |
| output_file.write(notice_file_contents) |
| + if options.depfile: |
| + assert args[1] |
| + # Add in build.ninja so that the target will be considered dirty whenever |
| + # gn gen is run. Otherwise, it will fail to notice new files being added. |
| + # This is still no perfect, as it will fail if no build files are changed, |
| + # but a new README.chromium / LICENSE is added. This shouldn't happen in |
| + # practice however. |
| + build_utils.WriteDepfile(options.depfile, args[1], |
| + license_file_list + ['build.ninja']) |
| + |
|
Dirk Pranke
2017/02/10 00:15:59
I don't understand this block. Why do you want to
agrieve
2017/02/10 00:32:35
Before this change, it was scanning the filesystem
|
| return ScanResult.Ok |
| elif args[0] == 'display_copyrights': |
| files = sys.stdin.read().splitlines() |