]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/versioncontrol/fileviewsvnplugin.cpp
Get back names, and use "using" keyword to keep GCC silent on "method foo on base...
[dolphin.git] / src / versioncontrol / fileviewsvnplugin.cpp
index 7e56c724c3b8738aadf3b4af5ab6a4bbcebb4363..f43f10e98d97c07000692ecd52aba7d0f5b456b0 100644 (file)
@@ -43,6 +43,7 @@ K_EXPORT_PLUGIN(FileViewSvnPluginFactory("fileviewsvnplugin"))
 
 FileViewSvnPlugin::FileViewSvnPlugin(QObject* parent, const QList<QVariant>& args) :
     KVersionControlPlugin(parent),
+    m_pendingOperation(false),
     m_versionInfoHash(),
     m_versionInfoKeys(),
     m_updateAction(0),
@@ -102,6 +103,15 @@ bool FileViewSvnPlugin::beginRetrieval(const QString& directory)
 {
     Q_ASSERT(directory.endsWith('/'));
 
+    // clear all entries for this directory
+    QMutableHashIterator<QString, VersionState> it(m_versionInfoHash);
+    while (it.hasNext()) {
+        it.next();
+        if (it.key().startsWith(directory)) {
+            it.remove();
+        }
+    }
+
     QStringList arguments;
     arguments << "status" << "--show-updates" << directory;
 
@@ -213,7 +223,7 @@ QList<QAction*> FileViewSvnPlugin::contextMenuActions(const KFileItemList& items
 
 QList<QAction*> FileViewSvnPlugin::contextMenuActions(const QString& directory)
 {
-    const bool enabled = m_contextItems.isEmpty();
+    const bool enabled = !m_pendingOperation;
     if (enabled) {
         m_contextDir = directory;
     }
@@ -309,9 +319,13 @@ void FileViewSvnPlugin::removeFiles()
                    i18nc("@info:status", "Removed files from SVN repository."));
 }
 
-void FileViewSvnPlugin::slotOperationCompleted()
+void FileViewSvnPlugin::slotOperationCompleted(int exitCode, QProcess::ExitStatus exitStatus)
 {
-    if (m_contextItems.isEmpty()) {
+    m_pendingOperation = false;
+
+    if ((exitStatus != QProcess::NormalExit) || (exitCode != 0)) {
+        emit errorMessage(m_errorMsg);
+    } else if (m_contextItems.isEmpty()) {
         emit operationCompletedMessage(m_operationCompletedMsg);
         emit versionStatesChanged();
     } else {
@@ -321,10 +335,11 @@ void FileViewSvnPlugin::slotOperationCompleted()
 
 void FileViewSvnPlugin::slotOperationError()
 {
-    emit errorMessage(m_errorMsg);
-
     // don't do any operation on other items anymore
     m_contextItems.clear();
+    m_pendingOperation = false;
+
+    emit errorMessage(m_errorMsg);
 }
 
 void FileViewSvnPlugin::execSvnCommand(const QString& svnCommand,
@@ -343,9 +358,11 @@ void FileViewSvnPlugin::execSvnCommand(const QString& svnCommand,
 
 void FileViewSvnPlugin::startSvnCommandProcess()
 {
+    m_pendingOperation = true;
+
     QProcess* process = new QProcess(this);
-    connect(process, SIGNAL(finished(int)),
-            this, SLOT(slotOperationCompleted()));
+    connect(process, SIGNAL(finished(int, QProcess::ExitStatus)),
+            this, SLOT(slotOperationCompleted(int, QProcess::ExitStatus)));
     connect(process, SIGNAL(error(QProcess::ProcessError)),
             this, SLOT(slotOperationError()));