aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/store-api.cc
diff options
context:
space:
mode:
authorThéophane Hufschmitt <7226587+thufschmitt@users.noreply.github.com>2023-01-13 11:00:56 +0100
committerGitHub <noreply@github.com>2023-01-13 11:00:56 +0100
commitbdeb6de889219cb9d1ba94b4adc75b0d8000e1b2 (patch)
tree7248384116e25e1078aa884972337de198ba493b /src/libstore/store-api.cc
parentdda71d3726a1767dbd4674cde6e130093e290183 (diff)
parente5eb05c5990d837e0bbc1529e3b5b167f7015be0 (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.cc28
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); }