From 7199d9fb5d01c8ddac0e47d9d9309900a014c0d3 Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Mon, 6 Jan 2025 16:04:23 +0100 Subject: [PATCH] CMakePM: Avoid multiple file-api "dirty" reparsing The m_lastReplyTimestamp was only updated in FileApiReader::endState, which can let multiple FileApiReader::dirty signal emisions. Task-number: QTCREATORBUG-31536 Change-Id: Ic69e573b769f3de2460b9571706955c45faebf32 Reviewed-by: Alessandro Portale --- src/plugins/cmakeprojectmanager/fileapireader.cpp | 8 +++++--- src/plugins/cmakeprojectmanager/fileapireader.h | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/fileapireader.cpp b/src/plugins/cmakeprojectmanager/fileapireader.cpp index e3a36d64208..5592381df73 100644 --- a/src/plugins/cmakeprojectmanager/fileapireader.cpp +++ b/src/plugins/cmakeprojectmanager/fileapireader.cpp @@ -42,7 +42,7 @@ FileApiReader::FileApiReader() QObject::connect(&m_watcher, &FileSystemWatcher::directoryChanged, this, - &FileApiReader::replyDirectoryHasChanged); + &FileApiReader::handleReplyDirectoryChange); } FileApiReader::~FileApiReader() @@ -410,7 +410,7 @@ void FileApiReader::cmakeFinishedState(int exitCode) m_lastCMakeExitCode != 0); } -void FileApiReader::replyDirectoryHasChanged(const QString &directory) const +void FileApiReader::handleReplyDirectoryChange(const QString &directory) { if (m_isParsing) return; // This has been triggered by ourselves, ignore. @@ -422,8 +422,10 @@ void FileApiReader::replyDirectoryHasChanged(const QString &directory) const QTC_CHECK(!dir.needsDevice()); QTC_ASSERT(dir.path() == directory, return); - if (m_lastReplyTimestamp.isValid() && reply.lastModified() > m_lastReplyTimestamp) + if (m_lastReplyTimestamp.isValid() && reply.lastModified() > m_lastReplyTimestamp) { + m_lastReplyTimestamp = reply.lastModified(); emit dirty(); + } } } // CMakeProjectManager::Internal diff --git a/src/plugins/cmakeprojectmanager/fileapireader.h b/src/plugins/cmakeprojectmanager/fileapireader.h index dca928cddc1..de56ad900d8 100644 --- a/src/plugins/cmakeprojectmanager/fileapireader.h +++ b/src/plugins/cmakeprojectmanager/fileapireader.h @@ -78,7 +78,7 @@ private: void startCMakeState(const QStringList &configurationArguments); void cmakeFinishedState(int exitCode); - void replyDirectoryHasChanged(const QString &directory) const; + void handleReplyDirectoryChange(const QString &directory); void makeBackupConfiguration(bool store); void writeConfigurationIntoBuildDirectory(const QStringList &configuration);