feat(3p/nix): Implement AddToStore rpc client

Implement the AddToStore RPC client method, which uses an
AddToStorePathWriterSink (the dual of the AddToStorePathReaderSource on
the server side) to hook into the dumpPath machinery (which we should
refactor not to use sinks or sources, but not yet) and write dumped
paths as binary data over gRPC. With this commit and sandboxing
disabled, the following derivation builds cleanly:

    derivation {
      name = "test";
      builder = ./build.sh;
      system = "x86_64-linux";
    }

where build.sh has chmod +x and contains:

    #!/bin/sh
    echo 1 > $out

Change-Id: I94cab86f0825a3a9993262a9807130645c13bf44
Reviewed-on: https://cl.tvl.fyi/c/depot/+/1638
Reviewed-by: kanepyork <rikingcoding@gmail.com>
Tested-by: BuildkiteCI
This commit is contained in:
Griffin Smith 2020-08-03 23:50:42 -04:00 committed by glittershark
parent b15b447fcb
commit 28c7e926ea
4 changed files with 69 additions and 2 deletions

View file

@ -35,6 +35,21 @@ std::optional<HashType> hash_type_from(nix::proto::HashType hash_type) {
}
}
nix::proto::HashType HashTypeToProto(HashType hash_type) {
switch (hash_type) {
case HashType::htMD5:
return nix::proto::HashType::MD5;
case HashType::htSHA1:
return nix::proto::HashType::SHA1;
case HashType::htSHA256:
return nix::proto::HashType::SHA256;
case HashType::htSHA512:
return nix::proto::HashType::SHA512;
default:
return nix::proto::HashType::UNKNOWN;
}
}
void Hash::init() {
if (type == htMD5) {
hashSize = md5HashSize;

View file

@ -16,6 +16,8 @@ enum HashType : char { htUnknown, htMD5, htSHA1, htSHA256, htSHA512 };
std::optional<HashType> hash_type_from(nix::proto::HashType hash_type);
nix::proto::HashType HashTypeToProto(HashType hash_type);
const int md5HashSize = 16;
const int sha1HashSize = 20;
const int sha256HashSize = 32;