diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2016-03-04T14·21+0100 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2016-03-04T14·21+0100 |
commit | 7c9d7a253c52dfbf8488d3394fe8af104a3af234 (patch) | |
tree | b78f69734d35f428456dde41a87808feead701e0 /src/nix/main.cc | |
parent | 0a26b56cba5d9f1fa815273fadc500284dda1118 (diff) | |
parent | 1b4b16cc6d9585c7bbeb871edc815137baef8f83 (diff) |
Merge branch 'new-cli'
Diffstat (limited to 'src/nix/main.cc')
-rw-r--r-- | src/nix/main.cc | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/nix/main.cc b/src/nix/main.cc new file mode 100644 index 000000000000..20d3ea5c2555 --- /dev/null +++ b/src/nix/main.cc @@ -0,0 +1,55 @@ +#include <algorithm> + +#include "command.hh" +#include "common-args.hh" +#include "eval.hh" +#include "globals.hh" +#include "legacy.hh" +#include "shared.hh" +#include "store-api.hh" + +namespace nix { + +struct NixArgs : virtual MultiCommand, virtual MixCommonArgs +{ + NixArgs() : MultiCommand(*RegisterCommand::commands), MixCommonArgs("nix") + { + mkFlag('h', "help", "show usage information", [=]() { + printHelp(programName, std::cout); + throw Exit(); + }); + + mkFlag(0, "version", "show version information", std::bind(printVersion, programName)); + } +}; + +void mainWrapped(int argc, char * * argv) +{ + initNix(); + initGC(); + + string programName = baseNameOf(argv[0]); + + { + auto legacy = (*RegisterLegacyCommand::commands)[programName]; + if (legacy) return legacy(argc, argv); + } + + NixArgs args; + + args.parseCmdline(argvToStrings(argc, argv)); + + assert(args.command); + + args.command->prepare(); + args.command->run(); +} + +} + +int main(int argc, char * * argv) +{ + return nix::handleExceptions(argv[0], [&]() { + nix::mainWrapped(argc, argv); + }); +} |