Clean up the lock file handling flags

Added a flag --no-update-lock-file to barf if the lock file needs any
changes. This is useful for CI systems if you're building a
checkout. Fixes #2947.

Renamed --no-save-lock-file to --no-write-lock-file. It is now a fatal
error if the lock file needs changes but --no-write-lock-file is not
given.
This commit is contained in:
Eelco Dolstra
2020-01-29 21:04:28 +01:00
parent f68bed7f67
commit 26f895a26d
7 changed files with 78 additions and 75 deletions
-10
View File
@@ -16,10 +16,6 @@ class EvalState;
struct Pos;
class Store;
namespace flake {
enum LockFileMode : unsigned int;
}
/* A command that requires a Nix store. */
struct StoreCommand : virtual Command
{
@@ -42,15 +38,9 @@ struct EvalCommand : virtual StoreCommand, MixEvalArgs
struct MixFlakeOptions : virtual Args
{
bool recreateLockFile = false;
bool saveLockFile = true;
bool useRegistries = true;
flake::LockFlags lockFlags;
MixFlakeOptions();
flake::LockFileMode getLockFileMode();
};
struct SourceExprCommand : virtual Args, EvalCommand, MixFlakeOptions
+2 -2
View File
@@ -38,12 +38,12 @@ public:
Flake getFlake()
{
auto evalState = getEvalState();
return flake::getFlake(*evalState, getFlakeRef(), useRegistries);
return flake::getFlake(*evalState, getFlakeRef(), lockFlags.useRegistries);
}
LockedFlake lockFlake()
{
return flake::lockFlake(*getEvalState(), getFlakeRef(), getLockFileMode(), lockFlags);
return flake::lockFlake(*getEvalState(), getFlakeRef(), lockFlags);
}
};
+12 -18
View File
@@ -22,17 +22,22 @@ MixFlakeOptions::MixFlakeOptions()
mkFlag()
.longName("recreate-lock-file")
.description("recreate lock file from scratch")
.set(&recreateLockFile, true);
.set(&lockFlags.recreateLockFile, true);
mkFlag()
.longName("no-save-lock-file")
.description("do not save the newly generated lock file")
.set(&saveLockFile, false);
.longName("no-update-lock-file")
.description("do not allow any updates to the lock file")
.set(&lockFlags.updateLockFile, false);
mkFlag()
.longName("no-write-lock-file")
.description("do not write the newly generated lock file")
.set(&lockFlags.writeLockFile, false);
mkFlag()
.longName("no-registries")
.description("don't use flake registries")
.set(&useRegistries, false);
.set(&lockFlags.useRegistries, false);
mkFlag()
.longName("override-input")
@@ -46,17 +51,6 @@ MixFlakeOptions::MixFlakeOptions()
});
}
flake::LockFileMode MixFlakeOptions::getLockFileMode()
{
using namespace flake;
return
useRegistries
? recreateLockFile
? (saveLockFile ? RecreateLockFile : UseNewLockFile)
: (saveLockFile ? UpdateLockFile : UseUpdatedLockFile)
: AllPure;
}
SourceExprCommand::SourceExprCommand()
{
mkFlag()
@@ -332,7 +326,7 @@ std::tuple<std::string, FlakeRef, flake::EvalCache::Derivation> InstallableFlake
{
auto state = cmd.getEvalState();
auto lockedFlake = lockFlake(*state, flakeRef, cmd.getLockFileMode(), cmd.lockFlags);
auto lockedFlake = lockFlake(*state, flakeRef, cmd.lockFlags);
Value * vOutputs = nullptr;
@@ -386,7 +380,7 @@ std::vector<flake::EvalCache::Derivation> InstallableFlake::toDerivations()
Value * InstallableFlake::toValue(EvalState & state)
{
auto lockedFlake = lockFlake(state, flakeRef, cmd.getLockFileMode(), cmd.lockFlags);
auto lockedFlake = lockFlake(state, flakeRef, cmd.lockFlags);
auto vOutputs = getFlakeOutputs(state, lockedFlake);