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.
This commit is contained in:
Eelco Dolstra 2020-07-24 21:04:26 +02:00
parent af373c2ece
commit a1cd805cba
2 changed files with 43 additions and 2 deletions

View file

@ -1,5 +1,6 @@
#include "command.hh" #include "command.hh"
#include "store-api.hh" #include "store-api.hh"
#include "archive.hh"
using namespace nix; using namespace nix;
@ -7,7 +8,7 @@ struct CmdDumpPath : StorePathCommand
{ {
std::string description() override 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 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"});

View file

@ -125,6 +125,7 @@ struct NixArgs : virtual MultiCommand, virtual MixCommonArgs
{"ls-store", {"store", "ls"}}, {"ls-store", {"store", "ls"}},
{"cat-nar", {"nar", "cat"}}, {"cat-nar", {"nar", "cat"}},
{"cat-store", {"store", "cat"}}, {"cat-store", {"store", "cat"}},
{"dump-path", {"store", "dump-path"}},
}; };
bool aliasUsed = false; bool aliasUsed = false;