aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2017-10-17 16:38:07 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2017-10-18 10:52:32 +0000
commitc005ae0a1629a2d7adc7ff6d6b292775008adaf8 (patch)
tree40600f935236ca349de95916d1e4cb1cad74474f /src
parent9f6ee4c33ac1474c89d4cddf702e10ae1e21b555 (diff)
CLI: Check generator name before building
We can and should detect invalid generator names before starting a potentially expensive operation. Task-number: QBS-1194 Change-Id: I3588df48b7f3e3d7d085a2e4b620296f5eaf02c9 Reviewed-by: Jake Petroules <jake.petroules@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/app/qbs/commandlinefrontend.cpp46
-rw-r--r--src/app/qbs/commandlinefrontend.h5
2 files changed, 31 insertions, 20 deletions
diff --git a/src/app/qbs/commandlinefrontend.cpp b/src/app/qbs/commandlinefrontend.cpp
index c1e9415c9..2deaf33e7 100644
--- a/src/app/qbs/commandlinefrontend.cpp
+++ b/src/app/qbs/commandlinefrontend.cpp
@@ -376,8 +376,10 @@ void CommandLineFrontend::handleProjectsResolved()
case StatusCommandType:
qApp->exit(printStatus(m_projects.first().projectData()));
break;
- case BuildCommandType:
case GenerateCommandType:
+ checkGeneratorName();
+ Q_FALLTHROUGH();
+ case BuildCommandType:
build();
break;
case InstallCommandType:
@@ -499,31 +501,35 @@ void CommandLineFrontend::build()
m_currentBuildEffort = 0;
}
-void CommandLineFrontend::generate()
+void CommandLineFrontend::checkGeneratorName()
{
const QString generatorName = m_parser.generateOptions().generatorName();
- auto generator = ProjectGeneratorManager::findGenerator(generatorName);
- if (!generator) {
- const auto generatorNames = ProjectGeneratorManager::loadedGeneratorNames();
- if (!generatorNames.empty()) {
- const QString generatorNamesString = generatorNames.join(QLatin1String("\n\t"));
- if (!generatorName.isEmpty()) {
- throw ErrorInfo(Tr::tr("No generator named '%1'. Available generators:\n\t%2")
- .arg(generatorName, generatorNamesString));
- }
-
- throw ErrorInfo(Tr::tr("No generator specified. Available generators:\n\t%1")
- .arg(generatorNamesString));
+ m_generator = ProjectGeneratorManager::findGenerator(generatorName);
+ if (m_generator)
+ return;
+ const auto generatorNames = ProjectGeneratorManager::loadedGeneratorNames();
+ if (!generatorNames.empty()) {
+ const QString generatorNamesString = generatorNames.join(QLatin1String("\n\t"));
+ if (!generatorName.isEmpty()) {
+ throw ErrorInfo(Tr::tr("No generator named '%1'. Available generators:\n\t%2")
+ .arg(generatorName, generatorNamesString));
}
- throw ErrorInfo(Tr::tr("No generator specified or no generators are available."));
+ throw ErrorInfo(Tr::tr("No generator specified. Available generators:\n\t%1")
+ .arg(generatorNamesString));
}
- generator->generate(m_projects,
- m_parser.buildConfigurations(),
- m_parser.installOptions(QString()),
- m_parser.settingsDir(),
- ConsoleLogger::instance(m_settings));
+ throw ErrorInfo(Tr::tr("No generator specified or no generators are available."));
+}
+
+void CommandLineFrontend::generate()
+{
+ QBS_CHECK(!!m_generator);
+ m_generator->generate(m_projects,
+ m_parser.buildConfigurations(),
+ m_parser.installOptions(QString()),
+ m_parser.settingsDir(),
+ ConsoleLogger::instance(m_settings));
}
int CommandLineFrontend::runTarget()
diff --git a/src/app/qbs/commandlinefrontend.h b/src/app/qbs/commandlinefrontend.h
index ab37f6c8a..9fc1f2c5b 100644
--- a/src/app/qbs/commandlinefrontend.h
+++ b/src/app/qbs/commandlinefrontend.h
@@ -47,6 +47,8 @@
#include <QtCore/qlist.h>
#include <QtCore/qobject.h>
+#include <memory>
+
QT_BEGIN_NAMESPACE
class QTimer;
QT_END_NAMESPACE
@@ -56,6 +58,7 @@ class AbstractJob;
class ConsoleProgressObserver;
class ErrorInfo;
class ProcessResult;
+class ProjectGenerator;
class Settings;
class CommandLineFrontend : public QObject
@@ -88,6 +91,7 @@ private:
void makeClean();
int runShell();
void build();
+ void checkGeneratorName();
void generate();
int runTarget();
void updateTimestamps();
@@ -118,6 +122,7 @@ private:
int m_totalBuildEffort;
int m_currentBuildEffort;
QHash<AbstractJob *, int> m_buildEfforts;
+ std::shared_ptr<ProjectGenerator> m_generator;
};
} // namespace qbs