Automated lockfile updating with nix build

This commit is contained in:
Nick Van den Broeck 2019-03-21 09:30:16 +01:00
parent 87033f2c4e
commit 4bf3a8226b
3 changed files with 24 additions and 6 deletions

View file

@ -11,7 +11,7 @@ struct CmdBuild : MixDryRun, InstallablesCommand
{
Path outLink = "result";
std::optional<std::string> gitRepo = std::nullopt;
bool update = true;
CmdBuild()
{
@ -28,9 +28,9 @@ struct CmdBuild : MixDryRun, InstallablesCommand
.set(&outLink, Path(""));
mkFlag()
.longName("update-lock-file")
.description("update the lock file")
.dest(&gitRepo);
.longName("no-update")
.description("don't update the lock files")
.set(&update, false);
}
std::string name() override
@ -78,8 +78,12 @@ struct CmdBuild : MixDryRun, InstallablesCommand
}
}
if (gitRepo)
updateLockFile(*evalState, *gitRepo);
if (update)
for (auto installable : installables) {
auto flakeUri = installable->installableToFlakeUri();
if (flakeUri)
updateLockFile(*evalState, *flakeUri);
}
}
};

View file

@ -2,6 +2,7 @@
#include "args.hh"
#include "common-eval-args.hh"
#include <optional>
namespace nix {
@ -65,6 +66,11 @@ struct Installable
Buildable toBuildable();
virtual std::optional<std::string> installableToFlakeUri()
{
return std::nullopt;
}
virtual Value * toValue(EvalState & state)
{
throw Error("argument '%s' cannot be evaluated", what());

View file

@ -176,6 +176,14 @@ struct InstallableFlake : InstallableValue
state.forceValue(*v);
return v;
}
std::optional<std::string> installableToFlakeUri() override
{
if (std::get_if<FlakeRef::IsPath>(&flakeRef.data))
return flakeRef.to_string();
else
return std::nullopt;
}
};
// FIXME: extend