aboutsummaryrefslogtreecommitdiff
path: root/src/nix/main.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/nix/main.cc')
-rw-r--r--src/nix/main.cc27
1 files changed, 11 insertions, 16 deletions
diff --git a/src/nix/main.cc b/src/nix/main.cc
index a9c6c6ea2..e033a5f5a 100644
--- a/src/nix/main.cc
+++ b/src/nix/main.cc
@@ -1,5 +1,6 @@
#include <algorithm>
+#include "args/root.hh"
#include "command.hh"
#include "common-args.hh"
#include "eval.hh"
@@ -75,7 +76,7 @@ static bool haveInternet()
std::string programPath;
-struct NixArgs : virtual MultiCommand, virtual MixCommonArgs
+struct NixArgs : virtual MultiCommand, virtual MixCommonArgs, virtual RootArgs
{
bool useNet = true;
bool refresh = false;
@@ -253,10 +254,7 @@ static void showHelp(std::vector<std::string> subcommand, NixArgs & toplevel)
static NixArgs & getNixArgs(Command & cmd)
{
- assert(cmd.parent);
- MultiCommand * toplevel = cmd.parent;
- while (toplevel->parent) toplevel = toplevel->parent;
- return dynamic_cast<NixArgs &>(*toplevel);
+ return dynamic_cast<NixArgs &>(cmd.getRoot());
}
struct CmdHelp : Command
@@ -424,16 +422,16 @@ void mainWrapped(int argc, char * * argv)
Finally printCompletions([&]()
{
- if (completions) {
- switch (completionType) {
- case ctNormal:
+ if (args.completions) {
+ switch (args.completions->type) {
+ case Completions::Type::Normal:
logger->cout("normal"); break;
- case ctFilenames:
+ case Completions::Type::Filenames:
logger->cout("filenames"); break;
- case ctAttrs:
+ case Completions::Type::Attrs:
logger->cout("attrs"); break;
}
- for (auto & s : *completions)
+ for (auto & s : args.completions->completions)
logger->cout(s.completion + "\t" + trim(s.description));
}
});
@@ -441,7 +439,7 @@ void mainWrapped(int argc, char * * argv)
try {
args.parseCmdline(argvToStrings(argc, argv));
} catch (UsageError &) {
- if (!args.helpRequested && !completions) throw;
+ if (!args.helpRequested && !args.completions) throw;
}
if (args.helpRequested) {
@@ -458,10 +456,7 @@ void mainWrapped(int argc, char * * argv)
return;
}
- if (completions) {
- args.completionHook();
- return;
- }
+ if (args.completions) return;
if (args.showVersion) {
printVersion(programName);