releasetools: Add common.ZipDelete().
We have been shelling out to 'zip -d' to delete existing ZIP entries in add_img_to_target_files.py. This CL moves the function into common.py, and calls that for the similar work in ota_from_target_files.py. This CL also adds unittests for the newly added function. Test: `m dist` Test: python -m unittest test_common Test: ota_from_target_files.py generates identical packages w/ and w/o the CL (so we know the streaming property computation is intact). Test: Run 'add_img_to_target_files.py -a' that triggers a call to ReplaceUpdatedFiles(). Change-Id: Icaa6c3ea3ee2166023f78fa79275295f837ea842
This commit is contained in:
@@ -1147,6 +1147,28 @@ def ZipWriteStr(zip_file, zinfo_or_arcname, data, perms=None,
|
||||
zipfile.ZIP64_LIMIT = saved_zip64_limit
|
||||
|
||||
|
||||
def ZipDelete(zip_filename, entries):
|
||||
"""Deletes entries from a ZIP file.
|
||||
|
||||
Since deleting entries from a ZIP file is not supported, it shells out to
|
||||
'zip -d'.
|
||||
|
||||
Args:
|
||||
zip_filename: The name of the ZIP file.
|
||||
entries: The name of the entry, or the list of names to be deleted.
|
||||
|
||||
Raises:
|
||||
AssertionError: In case of non-zero return from 'zip'.
|
||||
"""
|
||||
if isinstance(entries, basestring):
|
||||
entries = [entries]
|
||||
cmd = ["zip", "-d", zip_filename] + entries
|
||||
proc = Run(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
stdoutdata, _ = proc.communicate()
|
||||
assert proc.returncode == 0, "Failed to delete %s:\n%s" % (entries,
|
||||
stdoutdata)
|
||||
|
||||
|
||||
def ZipClose(zip_file):
|
||||
# http://b/18015246
|
||||
# zipfile also refers to ZIP64_LIMIT during close() when it writes out the
|
||||
|
Reference in New Issue
Block a user