diff options
author | Doug Zongker <dougz@android.com> | 2010-02-22 15:41:53 -0800 |
---|---|---|
committer | Doug Zongker <dougz@android.com> | 2010-02-22 15:41:53 -0800 |
commit | c8d446bcde877ec94f8e68dd5af68fe34eb1b1f9 (patch) | |
tree | 5dc97330dcdce5fed9c6d7666e5949aed031c28b /tools | |
parent | 1af09dea7c5d25c806935975da1697af52b5af57 (diff) | |
download | build-c8d446bcde877ec94f8e68dd5af68fe34eb1b1f9.zip build-c8d446bcde877ec94f8e68dd5af68fe34eb1b1f9.tar.gz build-c8d446bcde877ec94f8e68dd5af68fe34eb1b1f9.tar.bz2 |
pass blobs to applypatch in incremental OTAs
applypatch now takes patches as blob-valued arguments instead of just
filenames, eliminating the need to unpack all patches to /tmp before
starting to apply them.
Revert the last change I made where sha1_check(read_file(...)) was
substituted for apply_patch_check(...). apply_patch_check() knows to
check /cache/saved.file if the original source file is missing or has
a bad checksum, which is important if the device loses power or
otherwise restarts during patching.
Change-Id: Ia5b761474b0f809a5a5eed29455b1b145145699e
Diffstat (limited to 'tools')
-rw-r--r-- | tools/releasetools/amend_generator.py | 4 | ||||
-rw-r--r-- | tools/releasetools/both_generator.py | 1 | ||||
-rw-r--r-- | tools/releasetools/edify_generator.py | 10 | ||||
-rwxr-xr-x | tools/releasetools/ota_from_target_files | 10 |
4 files changed, 16 insertions, 9 deletions
diff --git a/tools/releasetools/amend_generator.py b/tools/releasetools/amend_generator.py index f3dceca..b543bf7 100644 --- a/tools/releasetools/amend_generator.py +++ b/tools/releasetools/amend_generator.py @@ -100,6 +100,10 @@ class AmendGenerator(object): self.script.append("".join(out)) self.included_files.add(("applypatch_static", "applypatch")) + # Not quite right since we don't need to check /cache/saved.file on + # failure, but shouldn't hurt. + FileCheck = PatchCheck + def CacheFreeSpaceCheck(self, amount): """Check that there's at least 'amount' space that can be made available on /cache.""" diff --git a/tools/releasetools/both_generator.py b/tools/releasetools/both_generator.py index c042ae6..4ae8d50 100644 --- a/tools/releasetools/both_generator.py +++ b/tools/releasetools/both_generator.py @@ -41,6 +41,7 @@ class BothGenerator(object): def AssertSomeBootloader(self, *a): self._DoBoth("AssertSomeBootloader", *a) def ShowProgress(self, *a): self._DoBoth("ShowProgress", *a) def PatchCheck(self, *a): self._DoBoth("PatchCheck", *a) + def FileCheck(self, filename, *sha1): self._DoBoth("FileCheck", *a) def CacheFreeSpaceCheck(self, *a): self._DoBoth("CacheFreeSpaceCheck", *a) def Mount(self, *a): self._DoBoth("Mount", *a) def UnpackPackageDir(self, *a): self._DoBoth("UnpackPackageDir", *a) diff --git a/tools/releasetools/edify_generator.py b/tools/releasetools/edify_generator.py index 900bad1..68b0850 100644 --- a/tools/releasetools/edify_generator.py +++ b/tools/releasetools/edify_generator.py @@ -112,6 +112,14 @@ class EdifyGenerator(object): def PatchCheck(self, filename, *sha1): """Check that the given file (or MTD reference) has one of the + given *sha1 hashes, checking the version saved in cache if the + file does not match.""" + self.script.append('assert(apply_patch_check("%s"' % (filename,) + + "".join([', "%s"' % (i,) for i in sha1]) + + '));') + + def FileCheck(self, filename, *sha1): + """Check that the given file (or MTD reference) has one of the given *sha1 hashes.""" self.script.append('assert(sha1_check(read_file("%s")' % (filename,) + "".join([', "%s"' % (i,) for i in sha1]) + @@ -164,7 +172,7 @@ class EdifyGenerator(object): cmd = ['apply_patch("%s",\0"%s",\0%s,\0%d' % (srcfile, tgtfile, tgtsha1, tgtsize)] for i in range(0, len(patchpairs), 2): - cmd.append(',\0"%s:%s"' % patchpairs[i:i+2]) + cmd.append(',\0%s, package_extract_file("%s")' % patchpairs[i:i+2]) cmd.append(');') cmd = "".join(cmd) self.script.append(self._WordWrap(cmd)) diff --git a/tools/releasetools/ota_from_target_files b/tools/releasetools/ota_from_target_files index 1e3f9a3..70ab55f 100755 --- a/tools/releasetools/ota_from_target_files +++ b/tools/releasetools/ota_from_target_files @@ -690,11 +690,6 @@ def WriteIncrementalOTAPackage(target_zip, source_zip, output_zip): if patch_list or updating_recovery or updating_boot: script.CacheFreeSpaceCheck(largest_source_size) - script.Print("Unpacking patches...") - script.UnpackPackageDir("patch", "/tmp/patchtmp") - - for fn, tf, sf, size, patch_sha in patch_list: - script.PatchCheck("/tmp/patchtmp/" + tf.name + ".p", patch_sha) device_specific.IncrementalOTA_VerifyEnd() @@ -718,8 +713,7 @@ def WriteIncrementalOTAPackage(target_zip, source_zip, output_zip): script.Print("Patching system files...") for fn, tf, sf, size, _ in patch_list: - script.ApplyPatch("/"+fn, "-", tf.size, tf.sha1, - sf.sha1, "/tmp/patchtmp/"+fn+".p") + script.ApplyPatch("/"+fn, "-", tf.size, tf.sha1, sf.sha1, "patch/"+fn+".p") so_far += tf.size script.SetProgress(so_far / total_patch_size) @@ -733,7 +727,7 @@ def WriteIncrementalOTAPackage(target_zip, source_zip, output_zip): target_boot.size, target_boot.sha1), "-", target_boot.size, target_boot.sha1, - source_boot.sha1, "/tmp/patchtmp/boot.img.p") + source_boot.sha1, "patch/boot.img.p") so_far += target_boot.size script.SetProgress(so_far / total_patch_size) print "boot image changed; including." |