diff options
author | Jake Petroules <jake.petroules@qt.io> | 2016-07-07 13:07:20 -0700 |
---|---|---|
committer | Jake Petroules <jake.petroules@qt.io> | 2016-07-14 16:05:05 +0000 |
commit | 65cb4cba999b47a643e820a102b3185f861b97c1 (patch) | |
tree | 943c30a1389fca4b7709d9a23ba05a0d77658019 /src/app/qbs | |
parent | 8d4d75b9ad62e48e9a3920df9815f391b2e81e6e (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.cpp | 1 | ||||
-rw-r--r-- | src/app/qbs/parser/command.cpp | 3 | ||||
-rw-r--r-- | src/app/qbs/parser/commandlineoption.cpp | 12 | ||||
-rw-r--r-- | src/app/qbs/parser/commandlineoption.h | 11 | ||||
-rw-r--r-- | src/app/qbs/parser/commandlineoptionpool.cpp | 8 | ||||
-rw-r--r-- | src/app/qbs/parser/commandlineoptionpool.h | 1 | ||||
-rw-r--r-- | src/app/qbs/parser/commandlineparser.cpp | 5 | ||||
-rw-r--r-- | src/app/qbs/parser/commandlineparser.h | 1 |
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; |