def PrepareBinhostUploads(input_proto, output_proto, config): """Return a list of files to upload to the binhost. See BinhostService documentation in api/proto/binhost.proto. Args: input_proto (PrepareBinhostUploadsRequest): The input proto. output_proto (PrepareBinhostUploadsResponse): The output proto. config (api_config.ApiConfig): The API call config. """ if input_proto.sysroot.build_target.name: build_target_msg = input_proto.sysroot.build_target else: build_target_msg = input_proto.build_target sysroot_path = input_proto.sysroot.path if not sysroot_path and not build_target_msg.name: cros_build_lib.Die('Sysroot.path is required.') build_target = controller_util.ParseBuildTarget(build_target_msg) chroot = controller_util.ParseChroot(input_proto.chroot) if not sysroot_path: sysroot_path = build_target.root sysroot = sysroot_lib.Sysroot(sysroot_path) uri = input_proto.uri # For now, we enforce that all input URIs are Google Storage buckets. if not gs.PathIsGs(uri): raise ValueError('Upload URI %s must be Google Storage.' % uri) if config.validate_only: return controller.RETURN_CODE_VALID_INPUT parsed_uri = urllib.parse.urlparse(uri) upload_uri = gs.GetGsURL(parsed_uri.netloc, for_gsutil=True).rstrip('/') upload_path = parsed_uri.path.lstrip('/') # Read all packages and update the index. The index must be uploaded to the # binhost for Portage to use it, so include it in upload_targets. uploads_dir = binhost.GetPrebuiltsRoot(chroot, sysroot, build_target) index_path = binhost.UpdatePackageIndex(uploads_dir, upload_uri, upload_path, sudo=True) upload_targets = binhost.GetPrebuiltsFiles(uploads_dir) assert index_path.startswith(uploads_dir), ( 'expected index_path to start with uploads_dir') upload_targets.append(index_path[len(uploads_dir):]) output_proto.uploads_dir = uploads_dir for upload_target in upload_targets: output_proto.upload_targets.add().path = upload_target.strip('/')
def testGetPrebuiltsFilesBadFile(self): """GetPrebuiltsFiles dies if archive file does not exist.""" packages_content = """\ ARCH: amd64 URI: gs://foo_prebuilts CPV: package/prebuilt """ osutils.WriteFile(os.path.join(self.root, 'Packages'), packages_content) with self.assertRaises(LookupError): binhost.GetPrebuiltsFiles(self.root)
def testGetPrebuiltsFiles(self): """GetPrebuiltsFiles returns all archives for all packages.""" packages_content = """\ ARCH: amd64 URI: gs://foo_prebuilts CPV: package/prebuilt_a CPV: package/prebuilt_b """ osutils.WriteFile(os.path.join(self.root, 'Packages'), packages_content) osutils.WriteFile(os.path.join(self.root, 'package/prebuilt_a.tbz2'), 'a', makedirs=True) osutils.WriteFile(os.path.join(self.root, 'package/prebuilt_b.tbz2'), 'b') actual = binhost.GetPrebuiltsFiles(self.root) expected = ['package/prebuilt_a.tbz2', 'package/prebuilt_b.tbz2'] self.assertEqual(actual, expected)
def testGetPrebuiltsFilesWithDebugSymbols(self): """GetPrebuiltsFiles returns debug symbols archive if specified in index.""" packages_content = """\ ARCH: amd64 URI: gs://foo_prebuilts CPV: package/prebuilt DEBUG_SYMBOLS: yes """ osutils.WriteFile(os.path.join(self.root, 'Packages'), packages_content) osutils.WriteFile(os.path.join(self.root, 'package/prebuilt.tbz2'), 'foo', makedirs=True) osutils.WriteFile(os.path.join(self.root, 'package/prebuilt.debug.tbz2'), 'debug', makedirs=True) actual = binhost.GetPrebuiltsFiles(self.root) expected = ['package/prebuilt.tbz2', 'package/prebuilt.debug.tbz2'] self.assertEqual(actual, expected)