feat(3p/nix/nix-daemon): Implement Worker::BuildDerivation handler
Implement the proto handler on the server side for Worker::BuildDerivation. This includes several additions to the proto which I had missed on the first pass, including the actual proto definition for the Derivation itself and a few sequence number reorderings which are fine because this is all provisional and not deployed yet. A couple things to note - I implemented a couple constructors for nix classes that initialize themselves based on their proto variants, which felt nice and didn't end up causing any issues. - I've made the conversions between the enum types in nix and in proto explicit via switch statements rather than using a static_cast, out of an abundance of caution that the error would get mismatched in the future and we'd convert the wrong thing to the wrong thing - this is verbose, but exceptionally future proof. Change-Id: Iecf6b88e76bc37e49efa05fd65d6cd0cb0deffed Reviewed-on: https://cl.tvl.fyi/c/depot/+/1249 Tested-by: BuildkiteCI Reviewed-by: tazjin <mail@tazj.in> Reviewed-by: Kane York <rikingcoding@gmail.com>
This commit is contained in:
parent
3f4e5050cd
commit
a79df261b4
6 changed files with 133 additions and 1 deletions
44
third_party/nix/src/libstore/store-api.cc
vendored
44
third_party/nix/src/libstore/store-api.cc
vendored
|
|
@ -18,6 +18,50 @@
|
|||
|
||||
namespace nix {
|
||||
|
||||
std::optional<BuildMode> build_mode_from(nix::proto::BuildMode mode) {
|
||||
switch (mode) {
|
||||
case nix::proto::BuildMode::Normal:
|
||||
return BuildMode::bmNormal;
|
||||
case nix::proto::BuildMode::Repair:
|
||||
return BuildMode::bmRepair;
|
||||
case nix::proto::BuildMode::Check:
|
||||
return BuildMode::bmCheck;
|
||||
default:
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
||||
nix::proto::BuildStatus BuildResult::status_to_proto() {
|
||||
switch (status) {
|
||||
case BuildResult::Status::Built:
|
||||
return proto::BuildStatus::Built;
|
||||
case BuildResult::Status::Substituted:
|
||||
return proto::BuildStatus::Substituted;
|
||||
case BuildResult::Status::AlreadyValid:
|
||||
return proto::BuildStatus::AlreadyValid;
|
||||
case BuildResult::Status::PermanentFailure:
|
||||
return proto::BuildStatus::PermanentFailure;
|
||||
case BuildResult::Status::InputRejected:
|
||||
return proto::BuildStatus::InputRejected;
|
||||
case BuildResult::Status::OutputRejected:
|
||||
return proto::BuildStatus::OutputRejected;
|
||||
case BuildResult::Status::TransientFailure:
|
||||
return proto::BuildStatus::TransientFailure;
|
||||
case BuildResult::Status::CachedFailure:
|
||||
return proto::BuildStatus::CachedFailure;
|
||||
case BuildResult::Status::TimedOut:
|
||||
return proto::BuildStatus::TimedOut;
|
||||
case BuildResult::Status::MiscFailure:
|
||||
return proto::BuildStatus::MiscFailure;
|
||||
case BuildResult::Status::DependencyFailed:
|
||||
return proto::BuildStatus::DependencyFailed;
|
||||
case BuildResult::Status::LogLimitExceeded:
|
||||
return proto::BuildStatus::LogLimitExceeded;
|
||||
case BuildResult::Status::NotDeterministic:
|
||||
return proto::BuildStatus::NotDeterministic;
|
||||
}
|
||||
}
|
||||
|
||||
bool Store::isInStore(const Path& path) const {
|
||||
return isInDir(path, storeDir);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue