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,
&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

View File

@@ -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);