Fix pre-generate logic to work with latest and fix other bug.
Change-Id: I19d1ff21833c36bad8e59514bd64af55d59633df
BUG=8732
TEST=./start_devserver with -p --board=x86-mario --client_prefix=C
Review URL: http://codereview.chromium.org/4504001
diff --git a/autoupdate.py b/autoupdate.py
index 1618760..b1d5ae7 100644
--- a/autoupdate.py
+++ b/autoupdate.py
@@ -31,8 +31,8 @@
def __init__(self, serve_only=None, test_image=False, urlbase=None,
factory_config_path=None, client_prefix=None, forced_image=None,
- use_cached=False, port=8080, src_image='', vm=False, *args,
- **kwargs):
+ use_cached=False, port=8080, src_image='', vm=False, board=None,
+ *args, **kwargs):
super(Autoupdate, self).__init__(*args, **kwargs)
self.serve_only = serve_only
self.factory_config = factory_config_path
@@ -47,6 +47,7 @@
self.use_cached = use_cached
self.src_image = src_image
self.vm = vm
+ self.board = board
def _GetSecondsSinceMidnight(self):
"""Returns the seconds since midnight as a decimal value."""
@@ -296,16 +297,17 @@
"""
_LogMessage('Generating update for image %s' % image_path)
update_path = self.GenerateUpdateFile(image_path)
- stateful_update_path = self.GenerateStatefulFile(image_path)
- if not update_path or not stateful_update_path:
- _LogMessage('Failed to generate update')
- return False
+ if update_path:
+ stateful_update_path = self.GenerateStatefulFile(image_path)
+ if stateful_update_path:
+ if move_to_static_dir:
+ return self.MoveImagesToStaticDir(update_path, stateful_update_path,
+ static_image_dir)
- if move_to_static_dir:
- return self.MoveImagesToStaticDir(update_path, stateful_update_path,
- static_image_dir)
- else:
- return True
+ return True
+
+ _LogMessage('Failed to generate update')
+ return False
def GenerateLatestUpdateImage(self, board_id, client_version,
static_image_dir=None):
@@ -473,28 +475,33 @@
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
+ return has_built_image
elif self.serve_only:
return self.GenerateImageFromZip(static_image_dir)
- elif board_id and client_version:
- return self.GenerateLatestUpdateImage(board_id,
- client_version,
- static_image_dir)
else:
+ if board_id:
+ return self.GenerateLatestUpdateImage(board_id,
+ client_version,
+ static_image_dir)
+
+ _LogMessage('You must set --board for pre-generating latest update.')
return False
def PreGenerateUpdate(self):
- """Pre-generates an update. Does not work for factory or label updates."""
+ """Pre-generates an update. Returns True on success."""
# 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(None, None, self.static_dir):
+ if self.GenerateUpdatePayloadForNonFactory(self.board, '0.0.0.0',
+ self.static_dir):
# Force the devserver to use the pre-generated payload.
self.use_cached = True
+ _LogMessage('Pre-generated update successfully.')
+ return True
else:
_LogMessage('Failed to pre-generate update.')
+ return False
def HandleUpdatePing(self, data, label=None):
"""Handles an update ping from an update client.
diff --git a/devserver.py b/devserver.py
index 4b98db3..8abdb8f 100755
--- a/devserver.py
+++ b/devserver.py
@@ -111,6 +111,8 @@
parser = optparse.OptionParser(usage)
parser.add_option('--archive_dir', dest='archive_dir',
help='serve archived builds only.')
+ parser.add_option('--board', dest='board',
+ help='When pre-generating update, board for latest image.')
parser.add_option('--client_prefix', dest='client_prefix',
help='Required prefix for client software version.',
default='MementoSoftwareUpdate')
@@ -164,7 +166,8 @@
use_cached=options.use_cached,
port=options.port,
src_image=options.src_image,
- vm = options.vm)
+ vm=options.vm,
+ board=options.board)
# Sanity-check for use of validate_factory_config.
if not options.factory_config and options.validate_factory_config:
@@ -177,6 +180,7 @@
if options.validate_factory_config:
sys.exit(0)
elif options.pregenerate_update:
- updater.PreGenerateUpdate()
+ if not updater.PreGenerateUpdate():
+ sys.exit(1)
cherrypy.quickstart(DevServerRoot(), config=_GetConfig(options))