aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2020-07-24 21:04:26 +0200
committerEelco Dolstra <edolstra@gmail.com>2020-12-03 22:52:01 +0100
commita1cd805cba7a4408e75779bc4099f92e81fd6ac7 (patch)
treec2c2b3198c79349de4e5a5d21529c091c4bd4bde
parentaf373c2ece2c14ac652313a6f370dc344c85f86e (diff)
Add 'nix nar dump-path'
This only differs from 'nix store dump-path' in that the path doesn't need to be a store path.
-rw-r--r--src/nix/dump-path.cc44
-rw-r--r--src/nix/main.cc1
2 files changed, 43 insertions, 2 deletions
diff --git a/src/nix/dump-path.cc b/src/nix/dump-path.cc
index 6fd197531..4b225ae9f 100644
--- a/src/nix/dump-path.cc
+++ b/src/nix/dump-path.cc
@@ -1,5 +1,6 @@
#include "command.hh"
#include "store-api.hh"
+#include "archive.hh"
using namespace nix;
@@ -7,7 +8,7 @@ struct CmdDumpPath : StorePathCommand
{
std::string description() override
{
- return "dump a store path to stdout (in NAR format)";
+ return "serialise a store path to stdout in NAR format";
}
Examples examples() override
@@ -30,4 +31,43 @@ struct CmdDumpPath : StorePathCommand
}
};
-static auto rDumpPath = registerCommand<CmdDumpPath>("dump-path");
+
+static auto rDumpPath = registerCommand2<CmdDumpPath>({"store", "dump-path"});
+
+struct CmdDumpPath2 : Command
+{
+ Path path;
+
+ CmdDumpPath2()
+ {
+ expectArgs({
+ .label = "path",
+ .handler = {&path},
+ .completer = completePath
+ });
+ }
+
+ std::string description() override
+ {
+ return "serialise a path to stdout in NAR format";
+ }
+
+ Examples examples() override
+ {
+ return {
+ Example{
+ "To serialise directory 'foo' as a NAR:",
+ "nix nar dump-path ./foo"
+ },
+ };
+ }
+
+ void run() override
+ {
+ FdSink sink(STDOUT_FILENO);
+ dumpPath(path, sink);
+ sink.flush();
+ }
+};
+
+static auto rDumpPath2 = registerCommand2<CmdDumpPath2>({"nar", "dump-path"});
diff --git a/src/nix/main.cc b/src/nix/main.cc
index 94f4cad3c..0002be291 100644
--- a/src/nix/main.cc
+++ b/src/nix/main.cc
@@ -125,6 +125,7 @@ struct NixArgs : virtual MultiCommand, virtual MixCommonArgs
{"ls-store", {"store", "ls"}},
{"cat-nar", {"nar", "cat"}},
{"cat-store", {"store", "cat"}},
+ {"dump-path", {"store", "dump-path"}},
};
bool aliasUsed = false;