forked from lix-project/lix
Add use-registries config option (and deprecate --no-registries flag)
Some people want to avoid using registries at all on their system; Instead of having to add --no-registries to every command, this commit allows to set use-registries = false in the config. --no-registries is still allowed everywhere it was allowed previously, but is now deprecated. Co-authored-by: Eelco Dolstra <edolstra@gmail.com>
This commit is contained in:
parent
db4d4cf4ba
commit
3e57e3480b
|
@ -60,7 +60,10 @@ MixFlakeOptions::MixFlakeOptions()
|
||||||
.longName = "no-registries",
|
.longName = "no-registries",
|
||||||
.description = "Don't allow lookups in the flake registries.",
|
.description = "Don't allow lookups in the flake registries.",
|
||||||
.category = category,
|
.category = category,
|
||||||
.handler = {&lockFlags.useRegistries, false}
|
.handler = {[&]() {
|
||||||
|
lockFlags.useRegistries = false;
|
||||||
|
warn("--no-registries is deprecated; use --no-use-registries (a.k.a --option use-registries false)");
|
||||||
|
}}
|
||||||
});
|
});
|
||||||
|
|
||||||
addFlag({
|
addFlag({
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "flake.hh"
|
#include "flake.hh"
|
||||||
|
#include "eval.hh"
|
||||||
#include "lockfile.hh"
|
#include "lockfile.hh"
|
||||||
#include "primops.hh"
|
#include "primops.hh"
|
||||||
#include "eval-inline.hh"
|
#include "eval-inline.hh"
|
||||||
|
@ -296,7 +297,9 @@ LockedFlake lockFlake(
|
||||||
|
|
||||||
FlakeCache flakeCache;
|
FlakeCache flakeCache;
|
||||||
|
|
||||||
auto flake = getFlake(state, topRef, lockFlags.useRegistries, flakeCache);
|
auto useRegistries = lockFlags.useRegistries.value_or(settings.useRegistries);
|
||||||
|
|
||||||
|
auto flake = getFlake(state, topRef, useRegistries, flakeCache);
|
||||||
|
|
||||||
if (lockFlags.applyNixConfig) {
|
if (lockFlags.applyNixConfig) {
|
||||||
flake.config.apply();
|
flake.config.apply();
|
||||||
|
@ -464,7 +467,7 @@ LockedFlake lockFlake(
|
||||||
throw Error("cannot update flake input '%s' in pure mode", inputPathS);
|
throw Error("cannot update flake input '%s' in pure mode", inputPathS);
|
||||||
|
|
||||||
if (input.isFlake) {
|
if (input.isFlake) {
|
||||||
auto inputFlake = getFlake(state, *input.ref, lockFlags.useRegistries, flakeCache);
|
auto inputFlake = getFlake(state, *input.ref, useRegistries, flakeCache);
|
||||||
|
|
||||||
/* Note: in case of an --override-input, we use
|
/* Note: in case of an --override-input, we use
|
||||||
the *original* ref (input2.ref) for the
|
the *original* ref (input2.ref) for the
|
||||||
|
@ -499,7 +502,7 @@ LockedFlake lockFlake(
|
||||||
|
|
||||||
else {
|
else {
|
||||||
auto [sourceInfo, resolvedRef, lockedRef] = fetchOrSubstituteTree(
|
auto [sourceInfo, resolvedRef, lockedRef] = fetchOrSubstituteTree(
|
||||||
state, *input.ref, lockFlags.useRegistries, flakeCache);
|
state, *input.ref, useRegistries, flakeCache);
|
||||||
node->inputs.insert_or_assign(id,
|
node->inputs.insert_or_assign(id,
|
||||||
std::make_shared<LockedNode>(lockedRef, *input.ref, false));
|
std::make_shared<LockedNode>(lockedRef, *input.ref, false));
|
||||||
}
|
}
|
||||||
|
@ -573,7 +576,7 @@ LockedFlake lockFlake(
|
||||||
also just clear the 'rev' field... */
|
also just clear the 'rev' field... */
|
||||||
auto prevLockedRef = flake.lockedRef;
|
auto prevLockedRef = flake.lockedRef;
|
||||||
FlakeCache dummyCache;
|
FlakeCache dummyCache;
|
||||||
flake = getFlake(state, topRef, lockFlags.useRegistries, dummyCache);
|
flake = getFlake(state, topRef, useRegistries, dummyCache);
|
||||||
|
|
||||||
if (lockFlags.commitLockFile &&
|
if (lockFlags.commitLockFile &&
|
||||||
flake.lockedRef.input.getRev() &&
|
flake.lockedRef.input.getRev() &&
|
||||||
|
@ -643,7 +646,7 @@ static void prim_getFlake(EvalState & state, const Pos & pos, Value * * args, Va
|
||||||
lockFlake(state, flakeRef,
|
lockFlake(state, flakeRef,
|
||||||
LockFlags {
|
LockFlags {
|
||||||
.updateLockFile = false,
|
.updateLockFile = false,
|
||||||
.useRegistries = !evalSettings.pureEval,
|
.useRegistries = !evalSettings.pureEval && !settings.useRegistries,
|
||||||
.allowMutable = !evalSettings.pureEval,
|
.allowMutable = !evalSettings.pureEval,
|
||||||
}),
|
}),
|
||||||
v);
|
v);
|
||||||
|
|
|
@ -102,7 +102,7 @@ struct LockFlags
|
||||||
|
|
||||||
/* Whether to use the registries to lookup indirect flake
|
/* Whether to use the registries to lookup indirect flake
|
||||||
references like 'nixpkgs'. */
|
references like 'nixpkgs'. */
|
||||||
bool useRegistries = true;
|
std::optional<bool> useRegistries = std::nullopt;
|
||||||
|
|
||||||
/* Whether to apply flake's nixConfig attribute to the configuration */
|
/* Whether to apply flake's nixConfig attribute to the configuration */
|
||||||
|
|
||||||
|
|
|
@ -956,6 +956,9 @@ public:
|
||||||
resolves to a different location from that of the build machine. You
|
resolves to a different location from that of the build machine. You
|
||||||
can enable this setting if you are sure you're not going to do that.
|
can enable this setting if you are sure you're not going to do that.
|
||||||
)"};
|
)"};
|
||||||
|
|
||||||
|
Setting<bool> useRegistries{this, true, "use-registries",
|
||||||
|
"Whether to use flake registries for reference resolution"};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -147,6 +147,7 @@ nix build -o $TEST_ROOT/result --expr "(builtins.getFlake \"git+file://$flake1Di
|
||||||
|
|
||||||
# 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 build -o $TEST_ROOT/result flake2#bar --no-use-registries)
|
||||||
(! nix eval --expr "builtins.getFlake \"$flake2Dir\"")
|
(! nix eval --expr "builtins.getFlake \"$flake2Dir\"")
|
||||||
|
|
||||||
# But should succeed in impure mode.
|
# But should succeed in impure mode.
|
||||||
|
@ -170,6 +171,7 @@ nix build -o $TEST_ROOT/result $flake2Dir#bar
|
||||||
# Building with a lockfile should not require a fetch of the registry.
|
# Building with a lockfile should not require a fetch of the registry.
|
||||||
nix build -o $TEST_ROOT/result --flake-registry file:///no-registry.json $flake2Dir#bar --refresh
|
nix build -o $TEST_ROOT/result --flake-registry file:///no-registry.json $flake2Dir#bar --refresh
|
||||||
nix build -o $TEST_ROOT/result --no-registries $flake2Dir#bar --refresh
|
nix build -o $TEST_ROOT/result --no-registries $flake2Dir#bar --refresh
|
||||||
|
nix build -o $TEST_ROOT/result --no-use-registries $flake2Dir#bar --refresh
|
||||||
|
|
||||||
# Updating the flake should not change the lockfile.
|
# Updating the flake should not change the lockfile.
|
||||||
nix flake lock $flake2Dir
|
nix flake lock $flake2Dir
|
||||||
|
@ -180,6 +182,7 @@ nix build -o $TEST_ROOT/result flake2#bar
|
||||||
|
|
||||||
# Or without a registry.
|
# Or without a registry.
|
||||||
nix build -o $TEST_ROOT/result --no-registries git+file://$flake2Dir#bar --refresh
|
nix build -o $TEST_ROOT/result --no-registries git+file://$flake2Dir#bar --refresh
|
||||||
|
nix build -o $TEST_ROOT/result --no-use-registries git+file://$flake2Dir#bar --refresh
|
||||||
|
|
||||||
# Test whether indirect dependencies work.
|
# Test whether indirect dependencies work.
|
||||||
nix build -o $TEST_ROOT/result $flake3Dir#xyzzy
|
nix build -o $TEST_ROOT/result $flake3Dir#xyzzy
|
||||||
|
@ -603,6 +606,7 @@ nix flake metadata --json hg+file://$flake5Dir
|
||||||
[[ $(nix flake metadata --json hg+file://$flake5Dir | jq -e -r .revCount) = 1 ]]
|
[[ $(nix flake metadata --json hg+file://$flake5Dir | jq -e -r .revCount) = 1 ]]
|
||||||
|
|
||||||
nix build -o $TEST_ROOT/result hg+file://$flake5Dir --no-registries --no-allow-dirty
|
nix build -o $TEST_ROOT/result hg+file://$flake5Dir --no-registries --no-allow-dirty
|
||||||
|
nix build -o $TEST_ROOT/result hg+file://$flake5Dir --no-use-registries --no-allow-dirty
|
||||||
|
|
||||||
# Test tarball flakes
|
# Test tarball flakes
|
||||||
tar cfz $TEST_ROOT/flake.tar.gz -C $TEST_ROOT --exclude .hg flake5
|
tar cfz $TEST_ROOT/flake.tar.gz -C $TEST_ROOT --exclude .hg flake5
|
||||||
|
|
Loading…
Reference in a new issue