Bug 1210642 - Allow to pass defines overrides when processing install manifests. r=gps

This commit is contained in:
Mike Hommey 2015-10-01 08:01:48 +09:00
Родитель f4de6bfe91
Коммит 95f5927160
2 изменённых файлов: 32 добавлений и 5 удалений

Просмотреть файл

@ -17,19 +17,36 @@ COMPLETE = 'From {dest}: Kept {existing} existing; Added/updated {updated}; ' \
def process_manifest(destdir, paths,
remove_unaccounted=True,
remove_all_directory_symlinks=True,
remove_empty_directories=True):
remove_empty_directories=True,
defines={}):
manifest = InstallManifest()
for path in paths:
manifest |= InstallManifest(path=path)
copier = FileCopier()
manifest.populate_registry(copier)
manifest.populate_registry(copier, defines_override=defines)
return copier.copy(destdir,
remove_unaccounted=remove_unaccounted,
remove_all_directory_symlinks=remove_all_directory_symlinks,
remove_empty_directories=remove_empty_directories)
class DefinesAction(argparse.Action):
def __call__(self, parser, namespace, values, option_string):
defines = getattr(namespace, self.dest)
if defines is None:
defines = {}
values = values.split('=', 1)
if len(values) == 1:
name, value = values[0], 1
else:
name, value = values
if value.isdigit():
value = int(value)
defines[name] = value
setattr(namespace, self.dest, defines)
def main(argv):
parser = argparse.ArgumentParser(
description='Process install manifest files.')
@ -42,13 +59,17 @@ def main(argv):
help='Do not remove all directory symlinks from destination.')
parser.add_argument('--no-remove-empty-directories', action='store_true',
help='Do not remove empty directories from destination.')
parser.add_argument('-D', action=DefinesAction,
dest='defines', metavar="VAR[=VAL]",
help='Define a variable to override what is specified in the manifest')
args = parser.parse_args(argv)
result = process_manifest(args.destdir, args.manifests,
remove_unaccounted=not args.no_remove,
remove_all_directory_symlinks=not args.no_remove_all_directory_symlinks,
remove_empty_directories=not args.no_remove_empty_directories)
remove_empty_directories=not args.no_remove_empty_directories,
defines=args.defines)
print(COMPLETE.format(dest=args.destdir,
existing=result.existing_files_count,

Просмотреть файл

@ -296,12 +296,15 @@ class InstallManifest(object):
self._dests[dest] = entry
def populate_registry(self, registry):
def populate_registry(self, registry, defines_override={}):
"""Populate a mozpack.copier.FileRegistry instance with data from us.
The caller supplied a FileRegistry instance (or at least something that
conforms to its interface) and that instance is populated with data
from this manifest.
Defines can be given to override the ones in the manifest for
preprocessing.
"""
for dest in sorted(self._dests):
entry = self._dests[dest]
@ -340,10 +343,13 @@ class InstallManifest(object):
continue
if install_type == self.PREPROCESS:
defines = self._decode_field_entry(entry[4])
if defines_override:
defines.update(defines_override)
registry.add(dest, PreprocessedFile(entry[1],
depfile_path=entry[2],
marker=entry[3],
defines=self._decode_field_entry(entry[4]),
defines=defines,
extra_depends=self._source_files))
continue