diff options
author | Christian Kandeler <christian.kandeler@digia.com> | 2014-07-15 13:36:35 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@digia.com> | 2014-07-15 14:43:24 +0200 |
commit | b515d24924bfa8a52c67522172ecf2291d9d95f5 (patch) | |
tree | b8a08841de2529a4dd73ece3ba3a95aa75be3a27 /src/lib/corelib/buildgraph | |
parent | 471b0c93e128f5ac7998cdd22047438c72af9d6b (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.cpp | 56 | ||||
-rw-r--r-- | src/lib/corelib/buildgraph/buildgraphloader.h | 7 |
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 ¶meters, 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 ¶me 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 ¶me 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 ¶meters, - 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 ¶met 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 ¶meters, - 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; |