summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/commandline.cpp58
-rw-r--r--src/commandline.h8
-rw-r--r--src/main.cpp5
3 files changed, 36 insertions, 35 deletions
diff --git a/src/commandline.cpp b/src/commandline.cpp
index fd2fcb51..5e65424c 100644
--- a/src/commandline.cpp
+++ b/src/commandline.cpp
@@ -95,34 +95,34 @@ std::optional<int> CommandLine::run(const std::wstring& line)
if (c->name() == commandName) {
// this is a command
- // remove the command name itself
- opts.erase(opts.begin());
+ // remove the command name itself
+ opts.erase(opts.begin());
try
{
- // parse the the remainder of the command line according to the
- // command's options
- po::wcommand_line_parser parser(opts);
+ // legacy commands handle their own parsing, such as 'launch'; don't
+ // attempt to parse anything here
+ if (!c->legacy()) {
+ // parse the the remainder of the command line according to the
+ // command's options
+ po::wcommand_line_parser parser(opts);
- auto co = c->allOptions();
- parser.options(co);
+ auto co = c->allOptions();
+ parser.options(co);
- if (c->allow_unregistered()) {
- parser.allow_unregistered();
- }
-
- auto pos = c->positional();
- parser.positional(pos);
+ auto pos = c->positional();
+ parser.positional(pos);
- parsed = parser.run();
+ parsed = parser.run();
- po::store(parsed, m_vm);
- po::notify(m_vm);
+ po::store(parsed, m_vm);
+ po::notify(m_vm);
- if (m_vm.count("help")) {
- env::Console console;
- std::cout << usage(c.get()) << "\n";
- return 0;
+ if (m_vm.count("help")) {
+ env::Console console;
+ std::cout << usage(c.get()) << "\n";
+ return 0;
+ }
}
// run the command
@@ -405,11 +405,6 @@ std::string Command::usageLine() const
return name() + " " + getUsageLine();
}
-bool Command::allow_unregistered() const
-{
- return false;
-}
-
po::options_description Command::allOptions() const
{
po::options_description d;
@@ -435,6 +430,11 @@ po::positional_options_description Command::positional() const
return getPositional();
}
+bool Command::legacy() const
+{
+ return true;
+}
+
std::string Command::getUsageLine() const
{
return "[options]";
@@ -522,14 +522,14 @@ std::optional<int> CrashDumpCommand::doRun()
}
-bool LaunchCommand::allow_unregistered() const
+Command::Meta LaunchCommand::meta() const
{
- return true;
+ return {"launch", "(internal, do not use)"};
}
-Command::Meta LaunchCommand::meta() const
+bool LaunchCommand::legacy() const
{
- return {"launch", "(internal, do not use)"};
+ return true;
}
std::optional<int> LaunchCommand::doRun()
diff --git a/src/commandline.h b/src/commandline.h
index baa0bfb9..09c1bb8e 100644
--- a/src/commandline.h
+++ b/src/commandline.h
@@ -45,10 +45,10 @@ public:
//
po::positional_options_description positional() const;
- // whether the command allows for unregistered options; this is only used for
- // the old `launch` command and shouldn't be used anywhere else
+ // when this returns true, the command line is not parsed at all and doRun()
+ // is expected to use untouched()
//
- virtual bool allow_unregistered() const;
+ virtual bool legacy() const;
// runs this command, eventually calls doRun()
//
@@ -136,7 +136,7 @@ protected:
class LaunchCommand : public Command
{
public:
- bool allow_unregistered() const override;
+ bool legacy() const override;
protected:
Meta meta() const override;
diff --git a/src/main.cpp b/src/main.cpp
index 554ed006..877236e1 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -17,8 +17,6 @@ int forwardToPrimary(MOMultiProcess& multiProcess, const cl::CommandLine& cl);
int main(int argc, char *argv[])
{
- TimeThis tt("main()");
-
MOShared::SetThisThreadName("main");
setExceptionHandlers();
@@ -29,6 +27,9 @@ int main(int argc, char *argv[])
initLogging();
+ // must be after logging
+ TimeThis tt("main()");
+
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
MOApplication app(cl, argc, argv);