Pre generate updates for non-factory devserver use using options.pregenerate_update
Change-Id: Icddfd68c2936d5100dc2b73c3da0037899562e8a
BUG=8255
TEST=Ran it with image_to_live with and without the option. Without, it didn't pre-generate (for users of devserver for gmerge and non delta updates).
Review URL: http://codereview.chromium.org/4198007
diff --git a/autoupdate.py b/autoupdate.py
index 351b451..498b0e9 100644
--- a/autoupdate.py
+++ b/autoupdate.py
@@ -454,6 +454,38 @@
# 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 @@
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)