diff options
author | Joerg Bornemann <joerg.bornemann@digia.com> | 2014-07-16 17:30:01 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@digia.com> | 2014-07-17 13:08:11 +0200 |
commit | 32c4d3d7d26937c8f2a0f2f99add2eb0b0f1e503 (patch) | |
tree | b61d49ff5ec5730040404e31f4edc7563000ef34 /src/lib/corelib/language | |
parent | 1c982622acd9e38096dd9feabe8e5a4c129df31c (diff) |
fix calculation of added/removed artifacts
We kept lists of added and removed artifacts in ProductBuildData. It was
never quite clear when to invalidate those lists, which led to QBS-635.
Instead we let the RuleNode decide which artifacts it considers as
"added or removed for this rule".
Task-number: QBS-635
Change-Id: I390e0ab775c695045c6e91ade3ac7326692cb314
Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
Diffstat (limited to 'src/lib/corelib/language')
-rw-r--r-- | src/lib/corelib/language/language.cpp | 76 | ||||
-rw-r--r-- | src/lib/corelib/language/language.h | 7 |
2 files changed, 0 insertions, 83 deletions
diff --git a/src/lib/corelib/language/language.cpp b/src/lib/corelib/language/language.cpp index f13a6fb82..56a560d44 100644 --- a/src/lib/corelib/language/language.cpp +++ b/src/lib/corelib/language/language.cpp @@ -664,63 +664,6 @@ void ResolvedProduct::setupRunEnvironment(ScriptEngine *engine, const QProcessEn runEnvironment = getProcessEnvironment(engine, RunEnv, modules, moduleProperties, env); } -static bool removeFromHash(ProductBuildData::ArtifactSetByFileTag &tagHash, const FileTag &tag, - Artifact *artifact) -{ - const ProductBuildData::ArtifactSetByFileTag::Iterator it = tagHash.find(tag); - if (it == tagHash.end()) - return false; - - ArtifactSet &artifacts = it.value(); - const bool wasInSet = artifacts.remove(artifact); - if (wasInSet) { - if (artifacts.isEmpty()) - tagHash.erase(it); // Do not keep empty artifact set in hash. - return true; - } - return false; -} - -void ResolvedProduct::registerAddedFileTag(const FileTag &fileTag, Artifact *artifact) -{ - QBS_CHECK(buildData); - QBS_CHECK(artifact->product == this); - if (removeFromHash(buildData->removedArtifactsByFileTag, fileTag, artifact)) - return; - buildData->addedArtifactsByFileTag[fileTag].insert(artifact); -} - -void ResolvedProduct::registerAddedArtifact(Artifact *artifact) -{ - QBS_CHECK(buildData); - QBS_CHECK(artifact->product == this); - foreach (const FileTag &tag, artifact->fileTags) - registerAddedFileTag(tag, artifact); -} - -void ResolvedProduct::unregisterAddedArtifact(Artifact *artifact) -{ - ProductBuildData::ArtifactSetByFileTag::Iterator it - = buildData->addedArtifactsByFileTag.begin(); - while (it != buildData->addedArtifactsByFileTag.end()) { - ArtifactSet &artifacts = it.value(); - artifacts.remove(artifact); - if (artifacts.isEmpty()) - it = buildData->addedArtifactsByFileTag.erase(it); - else - ++it; - } -} - -void ResolvedProduct::registerRemovedFileTag(const FileTag &fileTag, Artifact *artifact) -{ - QBS_CHECK(buildData); - QBS_CHECK(artifact->product == this); - if (removeFromHash(buildData->addedArtifactsByFileTag, fileTag, artifact)) - return; - buildData->removedArtifactsByFileTag[fileTag].insert(artifact); -} - void ResolvedProduct::registerArtifactWithChangedInputs(Artifact *artifact) { QBS_CHECK(buildData); @@ -746,25 +689,6 @@ void ResolvedProduct::unmarkForReapplication(const RuleConstPtr &rule) buildData->artifactsWithChangedInputsPerRule.remove(rule); } -const ArtifactSet ResolvedProduct::addedArtifactsByFileTag(const FileTag &tag) const -{ - return buildData->addedArtifactsByFileTag.value(tag); -} - -bool ResolvedProduct::isAdded(Artifact *a) const -{ - foreach (const ArtifactSet &artifacts, buildData->addedArtifactsByFileTag) { - if (artifacts.contains(a)) - return true; - } - return false; -} - -const ArtifactSet ResolvedProduct::removedArtifactsByFileTag(const FileTag &tag) const -{ - return buildData->removedArtifactsByFileTag.value(tag); -} - bool ResolvedProduct::isMarkedForReapplication(const RuleConstPtr &rule) const { return !buildData->artifactsWithChangedInputsPerRule.value(rule).isEmpty(); diff --git a/src/lib/corelib/language/language.h b/src/lib/corelib/language/language.h index bff76aab8..145e4d22b 100644 --- a/src/lib/corelib/language/language.h +++ b/src/lib/corelib/language/language.h @@ -384,16 +384,9 @@ public: void setupBuildEnvironment(ScriptEngine *scriptEngine, const QProcessEnvironment &env) const; void setupRunEnvironment(ScriptEngine *scriptEngine, const QProcessEnvironment &env) const; - void registerAddedFileTag(const FileTag &fileTag, Artifact *artifact); - void registerAddedArtifact(Artifact *artifact); - void unregisterAddedArtifact(Artifact *artifact); - void registerRemovedFileTag(const FileTag &fileTag, Artifact *artifact); void registerArtifactWithChangedInputs(Artifact *artifact); void unregisterArtifactWithChangedInputs(Artifact *artifact); void unmarkForReapplication(const RuleConstPtr &rule); - const ArtifactSet addedArtifactsByFileTag(const FileTag &tag) const; - bool isAdded(Artifact *a) const; - const ArtifactSet removedArtifactsByFileTag(const FileTag &tag) const; bool isMarkedForReapplication(const RuleConstPtr &rule) const; ArtifactSet lookupArtifactsByFileTag(const FileTag &tag) const; ArtifactSet targetArtifacts() const; |