releasetools: Fix the bug in symlink deletion.
For file-based OTAs, symlinks in the source build but not in the target build will be deleted. However, if a symlink is replaced by a regular file in the target build, the file will be accidentally deleted when applying (resuming) the same package again. Verify the checksum of a symlink that will be unpacked or renamed to. Delete the file only if it doesn't have the target checksum. Bug: 23646151 Change-Id: Ie322abb6022b6fa812c6b36a3127872d9614fc3b
This commit is contained in:
@@ -243,6 +243,15 @@ class EdifyGenerator(object):
|
||||
cmd = "delete(" + ",\0".join(['"%s"' % (i,) for i in file_list]) + ");"
|
||||
self.script.append(self.WordWrap(cmd))
|
||||
|
||||
def DeleteFilesIfNotMatching(self, file_list):
|
||||
"""Delete the file in file_list if not matching the checksum."""
|
||||
if not file_list:
|
||||
return
|
||||
for name, sha1 in file_list:
|
||||
cmd = ('sha1_check(read_file("{name}"), "{sha1}") || '
|
||||
'delete("{name}");'.format(name=name, sha1=sha1))
|
||||
self.script.append(self.WordWrap(cmd))
|
||||
|
||||
def RenameFile(self, srcfile, tgtfile):
|
||||
"""Moves a file from one location to another."""
|
||||
if self.info.get("update_rename_support", False):
|
||||
@@ -254,7 +263,7 @@ class EdifyGenerator(object):
|
||||
"""Prepend an action with an apply_patch_check in order to
|
||||
skip the action if the file exists. Used when a patch
|
||||
is later renamed."""
|
||||
cmd = ('sha1_check(read_file("%s"), %s) || ' % (tgtfile, tgtsha1))
|
||||
cmd = ('sha1_check(read_file("%s"), %s) ||' % (tgtfile, tgtsha1))
|
||||
self.script.append(self.WordWrap(cmd))
|
||||
|
||||
def ApplyPatch(self, srcfile, tgtfile, tgtsize, tgtsha1, *patchpairs):
|
||||
|
Reference in New Issue
Block a user