aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorges Dubus <georges.dubus@gmail.com>2020-07-03 14:21:31 +0200
committerEelco Dolstra <edolstra@gmail.com>2021-09-02 14:50:19 +0200
commitbc6e7ca046952bd773558a3c4984e4f1c2717234 (patch)
tree408ee9e5259caffcf1790db922f50e59c7269a65
parentb2e8120d25de5303bfb6a99c14d3ecad21f55a05 (diff)
Don't use read-only mode for nix build --dry-run
In dry run mode, new derivations can't be create, so running the command on anything that has not been evaluated before results in an error message of the form `don't know how to build these paths (may be caused by read-only store access)`. For comparison, the classical `nix-build --dry-run` doesn't use read-only mode. Closes #1795 (cherry picked from commit 54525682df707742e58311c32e9c9cb18de1e31f)
-rw-r--r--src/libcmd/installables.cc2
-rw-r--r--src/nix/build.cc2
2 files changed, 2 insertions, 2 deletions
diff --git a/src/libcmd/installables.cc b/src/libcmd/installables.cc
index 0091a938a..86080f53a 100644
--- a/src/libcmd/installables.cc
+++ b/src/libcmd/installables.cc
@@ -756,7 +756,7 @@ BuiltPaths build(ref<Store> evalStore, ref<Store> store, Realise mode,
pathsToBuild.insert(pathsToBuild.end(), b.begin(), b.end());
}
- if (mode == Realise::Nothing)
+ if (mode == Realise::Nothing || mode == Realise::Derivation)
printMissing(store, pathsToBuild, lvlError);
else if (mode == Realise::Outputs)
store->buildPaths(pathsToBuild, bMode, evalStore);
diff --git a/src/nix/build.cc b/src/nix/build.cc
index 13eb66ac6..ce6df7df8 100644
--- a/src/nix/build.cc
+++ b/src/nix/build.cc
@@ -54,7 +54,7 @@ struct CmdBuild : InstallablesCommand, MixDryRun, MixJSON, MixProfile
{
auto buildables = build(
getEvalStore(), store,
- dryRun ? Realise::Nothing : Realise::Outputs,
+ dryRun ? Realise::Derivation : Realise::Outputs,
installables, buildMode);
if (json) logger->cout("%s", derivedPathsWithHintsToJSON(buildables, store).dump());