Index: scripts/common/chromium_utils.py |
diff --git a/scripts/common/chromium_utils.py b/scripts/common/chromium_utils.py |
index a5fc2296f7add14cabec1eebac12dad3ef520b2b..b8799b2c3a4a0f1e8e8b787c9bfa26a78cc2e13f 100644 |
--- a/scripts/common/chromium_utils.py |
+++ b/scripts/common/chromium_utils.py |
@@ -475,7 +475,7 @@ def CopyFileToDir(src_path, dest_dir, dest_fn=None): |
def MakeZip(output_dir, archive_name, file_list, file_relative_dir, |
- raise_error=True, remove_archive_directory=True): |
+ raise_error=True, remove_archive_directory=True, replacements=None): |
"""Packs files into a new zip archive. |
Files are first copied into a directory within the output_dir named for |
@@ -499,6 +499,10 @@ def MakeZip(output_dir, archive_name, file_list, file_relative_dir, |
the list is not found. |
remove_archive_directory: Whether to remove the archive staging directory |
before copying files over to it. |
+ replacements: A list of fun(path) -> path functions. For each file |
+ to add, transform the path with each function in replacements in order, |
+ and read data from the resulting file instead. i.e. foo.exe could actually |
+ contain data from foo.asan.exe. |
Returns: |
A tuple consisting of (archive_dir, zip_file_path), where archive_dir |
@@ -527,6 +531,15 @@ def MakeZip(output_dir, archive_name, file_list, file_relative_dir, |
# These paths are relative to the file_relative_dir. We need to copy |
# them over maintaining the relative directories, where applicable. |
src_path = os.path.join(file_relative_dir, needed_file) |
+ new_src_path = src_path |
+ for func in (replacements or []): |
+ new_src_path = func(src_path) |
+ if new_src_path is None: |
+ print 'Skipping %s' % src_path |
+ continue |
+ if new_src_path != src_path: |
+ print 'Replacing contents of %s with %s' % (src_path, new_src_path) |
+ src_path = new_src_path |
dirname, basename = os.path.split(needed_file) |
try: |
if os.path.isdir(src_path): |
@@ -535,9 +548,9 @@ def MakeZip(output_dir, archive_name, file_list, file_relative_dir, |
elif dirname != '' and basename != '': |
dest_dir = os.path.join(archive_dir, dirname) |
MaybeMakeDirectory(dest_dir) |
- CopyFileToDir(src_path, dest_dir) |
+ CopyFileToDir(src_path, dest_dir, basename) |
else: |
- CopyFileToDir(src_path, archive_dir) |
+ CopyFileToDir(src_path, archive_dir, basename) |
except PathNotFound: |
if raise_error: |
raise |