Commit d1be3512 authored by Martin Blanchard's avatar Martin Blanchard
Browse files

cmd_cas.py: Port to new CAS uploader helper

#77
parent a7eedf57
Loading
Loading
Loading
Loading
+19 −14
Original line number Diff line number Diff line
@@ -27,8 +27,9 @@ from urllib.parse import urlparse
import click
import grpc

from buildgrid.utils import merkle_maker, create_digest
from buildgrid.client.cas import upload
from buildgrid._protos.build.bazel.remote.execution.v2 import remote_execution_pb2, remote_execution_pb2_grpc
from buildgrid.utils import merkle_maker

from ..cli import pass_context

@@ -66,27 +67,31 @@ def cli(context, remote, instance_name, client_key, client_cert, server_cert):


@cli.command('upload-files', short_help="Upload files to the CAS server.")
@click.argument('files', nargs=-1, type=click.File('rb'), required=True)
@click.argument('files', nargs=-1, type=click.Path(exists=True, dir_okay=False), required=True)
@pass_context
def upload_files(context, files):
    stub = remote_execution_pb2_grpc.ContentAddressableStorageStub(context.channel)
    sent_digests, file_map = [], {}
    with upload(context.channel, instance=context.instance_name) as cas:
        for file_path in files:
            context.logger.info("Queueing {}".format(file_path))

    requests = []
    for file in files:
        chunk = file.read()
        requests.append(remote_execution_pb2.BatchUpdateBlobsRequest.Request(
            digest=create_digest(chunk), data=chunk))
            file_digest = cas.upload_file(file_path, queue=True)

    request = remote_execution_pb2.BatchUpdateBlobsRequest(instance_name=context.instance_name,
                                                           requests=requests)
            assert file_digest.hash and file_digest.size_bytes

    context.logger.info("Sending: {}".format(request))
    response = stub.BatchUpdateBlobs(request)
    context.logger.info("Response: {}".format(response))
            file_map[file_digest.hash] = file_path
            sent_digests.append(file_digest)

    for file_digest in sent_digests:
        file_path = file_map[file_digest.hash]
        if file_digest.ByteSize():
            context.logger.info("{}: {}".format(file_path, file_digest.hash))
        else:
            context.logger.info("{}: FAILED".format(file_path))


@cli.command('upload-dir', short_help="Upload a directory to the CAS server.")
@click.argument('directory', nargs=1, type=click.Path(), required=True)
@click.argument('directory', nargs=1, type=click.Path(exists=True, file_okay=False), required=True)
@pass_context
def upload_dir(context, directory):
    context.logger.info("Uploading directory to cas")