Index: autoupdate.py |
diff --git a/autoupdate.py b/autoupdate.py |
index 351b451b94555ba37d8f5a67c1c20a92bdd54dc9..498b0e947af858d8cd9c9e37ba18013147d1767a 100644 |
--- a/autoupdate.py |
+++ b/autoupdate.py |
@@ -454,6 +454,38 @@ class Autoupdate(BuildObject): |
# setting sha-256 to an empty string. |
return self.GetUpdatePayload(checksum, '', size, url, is_delta_format) |
+ def GenerateUpdatePayloadForNonFactory(self, static_image_dir): |
+ """Generates an update for non-factory and returns True on success.""" |
+ if self.use_cached and os.path.exists(os.path.join(static_image_dir, |
+ 'update.gz')): |
+ _LogMessage('Using cached image regardless of timestamps.') |
+ return True |
+ else: |
+ if self.forced_image: |
+ has_built_image = self.GenerateUpdateImage( |
+ self.forced_image, move_to_static_dir=True, |
+ static_image_dir=static_image_dir) |
+ # Now that we've generated it, force devserver to use it. |
+ self.use_cached = True |
+ elif self.serve_only: |
+ return self.GenerateImageFromZip(static_image_dir) |
+ else: |
+ return self.GenerateLatestUpdateImage(board_id, |
+ client_version, |
+ static_image_dir) |
+ |
+ def PreGenerateUpdate(self): |
+ """Pre-generates an update. Does not work for factory or label updates.""" |
+ # Does not work with factory config. |
+ assert(not self.factory_config) |
+ _LogMessage('Pre-generating the update payload.') |
+ # Does not work with labels so just use static dir. |
+ if self.GenerateUpdatePayloadForNonFactory(self.static_dir): |
+ # Force the devserver to use the pre-generated payload. |
+ self.use_cached = True |
+ else: |
+ _LogMessage('Failed to pre-generate update.') |
+ |
def HandleUpdatePing(self, data, label=None): |
"""Handles an update ping from an update client. |
@@ -509,27 +541,7 @@ class Autoupdate(BuildObject): |
if label: |
static_image_dir = os.path.join(static_image_dir, label) |
- # Prefer cached image if it exists. |
- if self.use_cached and os.path.exists(os.path.join(static_image_dir, |
- 'update.gz')): |
- _LogMessage('Using cached image regardless of timestamps.') |
- has_built_image = True |
- else: |
- if self.forced_image: |
- has_built_image = self.GenerateUpdateImage( |
- self.forced_image, move_to_static_dir=True, |
- static_image_dir=static_image_dir) |
- # Now that we've generated it, clear out so that other pings of same |
- # devserver instance do not generate new images. |
- self.forced_image = None |
- elif self.serve_only: |
- has_built_image = self.GenerateImageFromZip(static_image_dir) |
- else: |
- has_built_image = self.GenerateLatestUpdateImage(board_id, |
- client_version, |
- static_image_dir) |
- |
- if has_built_image: |
+ if self.GenerateUpdatePayloadForNonFactory(static_image_dir): |
filename = os.path.join(static_image_dir, 'update.gz') |
hash = self._GetHash(filename) |
sha256 = self._GetSHA256(filename) |