aboutsummaryrefslogtreecommitdiffstats
path: root/src/app
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2017-10-30 13:06:45 +0100
committerChristian Kandeler <christian.kandeler@qt.io>2017-11-07 15:56:10 +0000
commit98e4cef3ea23842d6bceb438e0f1f8285a01d979 (patch)
treeddfdf1986fd60290255f7b76614da6a7eccacb7e /src/app
parent8c341216da67adaf053ab3af9b2ceddfee21d21d (diff)
CLI: Fix the --version option
This option was supported in a very hacky way by attaching it to the "build" command, where it does not belong. Add a dedicated command instead and support the option variant in the same way as we do for --help. Change-Id: Ib8f1a0e44f9ae669093f059c86518138df510bc3 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'src/app')
-rw-r--r--src/app/qbs/commandlinefrontend.cpp1
-rw-r--r--src/app/qbs/parser/commandlineoption.cpp17
-rw-r--r--src/app/qbs/parser/commandlineoption.h12
-rw-r--r--src/app/qbs/parser/commandlineoptionpool.cpp9
-rw-r--r--src/app/qbs/parser/commandlineoptionpool.h1
-rw-r--r--src/app/qbs/parser/commandlineparser.cpp12
-rw-r--r--src/app/qbs/parser/commandpool.cpp3
-rw-r--r--src/app/qbs/parser/commandtype.h1
-rw-r--r--src/app/qbs/parser/parsercommand.cpp28
-rw-r--r--src/app/qbs/parser/parsercommand.h14
10 files changed, 53 insertions, 45 deletions
diff --git a/src/app/qbs/commandlinefrontend.cpp b/src/app/qbs/commandlinefrontend.cpp
index 2deaf33e7..2a6dae2b6 100644
--- a/src/app/qbs/commandlinefrontend.cpp
+++ b/src/app/qbs/commandlinefrontend.cpp
@@ -402,6 +402,7 @@ void CommandLineFrontend::handleProjectsResolved()
qApp->quit();
break;
case HelpCommandType:
+ case VersionCommandType:
Q_ASSERT_X(false, Q_FUNC_INFO, "Impossible.");
}
}
diff --git a/src/app/qbs/parser/commandlineoption.cpp b/src/app/qbs/parser/commandlineoption.cpp
index 011a2c891..0c73f7fb9 100644
--- a/src/app/qbs/parser/commandlineoption.cpp
+++ b/src/app/qbs/parser/commandlineoption.cpp
@@ -460,23 +460,6 @@ QString BuildNonDefaultOption::longRepresentation() const
return QLatin1String("--all-products");
}
-QString VersionOption::description(CommandType command) const
-{
- Q_UNUSED(command);
- return Tr::tr("%1\n"
- "\tDisplay the qbs version and exit.\n").arg(longRepresentation());
-}
-
-QString VersionOption::shortRepresentation() const
-{
- return QString();
-}
-
-QString VersionOption::longRepresentation() const
-{
- return QStringLiteral("--version");
-}
-
InstallRootOption::InstallRootOption() : m_useSysroot(false)
{
diff --git a/src/app/qbs/parser/commandlineoption.h b/src/app/qbs/parser/commandlineoption.h
index f99ceb896..40699f8ee 100644
--- a/src/app/qbs/parser/commandlineoption.h
+++ b/src/app/qbs/parser/commandlineoption.h
@@ -66,7 +66,6 @@ public:
ForceTimestampCheckOptionType,
ForceOutputCheckOptionType,
BuildNonDefaultOptionType,
- VersionOptionType,
LogTimeOptionType,
CommandEchoModeOptionType,
SettingsDirOptionType,
@@ -255,17 +254,6 @@ class BuildNonDefaultOption : public OnOffOption
QString longRepresentation() const;
};
-class VersionOption : public OnOffOption
-{
-private:
- QString description(CommandType command) const;
- QString shortRepresentation() const;
- QString longRepresentation() const;
-
-private:
- QString m_projectFilePath;
-};
-
class StringListOption : public CommandLineOption
{
diff --git a/src/app/qbs/parser/commandlineoptionpool.cpp b/src/app/qbs/parser/commandlineoptionpool.cpp
index 0e873c69a..22bc3f08b 100644
--- a/src/app/qbs/parser/commandlineoptionpool.cpp
+++ b/src/app/qbs/parser/commandlineoptionpool.cpp
@@ -107,9 +107,6 @@ CommandLineOption *CommandLineOptionPool::getOption(CommandLineOption::Type type
case CommandLineOption::BuildNonDefaultOptionType:
option = new BuildNonDefaultOption;
break;
- case CommandLineOption::VersionOptionType:
- option = new VersionOption;
- break;
case CommandLineOption::LogTimeOptionType:
option = new LogTimeOption;
break;
@@ -230,12 +227,6 @@ BuildNonDefaultOption *CommandLineOptionPool::buildNonDefaultOption() const
getOption(CommandLineOption::BuildNonDefaultOptionType));
}
-VersionOption *CommandLineOptionPool::versionOption() const
-{
- return static_cast<VersionOption *>(
- getOption(CommandLineOption::VersionOptionType));
-}
-
LogTimeOption *CommandLineOptionPool::logTimeOption() const
{
return static_cast<LogTimeOption *>(getOption(CommandLineOption::LogTimeOptionType));
diff --git a/src/app/qbs/parser/commandlineoptionpool.h b/src/app/qbs/parser/commandlineoptionpool.h
index 064911e32..e27aeb373 100644
--- a/src/app/qbs/parser/commandlineoptionpool.h
+++ b/src/app/qbs/parser/commandlineoptionpool.h
@@ -70,7 +70,6 @@ public:
ForceTimeStampCheckOption *forceTimestampCheckOption() const;
ForceOutputCheckOption *forceOutputCheckOption() const;
BuildNonDefaultOption *buildNonDefaultOption() const;
- VersionOption *versionOption() const;
LogTimeOption *logTimeOption() const;
CommandEchoModeOption *commandEchoModeOption() const;
SettingsDirOption *settingsDirOption() const;
diff --git a/src/app/qbs/parser/commandlineparser.cpp b/src/app/qbs/parser/commandlineparser.cpp
index bb33d41ec..434ddf126 100644
--- a/src/app/qbs/parser/commandlineparser.cpp
+++ b/src/app/qbs/parser/commandlineparser.cpp
@@ -263,7 +263,7 @@ bool CommandLineParser::showProgress() const
bool CommandLineParser::showVersion() const
{
- return d->optionPool.versionOption()->enabled();
+ return d->command->type() == VersionCommandType;
}
QString CommandLineParser::settingsDir() const
@@ -329,6 +329,10 @@ void CommandLineParser::CommandLineParserPrivate::doParse()
|| commandLine.first() == QLatin1String("--help")) {
command = commandPool.getCommand(HelpCommandType);
commandLine.takeFirst();
+ } else if (commandLine.first() == QLatin1String("-V")
+ || commandLine.first() == QLatin1String("--version")) {
+ command = commandPool.getCommand(VersionCommandType);
+ commandLine.takeFirst();
} else {
command = commandPool.getCommand(BuildCommandType);
}
@@ -336,10 +340,7 @@ void CommandLineParser::CommandLineParserPrivate::doParse()
}
command->parse(commandLine);
- if (command->type() == HelpCommandType)
- return;
-
- if (command->type() == BuildCommandType && optionPool.versionOption()->enabled())
+ if (command->type() == HelpCommandType || command->type() == VersionCommandType)
return;
setupBuildDirectory();
@@ -373,6 +374,7 @@ QList<Command *> CommandLineParser::CommandLineParserPrivate::allCommands() cons
<< commandPool.getCommand(InstallCommandType)
<< commandPool.getCommand(DumpNodesTreeCommandType)
<< commandPool.getCommand(ListProductsCommandType)
+ << commandPool.getCommand(VersionCommandType)
<< commandPool.getCommand(HelpCommandType);
}
diff --git a/src/app/qbs/parser/commandpool.cpp b/src/app/qbs/parser/commandpool.cpp
index 38114132c..a49608c56 100644
--- a/src/app/qbs/parser/commandpool.cpp
+++ b/src/app/qbs/parser/commandpool.cpp
@@ -92,6 +92,9 @@ qbs::Command *CommandPool::getCommand(CommandType type) const
case HelpCommandType:
command = new HelpCommand(m_optionPool);
break;
+ case VersionCommandType:
+ command = new VersionCommand(m_optionPool);
+ break;
}
}
return command;
diff --git a/src/app/qbs/parser/commandtype.h b/src/app/qbs/parser/commandtype.h
index e1df18fb8..a8c618933 100644
--- a/src/app/qbs/parser/commandtype.h
+++ b/src/app/qbs/parser/commandtype.h
@@ -45,6 +45,7 @@ enum CommandType {
ResolveCommandType, BuildCommandType, CleanCommandType, RunCommandType, ShellCommandType,
StatusCommandType, UpdateTimestampsCommandType, DumpNodesTreeCommandType,
InstallCommandType, HelpCommandType, GenerateCommandType, ListProductsCommandType,
+ VersionCommandType,
};
} // namespace qbs
diff --git a/src/app/qbs/parser/parsercommand.cpp b/src/app/qbs/parser/parsercommand.cpp
index 69ee4db49..dd07f2cce 100644
--- a/src/app/qbs/parser/parsercommand.cpp
+++ b/src/app/qbs/parser/parsercommand.cpp
@@ -279,7 +279,6 @@ static QList<CommandLineOption::Type> buildOptions()
<< CommandLineOption::ForceTimestampCheckOptionType
<< CommandLineOption::ForceOutputCheckOptionType
<< CommandLineOption::BuildNonDefaultOptionType
- << CommandLineOption::VersionOptionType
<< CommandLineOption::JobsOptionType
<< CommandLineOption::CommandEchoModeOptionType
<< CommandLineOption::NoInstallOptionType
@@ -569,4 +568,31 @@ void HelpCommand::parseNext(QStringList &input)
QBS_CHECK(input.empty());
}
+QString VersionCommand::shortDescription() const
+{
+ return Tr::tr("Print the Qbs version number to stdout.");
+}
+
+QString VersionCommand::longDescription() const
+{
+ QString description = Tr::tr("qbs %1\n").arg(representation());
+ return description += Tr::tr("%1\n").arg(shortDescription());
+}
+
+QString VersionCommand::representation() const
+{
+ return QLatin1String("show-version");
+}
+
+QList<CommandLineOption::Type> VersionCommand::supportedOptions() const
+{
+ return QList<CommandLineOption::Type>();
+}
+
+void VersionCommand::parseNext(QStringList &input)
+{
+ QBS_CHECK(!input.empty());
+ throwError(Tr::tr("This command takes no arguments."));
+}
+
} // namespace qbs
diff --git a/src/app/qbs/parser/parsercommand.h b/src/app/qbs/parser/parsercommand.h
index 3df74b467..dcfad7a82 100644
--- a/src/app/qbs/parser/parsercommand.h
+++ b/src/app/qbs/parser/parsercommand.h
@@ -247,6 +247,20 @@ private:
QString m_command;
};
+class VersionCommand : public Command
+{
+public:
+ VersionCommand(CommandLineOptionPool &optionPool) : Command(optionPool) {}
+
+private:
+ CommandType type() const { return VersionCommandType; }
+ QString shortDescription() const;
+ QString longDescription() const;
+ QString representation() const;
+ QList<CommandLineOption::Type> supportedOptions() const;
+ void parseNext(QStringList &input);
+};
+
} // namespace qbs
#endif // QBS_PARSER_COMMAND_H