diff --git a/src/libstore/build-result.cc b/src/libstore/build-result.cc index 3e316f679..e6469e38f 100644 --- a/src/libstore/build-result.cc +++ b/src/libstore/build-result.cc @@ -23,11 +23,20 @@ void to_json(nlohmann::json & json, const BuildResult & buildResult) json["stopTime"] = buildResult.stopTime; } -nlohmann::json KeyedBuildResult::toJSON(Store & store) const +void to_json(nlohmann::json & json, const KeyedBuildResult & buildResult) { - auto json = nlohmann::json((const BuildResult &) *this); - json["path"] = path.toJSON(store); - return json; + to_json(json, (const BuildResult &) buildResult); + auto path = nlohmann::json::object(); + std::visit( + overloaded{ + [&](const DerivedPathOpaque & opaque) { path["opaque"] = opaque.path.to_string(); }, + [&](const DerivedPathBuilt & drv) { + path["drvPath"] = drv.drvPath->getBaseStorePath().to_string(); + path["outputs"] = drv.outputs.to_string(); + }, + }, + buildResult.path.raw()); + json["path"] = std::move(path); } } diff --git a/src/libstore/build-result.hh b/src/libstore/build-result.hh index f56817f19..44862980d 100644 --- a/src/libstore/build-result.hh +++ b/src/libstore/build-result.hh @@ -134,10 +134,9 @@ struct KeyedBuildResult : BuildResult KeyedBuildResult(BuildResult res, DerivedPath path) : BuildResult(std::move(res)), path(std::move(path)) { } - - nlohmann::json toJSON(Store & store) const; }; void to_json(nlohmann::json & json, const BuildResult & buildResult); +void to_json(nlohmann::json & json, const KeyedBuildResult & buildResult); } diff --git a/src/libstore/build/derivation-goal.cc b/src/libstore/build/derivation-goal.cc index 6c335e17c..a32dc5e53 100644 --- a/src/libstore/build/derivation-goal.cc +++ b/src/libstore/build/derivation-goal.cc @@ -1566,9 +1566,10 @@ Goal::Done DerivationGoal::done( logger->result( act ? act->id : getCurActivity(), resBuildResult, - KeyedBuildResult( - buildResult, - DerivedPath::Built{.drvPath = makeConstantStorePathRef(drvPath), .outputs = wantedOutputs}).toJSON(worker.store)); + nlohmann::json( + KeyedBuildResult( + buildResult, + DerivedPath::Built{.drvPath = makeConstantStorePathRef(drvPath), .outputs = wantedOutputs}))); return amDone(buildResult.success() ? ecSuccess : ecFailed, std::move(ex)); } diff --git a/src/libstore/build/substitution-goal.cc b/src/libstore/build/substitution-goal.cc index 625e64781..41d8a0c30 100644 --- a/src/libstore/build/substitution-goal.cc +++ b/src/libstore/build/substitution-goal.cc @@ -42,9 +42,10 @@ Goal::Done PathSubstitutionGoal::done( logger->result( getCurActivity(), resBuildResult, - KeyedBuildResult( - buildResult, - DerivedPath::Opaque{storePath}).toJSON(worker.store)); + nlohmann::json( + KeyedBuildResult( + buildResult, + DerivedPath::Opaque{storePath}))); return amDone(result); }