diff options
author | Théophane Hufschmitt <7226587+thufschmitt@users.noreply.github.com> | 2023-01-13 11:00:56 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-13 11:00:56 +0100 |
commit | bdeb6de889219cb9d1ba94b4adc75b0d8000e1b2 (patch) | |
tree | 7248384116e25e1078aa884972337de198ba493b /src/libstore/store-api.cc | |
parent | dda71d3726a1767dbd4674cde6e130093e290183 (diff) | |
parent | e5eb05c5990d837e0bbc1529e3b5b167f7015be0 (diff) |
Merge pull request #7430 from tweag/ca/fix-nix-log
Ca/fix nix log
Diffstat (limited to 'src/libstore/store-api.cc')
-rw-r--r-- | src/libstore/store-api.cc | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/libstore/store-api.cc b/src/libstore/store-api.cc index 426230ca5..f959dfd51 100644 --- a/src/libstore/store-api.cc +++ b/src/libstore/store-api.cc @@ -1301,6 +1301,34 @@ Derivation readDerivationCommon(Store& store, const StorePath& drvPath, bool req } } +std::optional<StorePath> Store::getBuildDerivationPath(const StorePath & path) +{ + + if (!path.isDerivation()) { + try { + auto info = queryPathInfo(path); + if (!info->deriver) return std::nullopt; + return *info->deriver; + } catch (InvalidPath &) { + return std::nullopt; + } + } + + if (!settings.isExperimentalFeatureEnabled(Xp::CaDerivations) || !isValidPath(path)) + return path; + + auto drv = readDerivation(path); + if (!drv.type().hasKnownOutputPaths()) { + // The build log is actually attached to the corresponding + // resolved derivation, so we need to get it first + auto resolvedDrv = drv.tryResolve(*this); + if (resolvedDrv) + return writeDerivation(*this, *resolvedDrv, NoRepair, true); + } + + return path; +} + Derivation Store::readDerivation(const StorePath & drvPath) { return readDerivationCommon(*this, drvPath, true); } |