| Index: src/platform/dev/autoupdate.py
|
| diff --git a/src/platform/dev/autoupdate.py b/src/platform/dev/autoupdate.py
|
| index 2c2a39ac968115eefd22c7759d270d70bd618dd7..004f86bc6382d14e8af7ac4fa055b0c4bb1ef99b 100644
|
| --- a/src/platform/dev/autoupdate.py
|
| +++ b/src/platform/dev/autoupdate.py
|
| @@ -14,12 +14,24 @@ class Autoupdate(BuildObject):
|
| # and building/serving update images.
|
| # TODO(rtc): Clean this code up and write some tests.
|
|
|
| - def __init__(self, serve_only=None, test_image=False, *args, **kwargs):
|
| + def __init__(self, serve_only=None, test_image=False, urlbase=None,
|
| + *args, **kwargs):
|
| + super(Autoupdate, self).__init__(*args, **kwargs)
|
| self.serve_only = serve_only
|
| + self.test_image=test_image
|
| + self.static_urlbase = urlbase
|
| if serve_only:
|
| + # If we're serving out of an archived build dir (e.g. a
|
| + # buildbot), prepare this webserver's magic 'static/' dir with a
|
| + # link to the build archive.
|
| web.debug('Autoupdate in "serve update images only" mode.')
|
| - self.test_image=test_image
|
| - super(Autoupdate, self).__init__(*args, **kwargs)
|
| + if os.path.exists('static/archive'):
|
| + archive_symlink = os.readlink('static/archive')
|
| + if archive_symlink != self.static_dir:
|
| + web.debug('removing stale symlink to %s' % self.static_dir)
|
| + os.unlink('static/archive')
|
| + else:
|
| + os.symlink(self.static_dir, 'static/archive')
|
|
|
| def GetUpdatePayload(self, hash, size, url):
|
| payload = """<?xml version="1.0" encoding="UTF-8"?>
|
| @@ -80,6 +92,9 @@ class Autoupdate(BuildObject):
|
| image_file = 'chromiumos_test_image.bin'
|
| else:
|
| image_file = 'chromiumos_image.bin'
|
| + if self.serve_only:
|
| + os.system('cd %s && unzip -o image.zip unpack_partitions.sh %s' %
|
| + (image_path, image_file))
|
| os.system('rm -f %s/part_*' % image_path)
|
| os.system('cd %s && ./unpack_partitions.sh %s' % (image_path, image_file))
|
| shutil.move(os.path.join(image_path, 'part_3'), rootfs_file)
|
| @@ -101,7 +116,7 @@ class Autoupdate(BuildObject):
|
| os.path.getmtime(update_file) >= os.path.getmtime(image_file)):
|
| web.debug('Found cached update image %s/update.gz' % image_path)
|
| else:
|
| - web.debug('generating update image %s/update.gz' % image_path)
|
| + web.debug('generating update image %s' % update_file)
|
| mkupdate = '%s/mk_memento_images.sh %s' % (self.scripts_dir, image_file)
|
| web.debug(mkupdate)
|
| err = os.system(mkupdate)
|
| @@ -111,10 +126,9 @@ class Autoupdate(BuildObject):
|
| if not self.serve_only:
|
| web.debug('Found an image, copying it to static')
|
| try:
|
| - shutil.copy('%s/update.gz' % image_path, self.static_dir)
|
| + shutil.copy(update_file, self.static_dir)
|
| except Exception, e:
|
| - web.debug('Unable to copy update.gz from %s to %s' \
|
| - % (image_path, self.static_dir))
|
| + web.debug('Unable to copy %s to %s' % (update_file, self.static_dir))
|
| return False
|
| return True
|
|
|
| @@ -157,7 +171,15 @@ class Autoupdate(BuildObject):
|
| web.debug('serving update: ')
|
| hash = self.GetHash('%s/%s/update.gz' % (self.static_dir, label))
|
| size = self.GetSize('%s/%s/update.gz' % (self.static_dir, label))
|
| - url = 'http://%s/static/archive/%s/update.gz' % (hostname, label)
|
| + # In case we configured images to be hosted elsewhere
|
| + # (e.g. buildbot's httpd), use that. Otherwise, serve it
|
| + # ourselves using web.py's static resource handler.
|
| + if self.static_urlbase:
|
| + urlbase = self.static_urlbase
|
| + else:
|
| + urlbase = 'http://%s/static/archive/' % hostname
|
| +
|
| + url = '%s/%s/update.gz' % (urlbase, label)
|
| return self.GetUpdatePayload(hash, size, url)
|
| web.debug( 'DONE')
|
| else:
|
|
|