diff options
author | Eelco Dolstra <edolstra@gmail.com> | 2019-04-15 12:11:16 +0200 |
---|---|---|
committer | Eelco Dolstra <edolstra@gmail.com> | 2019-04-15 12:11:16 +0200 |
commit | a12cd535672737d40759e02356cf0b418182c619 (patch) | |
tree | e2ed9ce272bd7e144a7da6ef37b7f31e0436d800 /src/nix | |
parent | be757d88d97656f0d8076ee4a4586bb4353e7657 (diff) | |
parent | 4bf3a8226badcdc70c013dfcfa266ee72f6cb89b (diff) |
Merge remote-tracking branch 'tweag/automatedUpdate' into flakes
Diffstat (limited to 'src/nix')
-rw-r--r-- | src/nix/build.cc | 15 | ||||
-rw-r--r-- | src/nix/command.hh | 6 | ||||
-rw-r--r-- | src/nix/installables.cc | 8 |
3 files changed, 22 insertions, 7 deletions
diff --git a/src/nix/build.cc b/src/nix/build.cc index 5a3d9d31a..ef6b48969 100644 --- a/src/nix/build.cc +++ b/src/nix/build.cc @@ -10,7 +10,7 @@ struct CmdBuild : MixDryRun, InstallablesCommand { Path outLink = "result"; - bool updateLock = true; + bool update = true; CmdBuild() { @@ -29,7 +29,7 @@ struct CmdBuild : MixDryRun, InstallablesCommand mkFlag() .longName("no-update") .description("don't update the lock file") - .set(&updateLock, false); + .set(&update, false); } std::string name() override @@ -77,11 +77,12 @@ struct CmdBuild : MixDryRun, InstallablesCommand } } - // FlakeUri flakeUri = ""; - // if(updateLock) - // for (uint i = 0; i < installables.size(); i++) - // // if (auto flakeUri = installableToFlakeUri) - // updateLockFile(*evalState, flakeUri); + if (update) + for (auto installable : installables) { + auto flakeUri = installable->installableToFlakeUri(); + if (flakeUri) + updateLockFile(*evalState, *flakeUri); + } } }; diff --git a/src/nix/command.hh b/src/nix/command.hh index 56e1e6f34..a5ae56fb9 100644 --- a/src/nix/command.hh +++ b/src/nix/command.hh @@ -3,6 +3,7 @@ #include "args.hh" #include "primops/flake.hh" #include "common-eval-args.hh" +#include <optional> namespace nix { @@ -66,6 +67,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()); diff --git a/src/nix/installables.cc b/src/nix/installables.cc index 13a68a797..fc2c34861 100644 --- a/src/nix/installables.cc +++ b/src/nix/installables.cc @@ -175,6 +175,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 |