Skip to content
Permalink
Browse files

Add "nix add-to-store" command

  • Loading branch information...
edolstra committed Sep 14, 2017
1 parent 1c58ad2 commit 970366266b8df712f5f9cedb45af183ef5a8357f
Showing with 67 additions and 4 deletions.
  1. +4 −3 src/libutil/args.hh
  2. +61 −0 src/nix/add-to-store.cc
  3. +0 −1 src/nix/build.cc
  4. +2 −0 src/nix/why-depends.cc
@@ -81,15 +81,16 @@ public:
FlagMaker & handler(std::function<void(Strings)> handler) { flag->handler = handler; return *this; };
FlagMaker & category(const std::string & s) { flag->category = s; return *this; };

FlagMaker & dest(std::string * dest) {
assert(flag->arity == 1);
template<class T>
FlagMaker & dest(T * dest) {
flag->arity = 1;
flag->handler = [=](Strings ss) { *dest = ss.front(); };
return *this;
};

template<class T>
FlagMaker & set(T * dest, const T & val) {
assert(flag->arity == 0);
flag->arity = 1;
flag->handler = [=](Strings ss) { *dest = val; };
return *this;
};
@@ -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>());
@@ -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);

@@ -233,6 +233,8 @@ struct CmdWhyDepends : SourceExprCommand
}
};

// FIXME: should use scanForReferences().

visitPath(node.path);

for (auto & ref : refs) {

0 comments on commit 9703662

Please sign in to comment.
You can’t perform that action at this time.