Index: bin/cbuildbot.py |
diff --git a/bin/cbuildbot.py b/bin/cbuildbot.py |
index 0c2f2eaa4f4a1a7e8aecafdd46ef6f14b5a98ca2..b73a72409ffa5bddc3214fc0a38ec7d0d025c9a5 100755 |
--- a/bin/cbuildbot.py |
+++ b/bin/cbuildbot.py |
@@ -310,17 +310,20 @@ def _GetPortageEnvVar(buildroot, board, envvar): |
buildroot: The root directory where the build occurs. Must be an absolute |
path. |
- board: Board type that was built on this machine. E.g. x86-generic. |
- envvar: The environment variable to get. E.g. "PORTAGE_BINHOST". |
+ board: Board type that was built on this machine. E.g. x86-generic. If this |
+ is None, get the env var from the host. |
+ envvar: The environment variable to get. E.g. 'PORTAGE_BINHOST'. |
Returns: |
The value of the environment variable, as a string. If no such variable |
can be found, return the empty string. |
""" |
cwd = os.path.join(buildroot, 'src', 'scripts') |
- binhost = RunCommand(['portageq-%s' % board, 'envvar', envvar], |
- cwd=cwd, redirect_stdout=True, enter_chroot=True, |
- error_ok=True) |
+ portageq = 'portageq' |
+ if board: |
+ portageq += '-%s' % board |
+ binhost = RunCommand([portageq, 'envvar', envvar], cwd=cwd, |
+ redirect_stdout=True, enter_chroot=True, error_ok=True) |
return binhost.rstrip('\n') |
@@ -522,7 +525,7 @@ def _ResolveOverlays(buildroot, overlays): |
return paths |
-def _UploadPrebuilts(buildroot, board, overlay_config): |
+def _UploadPrebuilts(buildroot, board, overlay_config, binhosts): |
"""Upload prebuilts. |
Args: |
@@ -532,14 +535,20 @@ def _UploadPrebuilts(buildroot, board, overlay_config): |
'private': Just the private overlay. |
'public': Just the public overlay. |
'both': Both the public and private overlays. |
+ binhosts: The URLs of the current binhosts. Binaries that are already |
+ present will not be uploaded twice. Empty URLs will be ignored. |
""" |
cmd = ['%s/src/scripts/prebuilt.py' % buildroot, |
'--sync-binhost-conf', |
+ '--sync-host', |
'--build-path', buildroot, |
'--board', board, |
'--prepend-version', 'preflight', |
'--key', _PREFLIGHT_BINHOST] |
+ for binhost in binhosts: |
+ if binhost: |
+ cmd.extend(['--previous-binhost-url', binhost]) |
if overlay_config == 'public': |
cmd.extend(['--upload', 'gs://chromeos-prebuilt']) |
else: |
@@ -595,12 +604,14 @@ def main(): |
boardpath = os.path.join(chroot_path, 'build', board) |
if options.clobber or not os.path.isdir(buildroot): |
_FullCheckout(buildroot, tracking_branch, url=options.url) |
+ new_binhost = _GetPortageEnvVar(buildroot, board, _FULL_BINHOST), |
else: |
old_binhost = _GetPortageEnvVar(buildroot, board, _FULL_BINHOST) |
_IncrementalCheckout(buildroot) |
new_binhost = _GetPortageEnvVar(buildroot, board, _FULL_BINHOST) |
if old_binhost != new_binhost: |
RunCommand(['sudo', 'rm', '-rf', boardpath]) |
+ binhosts = [new_binhost, _GetPortageEnvVar(buildroot, None, _FULL_BINHOST)] |
# Check that all overlays can be found. |
for path in overlays: |
@@ -641,7 +652,8 @@ def main(): |
if buildconfig['master']: |
# Master bot needs to check if the other slaves completed. |
if cbuildbot_comm.HaveSlavesCompleted(config): |
- _UploadPrebuilts(buildroot, board, buildconfig['overlays']) |
+ _UploadPrebuilts(buildroot, board, buildconfig['overlays'], |
+ binhosts) |
_UprevPush(buildroot, tracking_branch, buildconfig['board'], |
overlays) |
else: |