From f8e21037e30ad58204dfba6dd31a5d9d5489ac53 Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 24 May 2019 11:48:47 +0200 Subject: Qbs: Move environment cache from runconfiguration to project Change-Id: I2a987e55cde133931bb4578506bb26666eece601 Reviewed-by: Christian Kandeler --- src/plugins/qbsprojectmanager/qbsproject.cpp | 14 ++++++++++++++ src/plugins/qbsprojectmanager/qbsproject.h | 2 ++ src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp | 15 +-------------- src/plugins/qbsprojectmanager/qbsrunconfiguration.h | 3 --- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp index 727e464b43..7d44d03796 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.cpp +++ b/src/plugins/qbsprojectmanager/qbsproject.cpp @@ -469,6 +469,7 @@ void QbsProject::updateAfterParse() updateCppCodeModel(); updateQmlJsCodeModel(); emit fileListChanged(); + m_envCache.clear(); emit dataChanged(); } @@ -652,6 +653,7 @@ void QbsProject::updateAfterBuild() m_extraCompilersPending = false; updateCppCodeModel(); } + m_envCache.clear(); emit dataChanged(); } @@ -1115,6 +1117,16 @@ void QbsProject::updateApplicationTargets() bti.runEnvModifier = [targetFile, productData, this](Utils::Environment &env, bool usingLibraryPaths) { if (!qbsProject().isValid()) return; + + const QString key = env.toStringList().join(QChar()) + + QbsProject::uniqueProductName(productData) + + QString::number(usingLibraryPaths); + const auto it = m_envCache.constFind(key); + if (it != m_envCache.constEnd()) { + env = it.value(); + return; + } + QProcessEnvironment procEnv = env.toProcessEnvironment(); procEnv.insert(QLatin1String("QBS_RUN_FILE_PATH"), targetFile); QStringList setupRunEnvConfig; @@ -1133,6 +1145,8 @@ void QbsProject::updateApplicationTargets() foreach (const QString &key, procEnv.keys()) env.set(key, procEnv.value(key)); } + + m_envCache.insert(key, env); }; applications.append(bti); diff --git a/src/plugins/qbsprojectmanager/qbsproject.h b/src/plugins/qbsprojectmanager/qbsproject.h index 835f6c6b55..c60172e2ec 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.h +++ b/src/plugins/qbsprojectmanager/qbsproject.h @@ -164,6 +164,8 @@ private: QTimer m_parsingDelay; QList m_extraCompilers; bool m_extraCompilersPending = false; + + QHash m_envCache; }; } // namespace Internal diff --git a/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp index a162ef33c5..042d90c623 100644 --- a/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp +++ b/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp @@ -59,21 +59,9 @@ QbsRunConfiguration::QbsRunConfiguration(Target *target, Core::Id id) envAspect->addModifier([this](Environment &env) { bool usingLibraryPaths = aspect()->value(); - const auto key = qMakePair(env.toStringList(), usingLibraryPaths); - const auto it = m_envCache.constFind(key); - if (it != m_envCache.constEnd()) { - env = it.value(); - return; - } BuildTargetInfo bti = buildTargetInfo(); - if (bti.runEnvModifier) { - if (project()->isParsing() || BuildManager::isBuilding(this->target())) { - qCDebug(qbsPmLog) << "qbs project in flux, cannot modify environment"; - return; // Intentionally skips the cache update below. - } + if (bti.runEnvModifier) bti.runEnvModifier(env, usingLibraryPaths); - } - m_envCache.insert(key, env); }); addAspect(); @@ -108,7 +96,6 @@ QbsRunConfiguration::QbsRunConfiguration(Target *target, Core::Id id) this, &QbsRunConfiguration::updateTargetInformation); auto qbsProject = static_cast(target->project()); - connect(qbsProject, &QbsProject::dataChanged, this, [this] { m_envCache.clear(); }); connect(qbsProject, &Project::parsingFinished, this, &QbsRunConfiguration::updateTargetInformation); } diff --git a/src/plugins/qbsprojectmanager/qbsrunconfiguration.h b/src/plugins/qbsprojectmanager/qbsrunconfiguration.h index d7b75fa114..331df7ce6b 100644 --- a/src/plugins/qbsprojectmanager/qbsrunconfiguration.h +++ b/src/plugins/qbsprojectmanager/qbsrunconfiguration.h @@ -48,9 +48,6 @@ private: void doAdditionalSetup(const ProjectExplorer::RunConfigurationCreationInfo &rci) final; void updateTargetInformation(); - - using EnvCache = QHash, Utils::Environment>; - mutable EnvCache m_envCache; }; class QbsRunConfigurationFactory : public ProjectExplorer::RunConfigurationFactory -- cgit v1.2.3