From b167da3c782f4d408d5d6e7732d52b98dfa87087 Mon Sep 17 00:00:00 2001 From: Georges Dubus Date: Fri, 3 Jul 2020 14:21:31 +0200 Subject: [PATCH] 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 --- src/nix/build.cc | 2 +- src/nix/installables.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/nix/build.cc b/src/nix/build.cc index 613cc15eb2de..d20766443a3c 100644 --- a/src/nix/build.cc +++ b/src/nix/build.cc @@ -60,7 +60,7 @@ struct CmdBuild : InstallablesCommand, MixDryRun, MixProfile void run(ref store) override { - auto buildables = build(store, dryRun ? Realise::Nothing : Realise::Outputs, installables, buildMode); + auto buildables = build(store, dryRun ? Realise::Derivation : Realise::Outputs, installables, buildMode); if (dryRun) return; diff --git a/src/nix/installables.cc b/src/nix/installables.cc index babb0e5fe7cc..57ea44307197 100644 --- a/src/nix/installables.cc +++ b/src/nix/installables.cc @@ -668,7 +668,7 @@ Buildables build(ref store, Realise mode, } } - if (mode == Realise::Nothing) + if (mode == Realise::Nothing || mode == Realise::Derivation) printMissing(store, pathsToBuild, lvlError); else if (mode == Realise::Outputs) store->buildPaths(pathsToBuild, bMode);