aboutsummaryrefslogtreecommitdiffstats
path: root/src/app/qbs
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@digia.com>2013-06-13 13:45:15 +0200
committerJoerg Bornemann <joerg.bornemann@digia.com>2013-06-17 17:00:27 +0200
commite46c2ffb61268a8641a2d2f84c2d980aa892e4bd (patch)
tree46d13dfea381bea7bd6dd9df53ed1907261b478f /src/app/qbs
parentaa74bd71956464adc12249055f8f9e29fe3bd5ad (diff)
Allow installing without building.
Task-number: QBS-310 Change-Id: I22139a8c537ded6553f9dc326bb202b1b871c0ee Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Diffstat (limited to 'src/app/qbs')
-rw-r--r--src/app/qbs/commandlinefrontend.cpp29
-rw-r--r--src/app/qbs/commandlinefrontend.h1
-rw-r--r--src/app/qbs/parser/command.cpp6
-rw-r--r--src/app/qbs/parser/commandlineoption.cpp15
-rw-r--r--src/app/qbs/parser/commandlineoption.h10
-rw-r--r--src/app/qbs/parser/commandlineoptionpool.cpp8
-rw-r--r--src/app/qbs/parser/commandlineoptionpool.h1
-rw-r--r--src/app/qbs/parser/commandlineparser.cpp5
-rw-r--r--src/app/qbs/parser/commandlineparser.h1
9 files changed, 64 insertions, 12 deletions
diff --git a/src/app/qbs/commandlinefrontend.cpp b/src/app/qbs/commandlinefrontend.cpp
index 1427ab70d..b6f616c80 100644
--- a/src/app/qbs/commandlinefrontend.cpp
+++ b/src/app/qbs/commandlinefrontend.cpp
@@ -106,6 +106,8 @@ void CommandLineFrontend::start()
params.setIgnoreDifferentProjectFilePath(m_parser.force());
params.setDryRun(m_parser.dryRun());
params.setLogElapsedTime(m_parser.logTime());
+ if (!m_parser.buildBeforeInstalling())
+ params.setRestoreBehavior(SetupProjectParameters::RestoreOnly);
foreach (const QVariantMap &buildConfig, m_parser.buildConfigurations()) {
params.setBuildConfiguration(buildConfig);
@@ -174,15 +176,9 @@ void CommandLineFrontend::handleJobFinished(bool success, AbstractJob *job)
if (m_buildJobs.isEmpty()) {
switch (m_parser.command()) {
case RunCommandType:
- case InstallCommandType: {
- Q_ASSERT(m_projects.count() == 1);
- const Project project = m_projects.first();
- const ProductMap products = productsToUse();
- InstallJob * const installJob = project.installSomeProducts(
- products.value(m_projects.first()), m_parser.installOptions());
- connectJob(installJob);
+ case InstallCommandType:
+ install();
break;
- }
case BuildCommandType:
case CleanCommandType:
qApp->quit();
@@ -315,9 +311,14 @@ void CommandLineFrontend::handleProjectsResolved()
break;
}
case BuildCommandType:
+ build();
+ break;
case InstallCommandType:
case RunCommandType:
- build();
+ if (m_parser.buildBeforeInstalling())
+ build();
+ else
+ install();
break;
case UpdateTimestampsCommandType:
updateTimestamps();
@@ -461,4 +462,14 @@ void CommandLineFrontend::checkForExactlyOneProduct()
}
}
+void CommandLineFrontend::install()
+{
+ Q_ASSERT(m_projects.count() == 1);
+ const Project project = m_projects.first();
+ const ProductMap products = productsToUse();
+ InstallJob * const installJob = project.installSomeProducts(
+ products.value(m_projects.first()), m_parser.installOptions());
+ connectJob(installJob);
+}
+
} // namespace qbs
diff --git a/src/app/qbs/commandlinefrontend.h b/src/app/qbs/commandlinefrontend.h
index f5452d8be..d00112931 100644
--- a/src/app/qbs/commandlinefrontend.h
+++ b/src/app/qbs/commandlinefrontend.h
@@ -79,6 +79,7 @@ private:
void connectBuildJob(AbstractJob *job);
void connectJob(AbstractJob *job);
void checkForExactlyOneProduct();
+ void install();
Q_INVOKABLE void doCancel();
diff --git a/src/app/qbs/parser/command.cpp b/src/app/qbs/parser/command.cpp
index 62fef3de6..998466cdb 100644
--- a/src/app/qbs/parser/command.cpp
+++ b/src/app/qbs/parser/command.cpp
@@ -254,7 +254,8 @@ QString InstallCommand::longDescription() const
.arg(representation());
description += Tr::tr("Install all files marked as installable "
"to their respective destinations.\n"
- "The project is built first, if necessary.\n");
+ "The project is built first, if necessary, unless the '%1' option "
+ "is given.\n").arg(optionPool().noBuildOption()->longRepresentation());
return description += supportedOptionsDescription();
}
@@ -267,7 +268,8 @@ QList<CommandLineOption::Type> installOptions()
{
return buildOptions()
<< CommandLineOption::InstallRootOptionType
- << CommandLineOption::RemoveFirstOptionType;
+ << CommandLineOption::RemoveFirstOptionType
+ << CommandLineOption::NoBuildOptionType;
}
QList<CommandLineOption::Type> InstallCommand::supportedOptions() const
diff --git a/src/app/qbs/parser/commandlineoption.cpp b/src/app/qbs/parser/commandlineoption.cpp
index 2c4b544f2..2fc88147a 100644
--- a/src/app/qbs/parser/commandlineoption.cpp
+++ b/src/app/qbs/parser/commandlineoption.cpp
@@ -385,6 +385,21 @@ QString RemoveFirstOption::longRepresentation() const
return QLatin1String("--remove-first");
}
+
+QString NoBuildOption::description(CommandType command) const
+{
+ Q_ASSERT(command == InstallCommandType || command == RunCommandType);
+ Q_UNUSED(command);
+ return Tr::tr("%1\n\tDo not build before installing.\n")
+ .arg(longRepresentation());
+}
+
+QString NoBuildOption::longRepresentation() const
+{
+ return QLatin1String("--no-build");
+}
+
+
QString LogTimeOption::description(CommandType command) const
{
Q_UNUSED(command);
diff --git a/src/app/qbs/parser/commandlineoption.h b/src/app/qbs/parser/commandlineoption.h
index be03301a8..a6e0612fe 100644
--- a/src/app/qbs/parser/commandlineoption.h
+++ b/src/app/qbs/parser/commandlineoption.h
@@ -48,7 +48,7 @@ public:
ChangedFilesOptionType,
ProductsOptionType,
AllArtifactsOptionType,
- InstallRootOptionType, RemoveFirstOptionType,
+ InstallRootOptionType, RemoveFirstOptionType, NoBuildOptionType,
ForceOptionType,
LogTimeOptionType
};
@@ -249,6 +249,14 @@ public:
QString longRepresentation() const;
};
+class NoBuildOption : public OnOffOption
+{
+public:
+ QString description(CommandType command) const;
+ QString shortRepresentation() const { return QString(); }
+ QString longRepresentation() const;
+};
+
class LogTimeOption : public OnOffOption
{
public:
diff --git a/src/app/qbs/parser/commandlineoptionpool.cpp b/src/app/qbs/parser/commandlineoptionpool.cpp
index 88562178a..df13af9f2 100644
--- a/src/app/qbs/parser/commandlineoptionpool.cpp
+++ b/src/app/qbs/parser/commandlineoptionpool.cpp
@@ -79,6 +79,9 @@ CommandLineOption *CommandLineOptionPool::getOption(CommandLineOption::Type type
case CommandLineOption::RemoveFirstOptionType:
option = new RemoveFirstOption;
break;
+ case CommandLineOption::NoBuildOptionType:
+ option = new NoBuildOption;
+ break;
case CommandLineOption::ForceOptionType:
option = new ForceOption;
break;
@@ -155,6 +158,11 @@ RemoveFirstOption *CommandLineOptionPool::removeFirstoption() const
return static_cast<RemoveFirstOption *>(getOption(CommandLineOption::RemoveFirstOptionType));
}
+NoBuildOption *CommandLineOptionPool::noBuildOption() const
+{
+ return static_cast<NoBuildOption *>(getOption(CommandLineOption::NoBuildOptionType));
+}
+
ForceOption *CommandLineOptionPool::forceOption() const
{
return static_cast<ForceOption *>(getOption(CommandLineOption::ForceOptionType));
diff --git a/src/app/qbs/parser/commandlineoptionpool.h b/src/app/qbs/parser/commandlineoptionpool.h
index 0fc740e4f..27de8d60a 100644
--- a/src/app/qbs/parser/commandlineoptionpool.h
+++ b/src/app/qbs/parser/commandlineoptionpool.h
@@ -54,6 +54,7 @@ public:
AllArtifactsOption *allArtifactsOption() const;
InstallRootOption *installRootOption() const;
RemoveFirstOption *removeFirstoption() const;
+ NoBuildOption *noBuildOption() const;
ForceOption *forceOption() const;
LogTimeOption *logTimeOption() const;
diff --git a/src/app/qbs/parser/commandlineparser.cpp b/src/app/qbs/parser/commandlineparser.cpp
index dd43002fb..b45e98344 100644
--- a/src/app/qbs/parser/commandlineparser.cpp
+++ b/src/app/qbs/parser/commandlineparser.cpp
@@ -179,6 +179,11 @@ bool CommandLineParser::logTime() const
return d->logTime;
}
+bool CommandLineParser::buildBeforeInstalling() const
+{
+ return !d->optionPool.noBuildOption()->enabled();
+}
+
QStringList CommandLineParser::runArgs() const
{
Q_ASSERT(d->command->type() == RunCommandType);
diff --git a/src/app/qbs/parser/commandlineparser.h b/src/app/qbs/parser/commandlineparser.h
index 6fdfe4dd2..76ea1ee94 100644
--- a/src/app/qbs/parser/commandlineparser.h
+++ b/src/app/qbs/parser/commandlineparser.h
@@ -60,6 +60,7 @@ public:
bool force() const;
bool dryRun() const;
bool logTime() const;
+ bool buildBeforeInstalling() const;
QStringList runArgs() const;
QStringList products() const;
QList<QVariantMap> buildConfigurations() const;