aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/api/internaljobs.cpp
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@digia.com>2014-07-11 17:19:04 +0200
committerChristian Kandeler <christian.kandeler@digia.com>2014-07-16 09:41:23 +0200
commit5ffdee71e50e9593794e66139baa0c355e0bd88e (patch)
tree2dcdf712bb546a04049c493f81c6fb93d21346ad /src/lib/corelib/api/internaljobs.cpp
parente85876f236ad45b3327b7efefe79430d3972a4cf (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.cpp10
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);
}