aboutsummaryrefslogtreecommitdiff
path: root/src/nix/path-from-hash-part.cc
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2022-10-18 16:42:06 +0200
committerEelco Dolstra <edolstra@gmail.com>2022-10-18 16:51:12 +0200
commit61f89e954af060c8dbdcd5a4fffcf023ac555686 (patch)
tree6f31c9158a54c1a91069c2a8b9004a371e38b7b4 /src/nix/path-from-hash-part.cc
parenta324e9a5c84a144b824303064220463977c63c73 (diff)
Add command 'nix store path-from-hash-part'
This exposes the Store::queryPathFromHashPart() interface in the CLI.
Diffstat (limited to 'src/nix/path-from-hash-part.cc')
-rw-r--r--src/nix/path-from-hash-part.cc39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/nix/path-from-hash-part.cc b/src/nix/path-from-hash-part.cc
new file mode 100644
index 000000000..7f7cda8d3
--- /dev/null
+++ b/src/nix/path-from-hash-part.cc
@@ -0,0 +1,39 @@
+#include "command.hh"
+#include "store-api.hh"
+
+using namespace nix;
+
+struct CmdPathFromHashPart : StoreCommand
+{
+ std::string hashPart;
+
+ CmdPathFromHashPart()
+ {
+ expectArgs({
+ .label = "hash-part",
+ .handler = {&hashPart},
+ });
+ }
+
+ std::string description() override
+ {
+ return "get a store path from its hash part";
+ }
+
+ std::string doc() override
+ {
+ return
+ #include "path-from-hash-part.md"
+ ;
+ }
+
+ void run(ref<Store> store) override
+ {
+ if (auto storePath = store->queryPathFromHashPart(hashPart))
+ logger->cout(store->printStorePath(*storePath));
+ else
+ throw Error("there is no store path corresponding to '%s'", hashPart);
+ }
+};
+
+static auto rCmdPathFromHashPart = registerCommand2<CmdPathFromHashPart>({"store", "path-from-hash-part"});