Chromium Code Reviews| Index: buildbot/prebuilt.py |
| diff --git a/buildbot/prebuilt.py b/buildbot/prebuilt.py |
| index cf93078d845d638e50f6ca8d3445991cc719d2cf..c0299c74c4a8e792e29f5c4cd04b0c840cae7037 100755 |
| --- a/buildbot/prebuilt.py |
| +++ b/buildbot/prebuilt.py |
| @@ -51,10 +51,10 @@ _HOST_PACKAGES_PATH = 'chroot/var/lib/portage/pkgs' |
| _CATEGORIES_PATH = 'chroot/etc/portage/categories' |
| _HOST_TARGET = 'amd64' |
| _BOARD_PATH = 'chroot/build/%(board)s' |
| -# board/board-target/version/packages/' |
| -_REL_BOARD_PATH = 'board/%(board)s/%(version)s/packages' |
| -# host/host-target/version/packages/' |
| -_REL_HOST_PATH = 'host/%(target)s/%(version)s/packages' |
| +# board/board-target/version/' |
| +_REL_BOARD_PATH = 'board/%(board)s/%(version)s' |
| +# host/host-target/version/' |
| +_REL_HOST_PATH = 'host/%(target)s/%(version)s' |
| # Private overlays to look at for builds to filter |
| # relative to build path |
| _PRIVATE_OVERLAY_DIR = 'src/private-overlays' |
| @@ -515,6 +515,28 @@ class PrebuiltUploader(object): |
| if not _RetryRun(cmd, shell=True, cwd=package_path): |
| raise UploadFailed('Could not run %s' % cmd) |
| + def _UploadBoardTarball(self, board_path, url_suffix): |
| + """Upload a tarball of the board at the specified path to Google Storage. |
| + |
|
scottz
2011/04/15 17:40:46
Args:
davidjames
2011/04/15 19:18:08
Done.
|
| + board_path: The path to the board dir. |
| + url_suffix: The remote subdirectory where we should upload the packages. |
| + """ |
| + remote_location = '%s/%s' % (self._upload_location.rstrip('/'), url_suffix) |
| + assert remote_location.startswith('gs://') |
| + cwd, boardname = os.path.split(board_path.rstrip(os.path.sep)) |
| + tarfile = '/tmp/%s.tbz2' % boardname |
|
scottz
2011/04/15 17:40:46
You should use tempfile here.
I prefer not to ass
davidjames
2011/04/15 19:18:08
Done.
Now that we switched to tempfile, it will h
|
| + cmd = ['sudo', 'tar', '-I', 'pbzip2', '-cf', tarfile] |
| + for path in ('usr/lib/debug', 'usr/local/autotest', 'packages', 'tmp'): |
|
scottz
2011/04/15 17:40:46
Assigning these to a variable excluded_paths would
davidjames
2011/04/15 19:18:08
Done.
|
| + cmd.append('--exclude=%s/%s/*' % (boardname, path)) |
| + cmd.append(boardname) |
| + cros_build_lib.RunCommand(cmd, cwd=cwd) |
|
scottz
2011/04/15 17:40:46
this should be in your try, if tar fails we are le
davidjames
2011/04/15 19:18:08
Done.
|
| + remote_tarfile = '%s/%s.tbz2' % (remote_location.rstrip('/'), boardname) |
| + try: |
| + if _GsUpload((tarfile, remote_tarfile, self._acl)): |
| + sys.exit(1) |
| + finally: |
| + cros_build_lib.RunCommand(['sudo', 'rm', '-f', tarfile], cwd=cwd) |
| + |
| def _SyncHostPrebuilts(self, build_path, version, key, git_sync, |
| sync_binhost_conf): |
| """Synchronize host prebuilt files. |
| @@ -540,7 +562,8 @@ class PrebuiltUploader(object): |
| # Upload prebuilts. |
| package_path = os.path.join(build_path, _HOST_PACKAGES_PATH) |
| url_suffix = _REL_HOST_PATH % {'version': version, 'target': _HOST_TARGET} |
| - self._UploadPrebuilt(package_path, url_suffix) |
| + packages_url_suffix = '%s/packages' % url_suffix.rstrip('/') |
| + self._UploadPrebuilt(package_path, packages_url_suffix) |
| # Record URL where prebuilts were uploaded. |
| url_value = '%s/%s/' % (self._binhost_base_url.rstrip('/'), |
| @@ -554,7 +577,7 @@ class PrebuiltUploader(object): |
| UpdateBinhostConfFile(binhost_conf, key, url_value) |
| def _SyncBoardPrebuilts(self, board, build_path, version, key, git_sync, |
| - sync_binhost_conf): |
| + sync_binhost_conf, upload_board_tarball): |
| """Synchronize board prebuilt files. |
| Args: |
| @@ -567,12 +590,24 @@ class PrebuiltUploader(object): |
| prebuilt packages generated here. |
| sync_binhost_conf: If set, update binhost config file in |
| chromiumos-overlay for the current board. |
| + upload_board_tarball: Include a tarball of the board in our upload. |
| """ |
| # Upload prebuilts. |
| board_path = os.path.join(build_path, _BOARD_PATH % {'board': board}) |
| package_path = os.path.join(board_path, 'packages') |
| url_suffix = _REL_BOARD_PATH % {'board': board, 'version': version} |
| - self._UploadPrebuilt(package_path, url_suffix) |
| + packages_url_suffix = '%s/packages' % url_suffix.rstrip('/') |
| + |
| + if upload_board_tarball: |
|
scottz
2011/04/15 17:40:46
Please add a comment about you uploading board tar
davidjames
2011/04/15 19:18:08
Done.
|
| + p = multiprocessing.Process(target=self._UploadBoardTarball, |
|
scottz
2011/04/15 17:40:46
Please consider using something other than p. tar_
davidjames
2011/04/15 19:18:08
Done.
|
| + args=(board_path, url_suffix)) |
| + p.start() |
| + |
| + self._UploadPrebuilt(package_path, packages_url_suffix) |
| + |
| + if upload_board_tarball: |
| + p.join() |
| + assert p.exitcode == 0 |
| # Record URL where prebuilts were uploaded. |
| url_value = '%s/%s/' % (self._binhost_base_url.rstrip('/'), |
| @@ -627,6 +662,9 @@ def ParseOptions(): |
| help='Update binhost.conf') |
| parser.add_option('-P', '--private', dest='private', action='store_true', |
| default=False, help='Mark gs:// uploads as private.') |
| + parser.add_option('', '--upload-board-tarball', dest='upload_board_tarball', |
| + action='store_true', default=False, |
| + help='Upload board tarball to Google Storage.') |
| options, args = parser.parse_args() |
| if not options.build_path: |
| @@ -634,6 +672,11 @@ def ParseOptions(): |
| if not options.upload: |
| usage(parser, 'Error: you need to provide an upload location using -u') |
| + |
| + if options.upload_board_tarball and not options.upload.startswith('gs://'): |
| + usage(parser, 'Error: --upload-board-tarball only works with gs:// URLs.\n' |
| + '--upload must be a gs:// URL.') |
| + |
| if options.private: |
| if options.sync_host: |
| usage(parser, 'Error: --private and --sync-host/-s cannot be specified ' |
| @@ -684,7 +727,8 @@ def main(): |
| if options.board: |
| uploader._SyncBoardPrebuilts(options.board, options.build_path, version, |
| options.key, options.git_sync, |
| - options.sync_binhost_conf) |
| + options.sync_binhost_conf, |
| + options.upload_board_tarball) |
| if __name__ == '__main__': |
| main() |