aboutsummaryrefslogtreecommitdiff
path: root/src/nix/flake.cc
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2021-01-11 12:36:39 +0100
committerEelco Dolstra <edolstra@gmail.com>2021-01-11 12:36:39 +0100
commit93ad6430edf3d7efa5948d1e0ca0447e4666b121 (patch)
tree3fb9c41cf3b877e22f3a5c229c0db9adc0720a98 /src/nix/flake.cc
parent7480f2bf20479641ec010153c12842c7cbf26789 (diff)
nix store prefetch-tarball -> nix flake prefetch
Diffstat (limited to 'src/nix/flake.cc')
-rw-r--r--src/nix/flake.cc40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/nix/flake.cc b/src/nix/flake.cc
index 2b91faa64..b73b9cf4e 100644
--- a/src/nix/flake.cc
+++ b/src/nix/flake.cc
@@ -960,6 +960,45 @@ struct CmdFlakeShow : FlakeCommand
}
};
+struct CmdFlakePrefetch : FlakeCommand, MixJSON
+{
+ CmdFlakePrefetch()
+ {
+ }
+
+ std::string description() override
+ {
+ return "download the source tree denoted by a flake reference into the Nix store";
+ }
+
+ std::string doc() override
+ {
+ return
+ #include "flake-prefetch.md"
+ ;
+ }
+
+ void run(ref<Store> store) override
+ {
+ auto originalRef = getFlakeRef();
+ auto resolvedRef = originalRef.resolve(store);
+ auto [tree, lockedRef] = resolvedRef.fetchTree(store);
+ auto hash = store->queryPathInfo(tree.storePath)->narHash;
+
+ if (json) {
+ auto res = nlohmann::json::object();
+ res["storePath"] = store->printStorePath(tree.storePath);
+ res["hash"] = hash.to_string(SRI, true);
+ logger->cout(res.dump());
+ } else {
+ notice("Downloaded '%s' to '%s' (hash '%s').",
+ lockedRef.to_string(),
+ store->printStorePath(tree.storePath),
+ hash.to_string(SRI, true));
+ }
+ }
+};
+
struct CmdFlake : NixMultiCommand
{
CmdFlake()
@@ -973,6 +1012,7 @@ struct CmdFlake : NixMultiCommand
{"clone", []() { return make_ref<CmdFlakeClone>(); }},
{"archive", []() { return make_ref<CmdFlakeArchive>(); }},
{"show", []() { return make_ref<CmdFlakeShow>(); }},
+ {"prefetch", []() { return make_ref<CmdFlakePrefetch>(); }},
})
{
}