aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authordt <[email protected]>2009-06-18 14:30:04 +0200
committerdt <[email protected]>2009-06-18 14:30:04 +0200
commit4637d56284be035fb4ac9d6c5c1a24f4ab50d46f (patch)
treec34d129c9d1421423d5bda820827c9caac672cc8 /src/plugins
parent69d04bc069dd07f2bb4bfb905d4a88b6b12a8bbd (diff)
Don't ask to reload the file, if the user uses git/undo or git/revert.
Simply do it. Task-Nr: 254558
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/coreplugin/filemanager.cpp30
-rw-r--r--src/plugins/coreplugin/filemanager.h19
-rw-r--r--src/plugins/git/gitclient.cpp1
-rw-r--r--src/plugins/git/gitplugin.cpp12
-rw-r--r--src/plugins/perforce/perforceplugin.cpp13
-rw-r--r--src/plugins/subversion/subversionplugin.cpp18
6 files changed, 67 insertions, 26 deletions
diff --git a/src/plugins/coreplugin/filemanager.cpp b/src/plugins/coreplugin/filemanager.cpp
index c7ae13639ec..e0525edbc89 100644
--- a/src/plugins/coreplugin/filemanager.cpp
+++ b/src/plugins/coreplugin/filemanager.cpp
@@ -602,3 +602,33 @@ QList<IFile *> FileManager::managedFiles(const QString &fileName) const
}
return result;
}
+
+FileChangeBlocker::FileChangeBlocker(const QString &fileName)
+ : m_reload(false)
+{
+ Core::FileManager *fm = Core::ICore::instance()->fileManager();
+ m_files = fm->managedFiles(fileName);
+ foreach (Core::IFile *file, m_files)
+ fm->blockFileChange(file);
+}
+
+FileChangeBlocker::~FileChangeBlocker()
+{
+ Core::IFile::ReloadBehavior tempBehavior = Core::IFile::ReloadAll;
+ Core::FileManager *fm = Core::ICore::instance()->fileManager();
+ foreach (Core::IFile *file, m_files) {
+ if (m_reload)
+ file->modified(&tempBehavior);
+ fm->unblockFileChange(file);
+ }
+}
+
+void FileChangeBlocker::setModifiedReload(bool b)
+{
+ m_reload = b;
+}
+
+bool FileChangeBlocker::modifiedReload() const
+{
+ return m_reload;
+}
diff --git a/src/plugins/coreplugin/filemanager.h b/src/plugins/coreplugin/filemanager.h
index e49541e19c4..558fac55b1e 100644
--- a/src/plugins/coreplugin/filemanager.h
+++ b/src/plugins/coreplugin/filemanager.h
@@ -136,6 +136,25 @@ private:
bool m_blockActivated;
};
+/*! The FileChangeBlocker blocks all change notifications to all IFile * that
+ match the given filename. And unblocks in the destructor.
+
+ To also reload the IFile in the destructor class set modifiedReload to true
+
+ */
+class CORE_EXPORT FileChangeBlocker
+{
+public:
+ FileChangeBlocker(const QString &fileName);
+ ~FileChangeBlocker();
+ void setModifiedReload(bool reload);
+ bool modifiedReload() const;
+private:
+ QList<IFile *> m_files;
+ bool m_reload;
+ Q_DISABLE_COPY(FileChangeBlocker);
+};
+
} // namespace Core
#endif // FILEMANAGER_H
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index b32f4e4653d..74841b74b1b 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -42,6 +42,7 @@
#include <coreplugin/messagemanager.h>
#include <coreplugin/progressmanager/progressmanager.h>
#include <coreplugin/uniqueidmanager.h>
+#include <coreplugin/filemanager.h>
#include <texteditor/itexteditor.h>
#include <utils/qtcassert.h>
#include <vcsbase/vcsbaseeditor.h>
diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp
index 0c8729cd252..595090085cb 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -553,7 +553,14 @@ void GitPlugin::undoFileChanges()
QFileInfo fileInfo = currentFile();
QString fileName = fileInfo.fileName();
QString workingDirectory = fileInfo.absolutePath();
- m_gitClient->checkout(workingDirectory, fileName);
+
+ Core::FileChangeBlocker fcb(fileInfo.filePath());
+ fcb.setModifiedReload(true);
+
+ QString errorMessage;
+ if (!m_gitClient->synchronousCheckout(workingDirectory, QStringList() << fileName, &errorMessage))
+ m_outputWindow->append(errorMessage);
+
}
void GitPlugin::undoProjectChanges()
@@ -583,6 +590,9 @@ void GitPlugin::unstageFile()
void GitPlugin::revertFile()
{
const QFileInfo fileInfo = currentFile();
+ Core::FileChangeBlocker fcb(fileInfo.filePath());
+ fcb.setModifiedReload(true);
+
m_gitClient->revert(QStringList(fileInfo.absoluteFilePath()));
}
diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp
index 789f56a60f5..92ac232b832 100644
--- a/src/plugins/perforce/perforceplugin.cpp
+++ b/src/plugins/perforce/perforceplugin.cpp
@@ -444,18 +444,9 @@ void PerforcePlugin::revertCurrentFile()
return;
}
- Core::FileManager *fm = Core::ICore::instance()->fileManager();
- QList<Core::IFile *> files = fm->managedFiles(fileName);
- foreach (Core::IFile *file, files) {
- fm->blockFileChange(file);
- }
+ Core::FileChangeBlocker fcb(fileName);
+ fcb.setModifiedReload(true);
PerforceResponse result2 = runP4Cmd(QStringList() << QLatin1String("revert") << fileName, QStringList(), CommandToWindow|StdOutToWindow|StdErrToWindow|ErrorToWindow);
- Core::IFile::ReloadBehavior tempBehavior =
- Core::IFile::ReloadAll;
- foreach (Core::IFile *file, files) {
- file->modified(&tempBehavior);
- fm->unblockFileChange(file);
- }
}
void PerforcePlugin::diffCurrentFile()
diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp
index 64488069912..1c794e84a75 100644
--- a/src/plugins/subversion/subversionplugin.cpp
+++ b/src/plugins/subversion/subversionplugin.cpp
@@ -611,10 +611,8 @@ void SubversionPlugin::revertCurrentFile()
QMessageBox::Yes, QMessageBox::No) == QMessageBox::No)
return;
- Core::FileManager *fm = Core::ICore::instance()->fileManager();
- QList<Core::IFile *> files = fm->managedFiles(file);
- foreach (Core::IFile *file, files)
- fm->blockFileChange(file);
+
+ Core::FileChangeBlocker fcb(file);
// revert
args.clear();
@@ -622,16 +620,8 @@ void SubversionPlugin::revertCurrentFile()
args.append(file);
const SubversionResponse revertResponse = runSvn(args, subversionShortTimeOut, true);
- if (revertResponse.error) {
- foreach (Core::IFile *file, files)
- fm->unblockFileChange(file);
- return;
- }
-
- Core::IFile::ReloadBehavior tempBehavior = Core::IFile::ReloadAll;
- foreach (Core::IFile *file, files) {
- file->modified(&tempBehavior);
- fm->unblockFileChange(file);
+ if (!revertResponse.error) {
+ fcb.setModifiedReload(true);
}
}