summaryrefslogtreecommitdiff
path: root/src/plugins/coreplugin/documentmanager.cpp
diff options
context:
space:
mode:
authorOrgad Shaneh <orgad.shaneh@audiocodes.com>2018-06-26 07:58:04 +0300
committerOrgad Shaneh <orgads@gmail.com>2018-06-27 09:43:47 +0000
commitb82ffb917b914411962213ca9ff6412e0551a46b (patch)
tree4408d0e399f6e54e8a7891b23ef92a30bfa4e14d /src/plugins/coreplugin/documentmanager.cpp
parentcaff9f9aacd5190b1e067a2ca0a56a14f2fe6996 (diff)
downloadqt-creator-b82ffb917b914411962213ca9ff6412e0551a46b.tar.gz
VcsCommand: Block auto reload while a command is running
Git rebase is executed in the background, and it can change a file multiple times in a short period. If we reparse a file while this happens on Windows, Git fails to replace it, the rebase action fails and the repository becomes unstable (remains with a modified file). See discussion at https://github.com/git-for-windows/git/pull/1666 Task-number: QTCREATORBUG-15449 Change-Id: Iba40a770a1df2dfff0dd1c874c491dfbe1cceb58 Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Diffstat (limited to 'src/plugins/coreplugin/documentmanager.cpp')
-rw-r--r--src/plugins/coreplugin/documentmanager.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/plugins/coreplugin/documentmanager.cpp b/src/plugins/coreplugin/documentmanager.cpp
index 28542f7e5e..f8222a3682 100644
--- a/src/plugins/coreplugin/documentmanager.cpp
+++ b/src/plugins/coreplugin/documentmanager.cpp
@@ -157,6 +157,7 @@ public:
QFileSystemWatcher *m_fileWatcher = nullptr; // Delayed creation.
QFileSystemWatcher *m_linkWatcher = nullptr; // Delayed creation (only UNIX/if a link is seen).
+ bool m_postponeAutoReload = false;
bool m_blockActivated = false;
bool m_checkOnFocusChange = false;
QString m_lastVisitedDirectory = QDir::currentPath();
@@ -597,6 +598,13 @@ void DocumentManager::unexpectFileChange(const QString &fileName)
updateExpectedState(filePathKey(fileName, ResolveLinks));
}
+void DocumentManager::setAutoReloadPostponed(bool postponed)
+{
+ d->m_postponeAutoReload = postponed;
+ if (!postponed)
+ QTimer::singleShot(500, m_instance, &DocumentManager::checkForReload);
+}
+
static bool saveModifiedFilesHelper(const QList<IDocument *> &documents,
const QString &message, bool *cancelled, bool silently,
const QString &alwaysSaveMessage, bool *alwaysSave,
@@ -990,7 +998,7 @@ void DocumentManager::changedFile(const QString &fileName)
void DocumentManager::checkForReload()
{
- if (d->m_changedFiles.isEmpty())
+ if (d->m_postponeAutoReload || d->m_changedFiles.isEmpty())
return;
if (QApplication::applicationState() != Qt::ApplicationActive)
return;