diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2018-01-12 17:53:09 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2018-02-16 10:17:28 +0000 |
commit | 21c5ea0f79ad0e89eaa29ab5b91387b8454c4e3e (patch) | |
tree | 6b5ce9f69177a739842fc893f1e1a722a115bfaf /src/lib/corelib/buildgraph/artifactsscriptvalue.cpp | |
parent | 33006868d9d1bf1bee214f6d55c2cafde3cd2e3a (diff) |
Track accesses to product.artifacts
... and take the data into account when deciding whether to
re-run rules and commands.
Change-Id: Ib0f733028617eaa91cbf902c5537f30375900646
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'src/lib/corelib/buildgraph/artifactsscriptvalue.cpp')
-rw-r--r-- | src/lib/corelib/buildgraph/artifactsscriptvalue.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/lib/corelib/buildgraph/artifactsscriptvalue.cpp b/src/lib/corelib/buildgraph/artifactsscriptvalue.cpp index ff6c409e3..eb9f5f587 100644 --- a/src/lib/corelib/buildgraph/artifactsscriptvalue.cpp +++ b/src/lib/corelib/buildgraph/artifactsscriptvalue.cpp @@ -86,13 +86,25 @@ static void setArtifactsMapUpToDate(const ResolvedProduct *p) } static void setArtifactsMapUpToDate(const ResolvedModule *) { } +static void registerArtifactsMapAccess(const ResolvedProduct *p, ScriptEngine *e) +{ + e->setArtifactsMapRequested(p); +} +static void registerArtifactsMapAccess(const ResolvedModule *, ScriptEngine *) {} +static void registerArtifactsSetAccess(const ResolvedProduct *p, const FileTag &t, ScriptEngine *e) +{ + e->setArtifactSetRequestedForTag(p, t); +} +static void registerArtifactsSetAccess(const ResolvedModule *, const FileTag &, ScriptEngine *) {} + template<class ProductOrModule> static QScriptValue js_artifactsForFileTag( QScriptContext *ctx, ScriptEngine *engine, const ProductOrModule *productOrModule) { + const FileTag fileTag = FileTag(ctx->callee().property(FileTagKey).toString().toUtf8()); + registerArtifactsSetAccess(productOrModule, fileTag, engine); QScriptValue result = ctx->callee().property(CachedValueKey); if (result.isArray()) return result; - const FileTag fileTag = FileTag(ctx->callee().property(FileTagKey).toString().toUtf8()); auto artifacts = artifactsMap(productOrModule).value(fileTag); const auto filter = [productOrModule](const Artifact *a) { return !isRelevantArtifact(productOrModule, a); @@ -109,6 +121,7 @@ template<class ProductOrModule> static QScriptValue js_artifactsForFileTag( template<class ProductOrModule> static QScriptValue js_artifacts( QScriptContext *ctx, ScriptEngine *engine, const ProductOrModule *productOrModule) { + registerArtifactsMapAccess(productOrModule, engine); QScriptValue artifactsObj = ctx->callee().property(CachedValueKey); if (artifactsObj.isObject() && isArtifactsMapUpToDate(productOrModule)) return artifactsObj; |