summaryrefslogtreecommitdiff
path: root/src/lib/buildgraph/buildgraphloader.cpp
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@digia.com>2013-11-14 14:31:13 +0100
committerJoerg Bornemann <joerg.bornemann@digia.com>2013-11-14 14:40:22 +0100
commite91f6b50957c504bd05bba20734c56eb8d6f2f23 (patch)
tree9bd7e563e8530b8db4fb7fdc90b83edfb4f252b3 /src/lib/buildgraph/buildgraphloader.cpp
parent154b78e01ad4fdec9c68ca84b9ac0afd8d5a22e8 (diff)
parent4d97182f31e19881d8246324bc1a119b7d77e28a (diff)
downloadqbs-e91f6b50957c504bd05bba20734c56eb8d6f2f23.tar.gz
Merge remote-tracking branch 'origin/1.1'
Change-Id: I7475c4a71c15c83c59400c44ef96d73d15caea58
Diffstat (limited to 'src/lib/buildgraph/buildgraphloader.cpp')
-rw-r--r--src/lib/buildgraph/buildgraphloader.cpp22
1 files changed, 15 insertions, 7 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 &paramet
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 &paramet
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);