aboutsummaryrefslogtreecommitdiff
path: root/src/nix/main.cc
diff options
context:
space:
mode:
authorMaximilian Bosch <maximilian@mbosch.me>2022-01-31 18:03:24 +0100
committerMaximilian Bosch <maximilian@mbosch.me>2022-05-31 22:20:11 +0200
commit159b5815b527f466578a2d28fbf832617cc45b88 (patch)
tree40cc1d7317b4d85878b682b4b61b985ce1c4b28e /src/nix/main.cc
parent078c80f7500edd3adc3be5f7fb2801ba346c1d81 (diff)
repl: `--option pure-eval true` actually enables pure eval mode
To quote Eelco in #5867: > Unfortunately we can't do > > evalSettings.pureEval.setDefault(false); > > because then we have to do the same in main.cc (where > pureEval is set to true), and that would allow pure-eval > to be disabled globally from nix.conf. Instead, a command should specify that it should be impure by default. Then, `evalSettings.pureEval` will be set to `false;` unless it's overridden by e.g. a CLI flag. In that case it's IMHO OK to be (theoretically) able to override `pure-eval` via `nix.conf` because it doesn't have an effect on commands where `forceImpureByDefault` returns `false` (i.e. everything where pure eval actually matters). Closes #5867
Diffstat (limited to 'src/nix/main.cc')
-rw-r--r--src/nix/main.cc3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/nix/main.cc b/src/nix/main.cc
index dadb54306..f398e3118 100644
--- a/src/nix/main.cc
+++ b/src/nix/main.cc
@@ -380,6 +380,9 @@ void mainWrapped(int argc, char * * argv)
settings.ttlPositiveNarInfoCache = 0;
}
+ if (args.command->second->forceImpureByDefault() && !evalSettings.pureEval.overridden) {
+ evalSettings.pureEval = false;
+ }
args.command->second->prepare();
args.command->second->run();
}