aboutsummaryrefslogtreecommitdiff
path: root/src/libcmd/installables.cc
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2021-04-22 10:25:55 +0200
committerGitHub <noreply@github.com>2021-04-22 10:25:55 +0200
commitdd83b29b90031456975384ee71d4fa6d68abe354 (patch)
treef3598e71a204038384ca4830f56823e3cb1db208 /src/libcmd/installables.cc
parent53857552278173641c0489a3196c51aab769bac8 (diff)
parent8d66f5f1107fe87f70ea24ade045720235cc31fa (diff)
Merge pull request #4724 from NixOS/nix-shell-missing-outputs
Make `nix shell` fallback to static outputs when needed
Diffstat (limited to 'src/libcmd/installables.cc')
-rw-r--r--src/libcmd/installables.cc15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/libcmd/installables.cc b/src/libcmd/installables.cc
index e15addfae..39162a662 100644
--- a/src/libcmd/installables.cc
+++ b/src/libcmd/installables.cc
@@ -736,9 +736,18 @@ std::set<RealisedPath> toRealisedPaths(
output.first);
auto outputId = DrvOutput{outputHashes.at(output.first), output.first};
auto realisation = store->queryRealisation(outputId);
- if (!realisation)
- throw Error("cannot operate on an output of unbuilt content-addresed derivation '%s'", outputId.to_string());
- res.insert(RealisedPath{*realisation});
+ if (!realisation) {
+ // TODO: remove this check once #4725 is fixed
+ // as we’ll have the guaranty that if
+ // `output.second` exists, then the realisation
+ // will be there too
+ if (output.second)
+ res.insert(*output.second);
+ else
+ throw Error("cannot operate on an output of unbuilt content-addresed derivation '%s'", outputId.to_string());
+ } else {
+ res.insert(RealisedPath{*realisation});
+ }
}
else {
// If ca-derivations isn't enabled, behave as if