| Index: tools/resources/list_resources_removed_by_repack.py
|
| ===================================================================
|
| --- tools/resources/list_resources_removed_by_repack.py (revision 0)
|
| +++ tools/resources/list_resources_removed_by_repack.py (revision 0)
|
| @@ -0,0 +1,99 @@
|
| +#!/usr/bin/env python
|
| +# 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.
|
| +
|
| +
|
| +import os
|
| +import re
|
| +import sys
|
| +
|
| +usage = """%s BUILDTYPE BUILDDIR
|
| +
|
| +BUILDTYPE: either chromium or chrome.
|
| +BUILDDIR: The path to the output directory. e.g. relpath/to/out/Release
|
| +
|
| +Prints out (to stdout) the sorted list of resource ids that are marked as
|
| +unused during the repacking process in the given build log (via stdin).
|
| +Additionally, attempt to print out the name of the resource and the generated
|
| +header file that contains the resource.
|
| +
|
| +This script is used to print the list of resources that are not used so that
|
| +developers will notice and fix their .grd files.
|
| +"""
|
| +
|
| +
|
| +def GetResourceIdsFromRepackMessage(in_data):
|
| + """Returns sorted set of resource ids that are not used from in_data.
|
| + """
|
| + unused_resources = set()
|
| + unused_pattern = re.compile(
|
| + 'RePackFromDataPackStrings Removed Key: (?P<resource_id>[0-9]+)')
|
| + for line in in_data:
|
| + match = unused_pattern.match(line)
|
| + if match:
|
| + resource_id = int(match.group('resource_id'))
|
| + unused_resources.add(resource_id)
|
| + return sorted(unused_resources)
|
| +
|
| +
|
| +def Main():
|
| + if len(sys.argv) != 3:
|
| + sys.stderr.write(usage % sys.argv[0])
|
| + return 1
|
| +
|
| + build_type = sys.argv[1]
|
| + build_dir = sys.argv[2]
|
| +
|
| + if build_type not in ('chromium', 'chrome'):
|
| + sys.stderr.write(usage % sys.argv[0])
|
| + return 1
|
| +
|
| + generated_output_dir = os.path.join(build_dir, 'gen')
|
| + if not os.path.exists(generated_output_dir):
|
| + sys.stderr.write('Cannot find gen dir %s' % generated_output_dir)
|
| + return 1
|
| +
|
| + if build_type == 'chromium':
|
| + excluded_header = 'google_chrome_strings.h'
|
| + else:
|
| + excluded_header = 'chromium_strings.h'
|
| + data_files = []
|
| + for root, dirs, files in os.walk(generated_output_dir):
|
| + if os.path.basename(root) != 'grit':
|
| + continue
|
| +
|
| + header_files = [header for header in files if header.endswith('.h')]
|
| + if excluded_header in header_files:
|
| + header_files.remove(excluded_header)
|
| + data_files.extend([os.path.join(root, header) for header in header_files])
|
| +
|
| + resource_id_to_name_file_map = {}
|
| + resource_pattern = re.compile('#define (?P<resource_name>[A-Z0-9_]+).* '
|
| + '(?P<resource_id>[0-9]+)$')
|
| + for f in data_files:
|
| + data = open(f).read()
|
| + for line in data.splitlines():
|
| + match = resource_pattern.match(line)
|
| + if match:
|
| + resource_id = int(match.group('resource_id'))
|
| + resource_name = match.group('resource_name')
|
| + if resource_id in resource_id_to_name_file_map:
|
| + print 'Duplicate:', resource_id
|
| + print (resource_name, f)
|
| + print resource_id_to_name_file_map[resource_id]
|
| + raise
|
| + resource_id_to_name_file_map[resource_id] = (resource_name, f)
|
| +
|
| + unused_resources = GetResourceIdsFromRepackMessage(sys.stdin)
|
| + for resource_id in unused_resources:
|
| + if resource_id not in resource_id_to_name_file_map:
|
| + print 'WARNING: Unknown resource id', resource_id
|
| + continue
|
| + (resource_name, filename) = resource_id_to_name_file_map[resource_id]
|
| + sys.stdout.write('%d: %s in %s\n' % (resource_id, resource_name, filename))
|
| + return 0
|
| +
|
| +
|
| +if __name__ == '__main__':
|
| + sys.exit(Main())
|
|
|
| Property changes on: tools/resources/list_resources_removed_by_repack.py
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
| Added: svn:executable
|
| + *
|
|
|
|
|