aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/buildgraph
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@digia.com>2014-07-15 13:36:35 +0200
committerChristian Kandeler <christian.kandeler@digia.com>2014-07-15 14:43:24 +0200
commitb515d24924bfa8a52c67522172ecf2291d9d95f5 (patch)
treeb8a08841de2529a4dd73ece3ba3a95aa75be3a27 /src/lib/corelib/buildgraph
parent471b0c93e128f5ac7998cdd22047438c72af9d6b (diff)
Refactor BuildGraphLoader::load().
Move the code that actually loads the project from a file into its own function. Change-Id: I258f97e8411a54e99fa274041f9054ce0703e273 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com> Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
Diffstat (limited to 'src/lib/corelib/buildgraph')
-rw-r--r--src/lib/corelib/buildgraph/buildgraphloader.cpp56
-rw-r--r--src/lib/corelib/buildgraph/buildgraphloader.h7
2 files changed, 35 insertions, 28 deletions
diff --git a/src/lib/corelib/buildgraph/buildgraphloader.cpp b/src/lib/corelib/buildgraph/buildgraphloader.cpp
index f5586be21..f31ef0794 100644
--- a/src/lib/corelib/buildgraph/buildgraphloader.cpp
+++ b/src/lib/corelib/buildgraph/buildgraphloader.cpp
@@ -45,7 +45,6 @@
#include <tools/persistence.h>
#include <tools/propertyfinder.h>
#include <tools/qbsassert.h>
-#include <tools/setupprojectparameters.h>
#include <QDir>
#include <QFileInfo>
@@ -102,13 +101,26 @@ static void restoreBackPointers(const ResolvedProjectPtr &project)
BuildGraphLoadResult BuildGraphLoader::load(const SetupProjectParameters &parameters,
const RulesEvaluationContextPtr &evalContext)
{
+ m_parameters = parameters;
m_result = BuildGraphLoadResult();
m_evalContext = evalContext;
+ loadBuildGraphFromDisk();
+ if (!m_result.loadedProject)
+ return m_result;
+ if (parameters.restoreBehavior() == SetupProjectParameters::RestoreOnly)
+ return m_result;
+ QBS_CHECK(parameters.restoreBehavior() == SetupProjectParameters::RestoreAndTrackChanges);
- const QString projectId = TopLevelProject::deriveId(parameters.topLevelProfile(),
- parameters.finalBuildConfigurationTree());
+ trackProjectChanges(m_result.loadedProject);
+ return m_result;
+}
+
+void BuildGraphLoader::loadBuildGraphFromDisk()
+{
+ const QString projectId = TopLevelProject::deriveId(m_parameters.topLevelProfile(),
+ m_parameters.finalBuildConfigurationTree());
const QString buildDir
- = TopLevelProject::deriveBuildDirectory(parameters.buildRoot(), projectId);
+ = TopLevelProject::deriveBuildDirectory(m_parameters.buildRoot(), projectId);
const QString buildGraphFilePath
= ProjectBuildData::deriveBuildGraphFilePath(buildDir, projectId);
@@ -117,27 +129,27 @@ BuildGraphLoadResult BuildGraphLoader::load(const SetupProjectParameters &parame
try {
pool.load(buildGraphFilePath);
} catch (const ErrorInfo &loadError) {
- if (parameters.restoreBehavior() == SetupProjectParameters::RestoreOnly)
+ if (m_parameters.restoreBehavior() == SetupProjectParameters::RestoreOnly)
throw;
m_logger.qbsInfo() << loadError.toString();
- return m_result;
+ return;
}
const TopLevelProjectPtr project = TopLevelProject::create();
// TODO: Store some meta data that will enable us to show actual progress (e.g. number of products).
- evalContext->initializeObserver(Tr::tr("Restoring build graph from disk"), 1);
+ m_evalContext->initializeObserver(Tr::tr("Restoring build graph from disk"), 1);
project->load(pool);
- project->buildData->evaluationContext = evalContext;
+ project->buildData->evaluationContext = m_evalContext;
- if (QFileInfo(project->location.fileName()) != QFileInfo(parameters.projectFilePath())) {
+ if (QFileInfo(project->location.fileName()) != QFileInfo(m_parameters.projectFilePath())) {
QString errorMessage = Tr::tr("Stored build graph at '%1' is for project file '%2', but "
"input file is '%3'. ")
.arg(QDir::toNativeSeparators(buildGraphFilePath),
QDir::toNativeSeparators(project->location.fileName()),
- QDir::toNativeSeparators(parameters.projectFilePath()));
- if (!parameters.ignoreDifferentProjectFilePath()) {
+ QDir::toNativeSeparators(m_parameters.projectFilePath()));
+ if (!m_parameters.ignoreDifferentProjectFilePath()) {
errorMessage += Tr::tr("Aborting.");
throw ErrorInfo(errorMessage);
}
@@ -149,32 +161,26 @@ BuildGraphLoadResult BuildGraphLoader::load(const SetupProjectParameters &parame
restoreBackPointers(project);
- project->location = CodeLocation(parameters.projectFilePath(), project->location.line(),
+ project->location = CodeLocation(m_parameters.projectFilePath(), project->location.line(),
project->location.column());
project->setBuildConfiguration(pool.headData().projectConfig);
project->buildDirectory = buildDir;
m_result.loadedProject = project;
- evalContext->incrementProgressValue();
+ m_evalContext->incrementProgressValue();
doSanityChecks(project, m_logger);
-
- if (parameters.restoreBehavior() == SetupProjectParameters::RestoreOnly)
- return m_result;
- QBS_CHECK(parameters.restoreBehavior() == SetupProjectParameters::RestoreAndTrackChanges);
-
- trackProjectChanges(parameters, project, pool.headData().projectConfig);
- return m_result;
}
-void BuildGraphLoader::trackProjectChanges(const SetupProjectParameters &parameters,
- const TopLevelProjectPtr &restoredProject, const QVariantMap &oldProjectConfig)
+void BuildGraphLoader::trackProjectChanges(const TopLevelProjectPtr &restoredProject)
{
QSet<QString> buildSystemFiles = restoredProject->buildSystemFiles;
QList<ResolvedProductPtr> allRestoredProducts = restoredProject->allProducts();
QList<ResolvedProductPtr> changedProducts;
QList<ResolvedProductPtr> productsWithChangedFiles;
bool reResolvingNecessary = false;
- if (!isConfigCompatible(parameters.finalBuildConfigurationTree(), oldProjectConfig))
+ if (!isConfigCompatible(m_parameters.finalBuildConfigurationTree(),
+ restoredProject->buildConfiguration())) {
reResolvingNecessary = true;
+ }
if (hasProductFileChanged(allRestoredProducts, restoredProject->lastResolveTime,
buildSystemFiles, productsWithChangedFiles)) {
reResolvingNecessary = true;
@@ -196,9 +202,9 @@ void BuildGraphLoader::trackProjectChanges(const SetupProjectParameters &paramet
restoredProject->buildData->isDirty = true;
Loader ldr(m_evalContext->engine(), m_logger);
- ldr.setSearchPaths(parameters.searchPaths());
+ ldr.setSearchPaths(m_parameters.searchPaths());
ldr.setProgressObserver(m_evalContext->observer());
- m_result.newlyResolvedProject = ldr.loadProject(parameters);
+ m_result.newlyResolvedProject = ldr.loadProject(m_parameters);
QMap<QString, ResolvedProductPtr> freshProductsByName;
QList<ResolvedProductPtr> allNewlyResolvedProducts
diff --git a/src/lib/corelib/buildgraph/buildgraphloader.h b/src/lib/corelib/buildgraph/buildgraphloader.h
index 48cf40abe..57285b62a 100644
--- a/src/lib/corelib/buildgraph/buildgraphloader.h
+++ b/src/lib/corelib/buildgraph/buildgraphloader.h
@@ -36,12 +36,12 @@
#include <buildgraph/artifactset.h>
#include <language/forward_decls.h>
#include <logging/logger.h>
+#include <tools/setupprojectparameters.h>
#include <QProcessEnvironment>
#include <QVariantMap>
namespace qbs {
-class SetupProjectParameters;
namespace Internal {
class FileDependency;
@@ -68,8 +68,8 @@ public:
const RulesEvaluationContextPtr &evalContext);
private:
- void trackProjectChanges(const SetupProjectParameters &parameters,
- const TopLevelProjectPtr &restoredProject, const QVariantMap &oldProjectConfig);
+ void loadBuildGraphFromDisk();
+ void trackProjectChanges(const TopLevelProjectPtr &restoredProject);
bool hasEnvironmentChanged(const TopLevelProjectConstPtr &restoredProject) const;
bool hasFileExistsResultChanged(const TopLevelProjectConstPtr &restoredProject) const;
bool hasFileLastModifiedResultChanged(const TopLevelProjectConstPtr &restoredProject) const;
@@ -117,6 +117,7 @@ private:
const AllRescuableArtifactData &existingRad);
RulesEvaluationContextPtr m_evalContext;
+ SetupProjectParameters m_parameters;
BuildGraphLoadResult m_result;
Logger m_logger;
QProcessEnvironment m_environment;