nix build: Add --out-link and --no-link options
This commit is contained in:
parent
df4342bc17
commit
dff440aab3
4 changed files with 37 additions and 10 deletions
|
@ -80,6 +80,19 @@ public:
|
|||
FlagMaker & arity(size_t arity) { flag->arity = arity; return *this; };
|
||||
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);
|
||||
flag->handler = [=](Strings ss) { *dest = ss.front(); };
|
||||
return *this;
|
||||
};
|
||||
|
||||
template<class T>
|
||||
FlagMaker & set(T * dest, const T & val) {
|
||||
assert(flag->arity == 0);
|
||||
flag->handler = [=](Strings ss) { *dest = val; };
|
||||
return *this;
|
||||
};
|
||||
};
|
||||
|
||||
FlagMaker mkFlag();
|
||||
|
|
|
@ -7,8 +7,22 @@ using namespace nix;
|
|||
|
||||
struct CmdBuild : MixDryRun, InstallablesCommand
|
||||
{
|
||||
Path outLink = "result";
|
||||
|
||||
CmdBuild()
|
||||
{
|
||||
mkFlag()
|
||||
.longName("out-link")
|
||||
.shortName('o')
|
||||
.description("path of the symlink to the build result")
|
||||
.arity(1)
|
||||
.labels({"path"})
|
||||
.dest(&outLink);
|
||||
|
||||
mkFlag()
|
||||
.longName("no-link")
|
||||
.description("do not create a symlink to the build result")
|
||||
.set(&outLink, Path(""));
|
||||
}
|
||||
|
||||
std::string name() override
|
||||
|
@ -28,14 +42,14 @@ struct CmdBuild : MixDryRun, InstallablesCommand
|
|||
for (size_t i = 0; i < buildables.size(); ++i) {
|
||||
auto & b(buildables[i]);
|
||||
|
||||
for (auto & output : b.outputs) {
|
||||
if (auto store2 = store.dynamic_pointer_cast<LocalFSStore>()) {
|
||||
std::string symlink = "result";
|
||||
if (i) symlink += fmt("-%d", i);
|
||||
if (output.first != "out") symlink += fmt("-%s", output.first);
|
||||
store2->addPermRoot(output.second, absPath(symlink), true);
|
||||
}
|
||||
}
|
||||
if (outLink != "")
|
||||
for (auto & output : b.outputs)
|
||||
if (auto store2 = store.dynamic_pointer_cast<LocalFSStore>()) {
|
||||
std::string symlink = outLink;
|
||||
if (i) symlink += fmt("-%d", i);
|
||||
if (output.first != "out") symlink += fmt("-%s", output.first);
|
||||
store2->addPermRoot(output.second, absPath(symlink), true);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -22,7 +22,7 @@ struct CmdCopy : StorePathsCommand
|
|||
mkFlag()
|
||||
.longName("no-check-sigs")
|
||||
.description("do not require that paths are signed by trusted keys")
|
||||
.handler([&](Strings ss) { checkSigs = NoCheckSigs; });
|
||||
.set(&checkSigs, NoCheckSigs);
|
||||
}
|
||||
|
||||
std::string name() override
|
||||
|
|
|
@ -41,7 +41,7 @@ struct CmdRun : InstallablesCommand
|
|||
.longName("ignore-environment")
|
||||
.shortName('i')
|
||||
.description("clear the entire environment (except those specified with --keep)")
|
||||
.handler([&](Strings ss) { ignoreEnvironment = true; });
|
||||
.set(&ignoreEnvironment, true);
|
||||
|
||||
mkFlag()
|
||||
.longName("keep")
|
||||
|
|
Loading…
Reference in a new issue