forked from lix-project/lix
getFlake: In pure mode, check that the argument is an immutable flakeref
This commit is contained in:
parent
bb39f2bb8a
commit
9c78f7f196
|
@ -628,8 +628,13 @@ void callFlake(EvalState & state,
|
||||||
|
|
||||||
static void prim_getFlake(EvalState & state, const Pos & pos, Value * * args, Value & v)
|
static void prim_getFlake(EvalState & state, const Pos & pos, Value * * args, Value & v)
|
||||||
{
|
{
|
||||||
|
auto flakeRefS = state.forceStringNoCtx(*args[0], pos);
|
||||||
|
auto flakeRef = parseFlakeRef(flakeRefS);
|
||||||
|
if (evalSettings.pureEval && !flakeRef.input->isImmutable())
|
||||||
|
throw Error("cannot call 'getFlake' on mutable flake reference '%s', at %s (use --impure to override)", flakeRefS, pos);
|
||||||
|
|
||||||
callFlake(state,
|
callFlake(state,
|
||||||
lockFlake(state, parseFlakeRef(state.forceStringNoCtx(*args[0], pos)),
|
lockFlake(state, flakeRef,
|
||||||
LockFlags {
|
LockFlags {
|
||||||
.updateLockFile = false,
|
.updateLockFile = false,
|
||||||
.useRegistries = !evalSettings.pureEval,
|
.useRegistries = !evalSettings.pureEval,
|
||||||
|
|
|
@ -194,6 +194,13 @@ nix build -o $TEST_ROOT/result git+file://$flake1Dir
|
||||||
nix build -o $flake1Dir/result git+file://$flake1Dir
|
nix build -o $flake1Dir/result git+file://$flake1Dir
|
||||||
nix path-info $flake1Dir/result
|
nix path-info $flake1Dir/result
|
||||||
|
|
||||||
|
# 'getFlake' on a mutable flakeref should fail in pure mode, but succeed in impure mode.
|
||||||
|
(! nix build -o $TEST_ROOT/result --expr "(builtins.getFlake \"$flake1Dir\").defaultPackage.$system")
|
||||||
|
nix build -o $TEST_ROOT/result --expr "(builtins.getFlake \"$flake1Dir\").defaultPackage.$system" --impure
|
||||||
|
|
||||||
|
# 'getFlake' on an immutable flakeref should succeed even in pure mode.
|
||||||
|
nix build -o $TEST_ROOT/result --expr "(builtins.getFlake \"git+file://$flake1Dir?rev=$hash2\").defaultPackage.$system"
|
||||||
|
|
||||||
# Building a flake with an unlocked dependency should fail in pure mode.
|
# Building a flake with an unlocked dependency should fail in pure mode.
|
||||||
(! nix build -o $TEST_ROOT/result flake2#bar --no-registries)
|
(! nix build -o $TEST_ROOT/result flake2#bar --no-registries)
|
||||||
(! nix eval --expr "builtins.getFlake \"$flake2Dir\"")
|
(! nix eval --expr "builtins.getFlake \"$flake2Dir\"")
|
||||||
|
|
Loading…
Reference in a new issue