diff options
| author | Joerg Bornemann <joerg.bornemann@digia.com> | 2013-11-14 14:31:13 +0100 |
|---|---|---|
| committer | Joerg Bornemann <joerg.bornemann@digia.com> | 2013-11-14 14:40:22 +0100 |
| commit | e91f6b50957c504bd05bba20734c56eb8d6f2f23 (patch) | |
| tree | 9bd7e563e8530b8db4fb7fdc90b83edfb4f252b3 /src/lib/buildgraph | |
| parent | 154b78e01ad4fdec9c68ca84b9ac0afd8d5a22e8 (diff) | |
| parent | 4d97182f31e19881d8246324bc1a119b7d77e28a (diff) | |
| download | qbs-e91f6b50957c504bd05bba20734c56eb8d6f2f23.tar.gz | |
Merge remote-tracking branch 'origin/1.1'
Change-Id: I7475c4a71c15c83c59400c44ef96d73d15caea58
Diffstat (limited to 'src/lib/buildgraph')
| -rw-r--r-- | src/lib/buildgraph/buildgraphloader.cpp | 22 | ||||
| -rw-r--r-- | src/lib/buildgraph/buildgraphloader.h | 7 |
2 files changed, 20 insertions, 9 deletions
diff --git a/src/lib/buildgraph/buildgraphloader.cpp b/src/lib/buildgraph/buildgraphloader.cpp index 1ef1f8dcc..7ebca9703 100644 --- a/src/lib/buildgraph/buildgraphloader.cpp +++ b/src/lib/buildgraph/buildgraphloader.cpp @@ -205,9 +205,19 @@ void BuildGraphLoader::trackProjectChanges(const SetupProjectParameters ¶met productsWithChangedFiles); QSharedPointer<ProjectBuildData> oldBuildData; + ChildListHash childLists; if (!changedProducts.isEmpty() || !productsWithChangedFiles.isEmpty()) { oldBuildData = QSharedPointer<ProjectBuildData>( new ProjectBuildData(restoredProject->buildData.data())); + foreach (const ResolvedProductConstPtr &product, allRestoredProducts) { + if (!product->buildData) + continue; + + // If the product gets temporarily removed, its artifacts will get disconnected + // and this structural information will no longer be directly available from them. + foreach (const Artifact * const a, product->buildData->artifacts) + childLists.insert(a, a->children); + } } // For products with "serious" changes such as different prepare scripts, we set up the @@ -285,7 +295,7 @@ void BuildGraphLoader::trackProjectChanges(const SetupProjectParameters ¶met foreach (const ResolvedProductConstPtr &changedProduct, changedProducts) { rescueOldBuildData(changedProduct, freshProductsByName.value(changedProduct->name), - oldBuildData.data()); + oldBuildData.data(), childLists); } doSanityChecks(m_result.newlyResolvedProject, m_logger); @@ -413,6 +423,8 @@ bool BuildGraphLoader::checkProductForChanges(const ResolvedProductPtr &restored { return !transformerListsAreEqual(restoredProduct->transformers, newlyResolvedProduct->transformers) + || !ruleListsAreEqual(restoredProduct->rules.toList(), + newlyResolvedProduct->rules.toList()) || !dependenciesAreEqual(restoredProduct, newlyResolvedProduct) || checkForPropertyChanges(restoredProduct, newlyResolvedProduct); // TODO: Check for more stuff. @@ -698,7 +710,7 @@ static bool commandsEqual(const TransformerConstPtr &t1, const TransformerConstP */ void BuildGraphLoader::rescueOldBuildData(const ResolvedProductConstPtr &restoredProduct, const ResolvedProductPtr &newlyResolvedProduct, - const ProjectBuildData *oldBuildData) + const ProjectBuildData *oldBuildData, const ChildListHash &childLists) { if (!restoredProduct->enabled || !newlyResolvedProduct->enabled) return; @@ -731,11 +743,7 @@ void BuildGraphLoader::rescueOldBuildData(const ResolvedProductConstPtr &restore } artifact->setTimestamp(oldArtifact->timestamp()); - foreach (Artifact * const oldChild, oldArtifact->children) { - // skip transform edges - if (oldArtifact->transformer->inputs.contains(oldChild)) - continue; - + foreach (Artifact * const oldChild, childLists.value(oldArtifact)) { foreach (FileResourceBase *childFileRes, newlyResolvedProduct->topLevelProject()->buildData->lookupFiles(oldChild)) { Artifact * const child = dynamic_cast<Artifact *>(childFileRes); diff --git a/src/lib/buildgraph/buildgraphloader.h b/src/lib/buildgraph/buildgraphloader.h index f13749f26..4806daad3 100644 --- a/src/lib/buildgraph/buildgraphloader.h +++ b/src/lib/buildgraph/buildgraphloader.h @@ -31,6 +31,7 @@ #include "forward_decls.h" +#include <buildgraph/artifactlist.h> #include <language/forward_decls.h> #include <logging/logger.h> @@ -41,7 +42,6 @@ namespace qbs { class SetupProjectParameters; namespace Internal { -class ArtifactList; class FileDependency; class FileResourceBase; class FileTime; @@ -97,9 +97,12 @@ private: const PropertyMapConstPtr &newProperties); void replaceFileDependencyWithArtifact(const ResolvedProductPtr &fileDepProduct, FileDependency *filedep, Artifact *artifact); + + typedef QHash<const Artifact *, ArtifactList> ChildListHash; void rescueOldBuildData(const ResolvedProductConstPtr &restoredProduct, const ResolvedProductPtr &newlyResolvedProduct, - const ProjectBuildData *oldBuildData); + const ProjectBuildData *oldBuildData, + const ChildListHash &childLists); RulesEvaluationContextPtr m_evalContext; BuildGraphLoadResult m_result; |
