diff options
author | Joerg Bornemann <joerg.bornemann@digia.com> | 2014-07-11 17:19:04 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@digia.com> | 2014-07-16 09:41:23 +0200 |
commit | 5ffdee71e50e9593794e66139baa0c355e0bd88e (patch) | |
tree | 2dcdf712bb546a04049c493f81c6fb93d21346ad /src/lib/corelib/api/internaljobs.cpp | |
parent | e85876f236ad45b3327b7efefe79430d3972a4cf (diff) |
Put a system-wide lock on the build directory.
So that two qbs instances can't overwrite each other's
build graphs. In practice, this is probably most relevant
for IDEs, as these hold a build graph for potentially long
periods of time.
Facilitates QLockFile that was introduced in Qt 5.1. For older
Qt versions, no locking happens.
Task-number: QBS-162
Change-Id: Ib598617fb1742eb57b6a017f40b9631d1d54e627
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Diffstat (limited to 'src/lib/corelib/api/internaljobs.cpp')
-rw-r--r-- | src/lib/corelib/api/internaljobs.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/lib/corelib/api/internaljobs.cpp b/src/lib/corelib/api/internaljobs.cpp index 840d7cc1c..ededa3279 100644 --- a/src/lib/corelib/api/internaljobs.cpp +++ b/src/lib/corelib/api/internaljobs.cpp @@ -42,6 +42,7 @@ #include <language/loader.h> #include <logging/logger.h> #include <logging/translator.h> +#include <tools/buildgraphlocker.h> #include <tools/error.h> #include <tools/progressobserver.h> #include <tools/preferences.h> @@ -228,14 +229,23 @@ TopLevelProjectPtr InternalSetupProjectJob::project() const void InternalSetupProjectJob::start() { + BuildGraphLocker *bgLocker = 0; try { const ErrorInfo err = m_parameters.expandBuildConfiguration(); if (err.hasError()) throw err; + const QString projectId = TopLevelProject::deriveId(m_parameters.topLevelProfile(), + m_parameters.finalBuildConfigurationTree()); + const QString buildDir + = TopLevelProject::deriveBuildDirectory(m_parameters.buildRoot(), projectId); + bgLocker = new BuildGraphLocker(ProjectBuildData::deriveBuildGraphFilePath(buildDir, + projectId)); execute(); + m_project->bgLocker = bgLocker; } catch (const ErrorInfo &error) { m_project.clear(); setError(error); + delete bgLocker; } emit finished(this); } |