diff options
author | Doug Zongker <dougz@google.com> | 2014-08-05 10:39:37 -0700 |
---|---|---|
committer | Doug Zongker <dougz@google.com> | 2014-08-05 10:39:37 -0700 |
commit | f83400896de5e8bc2b21a0dce98382d9ed0ab537 (patch) | |
tree | ce09db088625b5f0f3c1f7ea2fcd74388f41aaa0 /tools | |
parent | 56d91dd07f96039344d6976da5d985d2508c9365 (diff) | |
download | replicant_build-f83400896de5e8bc2b21a0dce98382d9ed0ab537.zip replicant_build-f83400896de5e8bc2b21a0dce98382d9ed0ab537.tar.gz replicant_build-f83400896de5e8bc2b21a0dce98382d9ed0ab537.tar.bz2 |
add 5 minute timeout on binary patch construction
When making bsdiff/imgdiff patches, give up after 5 minutes. (On
certain large files it can take hours to build a patch, if it ever
even completes.)
Change-Id: I123c06f8194f85f6f4e640f7eb31c7746f76ba4d
Diffstat (limited to 'tools')
-rw-r--r-- | tools/releasetools/common.py | 22 | ||||
-rwxr-xr-x | tools/releasetools/ota_from_target_files | 52 |
2 files changed, 50 insertions, 24 deletions
diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py index 15964b1..50ef451 100644 --- a/tools/releasetools/common.py +++ b/tools/releasetools/common.py @@ -900,10 +900,26 @@ class Difference(object): cmd.append(ttemp.name) cmd.append(ptemp.name) p = Run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - _, err = p.communicate() + err = [] + def run(): + _, e = p.communicate() + if e: err.append(e) + th = threading.Thread(target=run) + th.start() + th.join(timeout=300) # 5 mins + if th.is_alive(): + print "WARNING: diff command timed out" + p.terminate() + th.join(5) + if th.is_alive(): + p.kill() + th.join() + if err or p.returncode != 0: - print "WARNING: failure running %s:\n%s\n" % (diff_program, err) - return None + print "WARNING: failure running %s:\n%s\n" % ( + diff_program, "".join(err)) + self.patch = None + return None, None, None diff = ptemp.read() finally: ptemp.close() diff --git a/tools/releasetools/ota_from_target_files b/tools/releasetools/ota_from_target_files index f848fd5..9f70167 100755 --- a/tools/releasetools/ota_from_target_files +++ b/tools/releasetools/ota_from_target_files @@ -853,19 +853,24 @@ else if get_stage("%(bcb_dev)s", "stage") != "3/3" then GetBuildProp("ro.build.thumbprint", OPTIONS.source_info_dict)) if updating_boot: + boot_type, boot_device = common.GetTypeAndDevice("/boot", OPTIONS.info_dict) d = common.Difference(target_boot, source_boot) _, _, d = d.ComputePatch() - print "boot target: %d source: %d diff: %d" % ( - target_boot.size, source_boot.size, len(d)) + if d is None: + include_full_boot = True + common.ZipWriteStr(output_zip, "boot.img", target_boot.data) + else: + include_full_boot = False - common.ZipWriteStr(output_zip, "patch/boot.img.p", d) + print "boot target: %d source: %d diff: %d" % ( + target_boot.size, source_boot.size, len(d)) - boot_type, boot_device = common.GetTypeAndDevice("/boot", OPTIONS.info_dict) + common.ZipWriteStr(output_zip, "patch/boot.img.p", d) - script.PatchCheck("%s:%s:%d:%s:%d:%s" % - (boot_type, boot_device, - source_boot.size, source_boot.sha1, - target_boot.size, target_boot.sha1)) + script.PatchCheck("%s:%s:%d:%s:%d:%s" % + (boot_type, boot_device, + source_boot.size, source_boot.sha1, + target_boot.size, target_boot.sha1)) device_specific.IncrementalOTA_VerifyEnd() @@ -906,19 +911,24 @@ else if not OPTIONS.two_step: if updating_boot: - # Produce the boot image by applying a patch to the current - # contents of the boot partition, and write it back to the - # partition. - script.Print("Patching boot image...") - script.ShowProgress(0.1, 10) - script.ApplyPatch("%s:%s:%d:%s:%d:%s" - % (boot_type, boot_device, - source_boot.size, source_boot.sha1, - target_boot.size, target_boot.sha1), - "-", - target_boot.size, target_boot.sha1, - source_boot.sha1, "patch/boot.img.p") - print "boot image changed; including." + if include_full_boot: + print "boot image changed; including full." + script.Print("Installing boot image...") + script.WriteRawImage("/boot", "boot.img") + else: + # Produce the boot image by applying a patch to the current + # contents of the boot partition, and write it back to the + # partition. + print "boot image changed; including patch." + script.Print("Patching boot image...") + script.ShowProgress(0.1, 10) + script.ApplyPatch("%s:%s:%d:%s:%d:%s" + % (boot_type, boot_device, + source_boot.size, source_boot.sha1, + target_boot.size, target_boot.sha1), + "-", + target_boot.size, target_boot.sha1, + source_boot.sha1, "patch/boot.img.p") else: print "boot image unchanged; skipping." |