Add "nix add-to-store" command
This commit is contained in:
parent
1c58ad2ffa
commit
970366266b
4 changed files with 67 additions and 4 deletions
61
src/nix/add-to-store.cc
Normal file
61
src/nix/add-to-store.cc
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
#include "command.hh"
|
||||
#include "common-args.hh"
|
||||
#include "store-api.hh"
|
||||
#include "archive.hh"
|
||||
|
||||
using namespace nix;
|
||||
|
||||
struct CmdAddToStore : MixDryRun, StoreCommand
|
||||
{
|
||||
Path path;
|
||||
std::experimental::optional<std::string> namePart;
|
||||
|
||||
CmdAddToStore()
|
||||
{
|
||||
expectArg("path", &path);
|
||||
|
||||
mkFlag()
|
||||
.longName("name")
|
||||
.shortName('n')
|
||||
.description("name component of the store path")
|
||||
.labels({"name"})
|
||||
.dest(&namePart);
|
||||
}
|
||||
|
||||
std::string name() override
|
||||
{
|
||||
return "add-to-store";
|
||||
}
|
||||
|
||||
std::string description() override
|
||||
{
|
||||
return "add a path to the Nix store";
|
||||
}
|
||||
|
||||
Examples examples() override
|
||||
{
|
||||
return {
|
||||
};
|
||||
}
|
||||
|
||||
void run(ref<Store> store) override
|
||||
{
|
||||
if (!namePart) namePart = baseNameOf(path);
|
||||
|
||||
StringSink sink;
|
||||
dumpPath(path, sink);
|
||||
|
||||
ValidPathInfo info;
|
||||
info.narHash = hashString(htSHA256, *sink.s);
|
||||
info.narSize = sink.s->size();
|
||||
info.path = store->makeFixedOutputPath(true, info.narHash, *namePart);
|
||||
info.ca = makeFixedOutputCA(true, info.narHash);
|
||||
|
||||
if (!dryRun)
|
||||
store->addToStore(info, sink.s);
|
||||
|
||||
std::cout << fmt("%s\n", info.path);
|
||||
}
|
||||
};
|
||||
|
||||
static RegisterCommand r1(make_ref<CmdAddToStore>());
|
||||
Loading…
Add table
Add a link
Reference in a new issue