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>
This commit is contained in:
Orgad Shaneh
2018-06-26 07:58:04 +03:00
committed by Orgad Shaneh
parent caff9f9aac
commit b82ffb917b
5 changed files with 22 additions and 1 deletions

View File

@@ -27,6 +27,7 @@
#include "vcsbaseplugin.h"
#include "vcsoutputwindow.h"
#include <coreplugin/documentmanager.h>
#include <coreplugin/vcsmanager.h>
#include <utils/synchronousprocess.h>
@@ -56,6 +57,14 @@ VcsCommand::VcsCommand(const QString &workingDirectory,
return proxy;
});
connect(this, &VcsCommand::started, this, [this] {
if (flags() & ExpectRepoChanges)
Core::DocumentManager::setAutoReloadPostponed(true);
});
connect(this, &VcsCommand::finished, this, [this] {
if (flags() & ExpectRepoChanges)
Core::DocumentManager::setAutoReloadPostponed(false);
});
}
const QProcessEnvironment VcsCommand::processEnvironment() const