aboutsummaryrefslogtreecommitdiff
path: root/src/nix
diff options
context:
space:
mode:
authorNick Van den Broeck <nick.van.den.broeck666@gmail.com>2019-05-14 11:34:45 +0200
committerNick Van den Broeck <nick.van.den.broeck666@gmail.com>2019-05-17 14:50:10 +0200
commitef6ae61503bed7afa73a45ca6a4fb3597a9e514d (patch)
treeedf2dfcbf924ebddc1e06302c6c20f310d313b58 /src/nix
parent98f20dee41e9d4dccb5a6bbbd956ab856c5f7929 (diff)
Lockfile handling in `resolveFlake` is fixed
Diffstat (limited to 'src/nix')
-rw-r--r--src/nix/command.hh4
-rw-r--r--src/nix/flake.cc4
-rw-r--r--src/nix/installables.cc18
3 files changed, 21 insertions, 5 deletions
diff --git a/src/nix/command.hh b/src/nix/command.hh
index 32a5047a8..30d869b19 100644
--- a/src/nix/command.hh
+++ b/src/nix/command.hh
@@ -80,6 +80,10 @@ struct SourceExprCommand : virtual Args, StoreCommand, MixEvalArgs
bool recreateLockFile = false;
+ bool saveLockFile = true;
+
+ bool noRegistries = false;
+
ref<EvalState> getEvalState();
std::vector<std::shared_ptr<Installable>> parseInstallables(
diff --git a/src/nix/flake.cc b/src/nix/flake.cc
index fc0fc76b4..bfb3178ad 100644
--- a/src/nix/flake.cc
+++ b/src/nix/flake.cc
@@ -126,8 +126,8 @@ struct CmdFlakeDeps : FlakeCommand, MixJSON, StoreCommand, MixEvalArgs
for (NonFlake & nonFlake : resFlake.nonFlakeDeps)
printNonFlakeInfo(nonFlake, json);
- for (ResolvedFlake & newResFlake : resFlake.flakeDeps)
- todo.push(newResFlake);
+ for (auto info : resFlake.flakeDeps)
+ todo.push(info.second);
}
}
};
diff --git a/src/nix/installables.cc b/src/nix/installables.cc
index 25f3f4f9d..a2a55d949 100644
--- a/src/nix/installables.cc
+++ b/src/nix/installables.cc
@@ -26,6 +26,16 @@ SourceExprCommand::SourceExprCommand()
.longName("recreate-lock-file")
.description("recreate lock file from scratch")
.set(&recreateLockFile, true);
+
+ mkFlag()
+ .longName("dont-save-lock-file")
+ .description("save the newly generated lock file")
+ .set(&saveLockFile, false);
+
+ mkFlag()
+ .longName("no-registries")
+ .description("don't use flake registries")
+ .set(&noRegistries, true);
}
ref<EvalState> SourceExprCommand::getEvalState()
@@ -158,10 +168,12 @@ struct InstallableFlake : InstallableValue
Value * toValue(EvalState & state) override
{
auto vFlake = state.allocValue();
- if (std::get_if<FlakeRef::IsPath>(&flakeRef.data))
- updateLockFile(state, flakeRef.to_string(), cmd.recreateLockFile);
- makeFlakeValue(state, flakeRef, cmd.recreateLockFile ? RecreateLockFile : UpdateLockFile, *vFlake);
+ HandleLockFile handle = cmd.noRegistries ? AllPure :
+ cmd.recreateLockFile ?
+ (cmd.saveLockFile ? RecreateLockFile : UseNewLockFile)
+ : (cmd.saveLockFile ? UpdateLockFile : UseUpdatedLockFile);
+ makeFlakeValue(state, flakeRef, handle, *vFlake);
auto vProvides = (*vFlake->attrs->get(state.symbols.create("provides")))->value;