From 0d92f1f13ad89bf8ffbb75764bbe83452612792a Mon Sep 17 00:00:00 2001 From: Doug Zongker Date: Mon, 3 Jun 2013 12:07:12 -0700 Subject: improve OTA failure messages Replace OTA script constructs of the form: assert(foo); with foo || abort("sensible message"); so that the log and the on-screen display is somewhat more accessible to non-experts. (assert() displays the source code of the false expression 'foo'.) Change-Id: Ic99448e4466561d305b167cd4d5c1f0f2dbadcce --- tools/releasetools/edify_generator.py | 37 ++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 14 deletions(-) (limited to 'tools/releasetools/edify_generator.py') diff --git a/tools/releasetools/edify_generator.py b/tools/releasetools/edify_generator.py index 5672b5a..9ef1926 100644 --- a/tools/releasetools/edify_generator.py +++ b/tools/releasetools/edify_generator.py @@ -72,24 +72,31 @@ class EdifyGenerator(object): """Assert that the current system build fingerprint is one of *fp.""" if not fp: raise ValueError("must specify some fingerprints") - cmd = ('assert(' + - ' ||\0'.join([('file_getprop("/system/build.prop", ' + cmd = ( + ' ||\n '.join([('file_getprop("/system/build.prop", ' '"ro.build.fingerprint") == "%s"') % i for i in fp]) + - ');') - self.script.append(self._WordWrap(cmd)) + ' ||\n abort("Package expects build fingerprint of %s; this ' + 'device has " + getprop("ro.build.fingerprint") + ".");' + ) % (" or ".join(fp),) + self.script.append(cmd) - def AssertOlderBuild(self, timestamp): + def AssertOlderBuild(self, timestamp, timestamp_text): """Assert that the build on the device is older (or the same as) the given timestamp.""" - self.script.append(('assert(!less_than_int(%s, ' - 'getprop("ro.build.date.utc")));') % (timestamp,)) + self.script.append( + ('(!less_than_int(%s, getprop("ro.build.date.utc"))) || ' + 'abort("Can\'t install this package (%s) over newer ' + 'build (" + getprop("ro.build.date") + ").");' + ) % (timestamp, timestamp_text)) def AssertDevice(self, device): """Assert that the device identifier is the given string.""" - cmd = ('assert(getprop("ro.product.device") == "%s" ||\0' - 'getprop("ro.build.product") == "%s");' % (device, device)) - self.script.append(self._WordWrap(cmd)) + cmd = ('getprop("ro.product.device") == "%s" || ' + 'abort("This package is for \\"%s\\" devices; ' + 'this is a \\"" + getprop("ro.product.device") + "\\".");' + ) % (device, device) + self.script.append(cmd) def AssertSomeBootloader(self, *bootloaders): """Asert that the bootloader version is one of *bootloaders.""" @@ -115,9 +122,10 @@ class EdifyGenerator(object): """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]) + - '));') + self.script.append( + 'apply_patch_check("%s"' % (filename,) + + "".join([', "%s"' % (i,) for i in sha1]) + + ') || abort("\\"%s\\" has unexpected contents.");' % (filename,)) def FileCheck(self, filename, *sha1): """Check that the given file (or MTD reference) has one of the @@ -129,7 +137,8 @@ class EdifyGenerator(object): def CacheFreeSpaceCheck(self, amount): """Check that there's at least 'amount' space that can be made available on /cache.""" - self.script.append("assert(apply_patch_space(%d));" % (amount,)) + self.script.append(('apply_patch_space(%d) || abort("Not enough free space ' + 'on /system to apply patches.");') % (amount,)) def Mount(self, mount_point): """Mount the partition with the given mount_point.""" -- cgit v1.1