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 <alessandro.portale@qt.io>
This commit is contained in:
Cristian Adam
2025-01-06 16:04:23 +01:00
parent fc4f69ed43
commit 7199d9fb5d
2 changed files with 6 additions and 4 deletions

View File

@@ -42,7 +42,7 @@ FileApiReader::FileApiReader()
QObject::connect(&m_watcher, QObject::connect(&m_watcher,
&FileSystemWatcher::directoryChanged, &FileSystemWatcher::directoryChanged,
this, this,
&FileApiReader::replyDirectoryHasChanged); &FileApiReader::handleReplyDirectoryChange);
} }
FileApiReader::~FileApiReader() FileApiReader::~FileApiReader()
@@ -410,7 +410,7 @@ void FileApiReader::cmakeFinishedState(int exitCode)
m_lastCMakeExitCode != 0); m_lastCMakeExitCode != 0);
} }
void FileApiReader::replyDirectoryHasChanged(const QString &directory) const void FileApiReader::handleReplyDirectoryChange(const QString &directory)
{ {
if (m_isParsing) if (m_isParsing)
return; // This has been triggered by ourselves, ignore. return; // This has been triggered by ourselves, ignore.
@@ -422,8 +422,10 @@ void FileApiReader::replyDirectoryHasChanged(const QString &directory) const
QTC_CHECK(!dir.needsDevice()); QTC_CHECK(!dir.needsDevice());
QTC_ASSERT(dir.path() == directory, return); 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(); emit dirty();
}
} }
} // CMakeProjectManager::Internal } // CMakeProjectManager::Internal

View File

@@ -78,7 +78,7 @@ private:
void startCMakeState(const QStringList &configurationArguments); void startCMakeState(const QStringList &configurationArguments);
void cmakeFinishedState(int exitCode); void cmakeFinishedState(int exitCode);
void replyDirectoryHasChanged(const QString &directory) const; void handleReplyDirectoryChange(const QString &directory);
void makeBackupConfiguration(bool store); void makeBackupConfiguration(bool store);
void writeConfigurationIntoBuildDirectory(const QStringList &configuration); void writeConfigurationIntoBuildDirectory(const QStringList &configuration);