Add basic "nix build" command
Currently only builds by attribute from <nixpkgs> or the specified file, e.g. "nix build hello".
This commit is contained in:
parent
cd2196b089
commit
206bbb5dc9
3 changed files with 159 additions and 0 deletions
46
src/nix/build.cc
Normal file
46
src/nix/build.cc
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
#include "command.hh"
|
||||
#include "common-args.hh"
|
||||
#include "installables.hh"
|
||||
#include "shared.hh"
|
||||
#include "store-api.hh"
|
||||
|
||||
using namespace nix;
|
||||
|
||||
struct CmdBuild : StoreCommand, MixDryRun, MixInstallables
|
||||
{
|
||||
CmdBuild()
|
||||
{
|
||||
}
|
||||
|
||||
std::string name() override
|
||||
{
|
||||
return "build";
|
||||
}
|
||||
|
||||
std::string description() override
|
||||
{
|
||||
return "build a derivation or fetch a store path";
|
||||
}
|
||||
|
||||
void run(ref<Store> store) override
|
||||
{
|
||||
auto elems = evalInstallables(store);
|
||||
|
||||
PathSet pathsToBuild;
|
||||
|
||||
for (auto & elem : elems) {
|
||||
if (elem.isDrv)
|
||||
pathsToBuild.insert(elem.drvPath);
|
||||
else
|
||||
pathsToBuild.insert(elem.outPaths.begin(), elem.outPaths.end());
|
||||
}
|
||||
|
||||
printMissing(store, pathsToBuild);
|
||||
|
||||
if (dryRun) return;
|
||||
|
||||
store->buildPaths(pathsToBuild);
|
||||
}
|
||||
};
|
||||
|
||||
static RegisterCommand r1(make_ref<Command, CmdBuild>());
|
||||
Loading…
Add table
Add a link
Reference in a new issue