aboutsummaryrefslogtreecommitdiffstats
path: root/src/app/qbs
diff options
context:
space:
mode:
authorJake Petroules <jake.petroules@qt.io>2016-07-07 13:07:20 -0700
committerJake Petroules <jake.petroules@qt.io>2016-07-14 16:05:05 +0000
commit65cb4cba999b47a643e820a102b3185f861b97c1 (patch)
tree943c30a1389fca4b7709d9a23ba05a0d77658019 /src/app/qbs
parent8d4d75b9ad62e48e9a3920df9815f391b2e81e6e (diff)
Introduce the --wait-lock command line option
This allows multiple qbs processes competing for the same configuration instance to be launched simultaneously, and the inactive instances will wait indefinitely for the lock file to be released. This is primarily intended for use by the IDE generator plugins like Visual Studio where the "Build Solution" command builds all projects in the solution in parallel (and this cannot be disabled). Change-Id: I13c37a21dd8386e3dfdab1f769b8242bfcfc2e45 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/app/qbs')
-rw-r--r--src/app/qbs/commandlinefrontend.cpp1
-rw-r--r--src/app/qbs/parser/command.cpp3
-rw-r--r--src/app/qbs/parser/commandlineoption.cpp12
-rw-r--r--src/app/qbs/parser/commandlineoption.h11
-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
8 files changed, 40 insertions, 2 deletions
diff --git a/src/app/qbs/commandlinefrontend.cpp b/src/app/qbs/commandlinefrontend.cpp
index 4c84ed77f..4b60b06d0 100644
--- a/src/app/qbs/commandlinefrontend.cpp
+++ b/src/app/qbs/commandlinefrontend.cpp
@@ -134,6 +134,7 @@ void CommandLineFrontend::start()
params.setIgnoreDifferentProjectFilePath(m_parser.force());
params.setDryRun(m_parser.dryRun());
params.setForceProbeExecution(m_parser.forceProbesExecution());
+ params.setWaitLockBuildGraph(m_parser.waitLockBuildGraph());
params.setLogElapsedTime(m_parser.logTime());
params.setSettingsDirectory(m_settings->baseDirectory());
if (!m_parser.buildBeforeInstalling() || m_parser.command() == DumpNodesTreeCommandType)
diff --git a/src/app/qbs/parser/command.cpp b/src/app/qbs/parser/command.cpp
index b67daefad..48e48aa02 100644
--- a/src/app/qbs/parser/command.cpp
+++ b/src/app/qbs/parser/command.cpp
@@ -253,7 +253,8 @@ static QList<CommandLineOption::Type> buildOptions()
<< CommandLineOption::VersionOptionType
<< CommandLineOption::CommandEchoModeOptionType
<< CommandLineOption::NoInstallOptionType
- << CommandLineOption::RemoveFirstOptionType;
+ << CommandLineOption::RemoveFirstOptionType
+ << CommandLineOption::WaitLockOptionType;
}
QList<CommandLineOption::Type> BuildCommand::supportedOptions() const
diff --git a/src/app/qbs/parser/commandlineoption.cpp b/src/app/qbs/parser/commandlineoption.cpp
index 4dd12c6f9..895eb42b8 100644
--- a/src/app/qbs/parser/commandlineoption.cpp
+++ b/src/app/qbs/parser/commandlineoption.cpp
@@ -641,4 +641,16 @@ void CommandEchoModeOption::doParse(const QString &representation, QStringList &
m_echoMode = commandEchoModeFromName(mode);
}
+QString WaitLockOption::description(CommandType command) const
+{
+ Q_UNUSED(command);
+ return Tr::tr("%1\n\tWait indefinitely for other processes to release the build graph lock.\n")
+ .arg(longRepresentation());
+}
+
+QString WaitLockOption::longRepresentation() const
+{
+ return QLatin1String("--wait-lock");
+}
+
} // namespace qbs
diff --git a/src/app/qbs/parser/commandlineoption.h b/src/app/qbs/parser/commandlineoption.h
index d986856a9..e27ef9518 100644
--- a/src/app/qbs/parser/commandlineoption.h
+++ b/src/app/qbs/parser/commandlineoption.h
@@ -62,7 +62,8 @@ public:
LogTimeOptionType,
CommandEchoModeOptionType,
SettingsDirOptionType,
- GeneratorOptionType
+ GeneratorOptionType,
+ WaitLockOptionType
};
virtual ~CommandLineOption();
@@ -382,6 +383,14 @@ private:
QString m_settingsDir;
};
+class WaitLockOption : public OnOffOption
+{
+public:
+ QString description(CommandType command) const;
+ QString shortRepresentation() const { return QString(); }
+ QString longRepresentation() const;
+};
+
} // namespace qbs
#endif // QBS_COMMANDLINEOPTION_H
diff --git a/src/app/qbs/parser/commandlineoptionpool.cpp b/src/app/qbs/parser/commandlineoptionpool.cpp
index fd77c791c..66e1c1699 100644
--- a/src/app/qbs/parser/commandlineoptionpool.cpp
+++ b/src/app/qbs/parser/commandlineoptionpool.cpp
@@ -116,6 +116,9 @@ CommandLineOption *CommandLineOptionPool::getOption(CommandLineOption::Type type
case CommandLineOption::GeneratorOptionType:
option = new GeneratorOption;
break;
+ case CommandLineOption::WaitLockOptionType:
+ option = new WaitLockOption;
+ break;
default:
qFatal("Unknown option type %d", type);
}
@@ -253,4 +256,9 @@ GeneratorOption *CommandLineOptionPool::generatorOption() const
return static_cast<GeneratorOption *>(getOption(CommandLineOption::GeneratorOptionType));
}
+WaitLockOption *CommandLineOptionPool::waitLockOption() const
+{
+ return static_cast<WaitLockOption *>(getOption(CommandLineOption::WaitLockOptionType));
+}
+
} // namespace qbs
diff --git a/src/app/qbs/parser/commandlineoptionpool.h b/src/app/qbs/parser/commandlineoptionpool.h
index 9cc9eb0ca..53578b423 100644
--- a/src/app/qbs/parser/commandlineoptionpool.h
+++ b/src/app/qbs/parser/commandlineoptionpool.h
@@ -67,6 +67,7 @@ public:
CommandEchoModeOption *commandEchoModeOption() const;
SettingsDirOption *settingsDirOption() const;
GeneratorOption *generatorOption() const;
+ WaitLockOption *waitLockOption() const;
private:
mutable QHash<CommandLineOption::Type, CommandLineOption *> m_options;
diff --git a/src/app/qbs/parser/commandlineparser.cpp b/src/app/qbs/parser/commandlineparser.cpp
index addaffaef..6abc9a83b 100644
--- a/src/app/qbs/parser/commandlineparser.cpp
+++ b/src/app/qbs/parser/commandlineparser.cpp
@@ -221,6 +221,11 @@ bool CommandLineParser::forceProbesExecution() const
return d->optionPool.forceProbesOption()->enabled();
}
+bool CommandLineParser::waitLockBuildGraph() const
+{
+ return d->optionPool.waitLockOption()->enabled();
+}
+
bool CommandLineParser::logTime() const
{
return d->logTime;
diff --git a/src/app/qbs/parser/commandlineparser.h b/src/app/qbs/parser/commandlineparser.h
index 2732b3c04..2c409bcfc 100644
--- a/src/app/qbs/parser/commandlineparser.h
+++ b/src/app/qbs/parser/commandlineparser.h
@@ -66,6 +66,7 @@ public:
bool forceOutputCheck() const;
bool dryRun() const;
bool forceProbesExecution() const;
+ bool waitLockBuildGraph() const;
bool logTime() const;
bool withNonDefaultProducts() const;
bool buildBeforeInstalling() const;