From 970366266b8df712f5f9cedb45af183ef5a8357f Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 14 Sep 2017 13:22:32 +0200 Subject: Add "nix add-to-store" command --- src/nix/add-to-store.cc | 61 +++++++++++++++++++++++++++++++++++++++++++++++++ src/nix/build.cc | 1 - src/nix/why-depends.cc | 2 ++ 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 src/nix/add-to-store.cc (limited to 'src/nix') diff --git a/src/nix/add-to-store.cc b/src/nix/add-to-store.cc new file mode 100644 index 000000000000..d0003790d3b9 --- /dev/null +++ b/src/nix/add-to-store.cc @@ -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 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) 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()); diff --git a/src/nix/build.cc b/src/nix/build.cc index 915a066497b4..f7c99f12dbbf 100644 --- a/src/nix/build.cc +++ b/src/nix/build.cc @@ -15,7 +15,6 @@ struct CmdBuild : MixDryRun, InstallablesCommand .longName("out-link") .shortName('o') .description("path of the symlink to the build result") - .arity(1) .labels({"path"}) .dest(&outLink); diff --git a/src/nix/why-depends.cc b/src/nix/why-depends.cc index f31469cbc96c..a90d07ed26ee 100644 --- a/src/nix/why-depends.cc +++ b/src/nix/why-depends.cc @@ -233,6 +233,8 @@ struct CmdWhyDepends : SourceExprCommand } }; + // FIXME: should use scanForReferences(). + visitPath(node.path); for (auto & ref : refs) { -- cgit 1.4.1