From 6383643d32e5666e7c12e05f40d9bfcb53f83e3e Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Date: Thu, 20 May 2010 14:52:08 +0200
Subject: [PATCH] VCS[Subversion/Perforce]: Fix VCSManager caching (Windows).

Ensure clean paths are returned by
IVersionControl::findTopLevelForDirectory() as otherwise caching
of VCSManager breaks (Windows) and commands are executed all over
again. Fix display in SVN/CVS.

Acked-by: con
---
 src/plugins/cvs/cvsplugin.cpp               | 3 ++-
 src/plugins/perforce/perforcechecker.cpp    | 3 ++-
 src/plugins/subversion/subversionplugin.cpp | 5 +++--
 3 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/plugins/cvs/cvsplugin.cpp b/src/plugins/cvs/cvsplugin.cpp
index f1b21a4de6d..1f7e646fe1d 100644
--- a/src/plugins/cvs/cvsplugin.cpp
+++ b/src/plugins/cvs/cvsplugin.cpp
@@ -980,7 +980,8 @@ static inline QString msgExecutionLogEntry(const QString &workingDir, const QStr
     const QString args = arguments.join(QString(QLatin1Char(' ')));
     if (workingDir.isEmpty())
         return CVSPlugin::tr("Executing: %1 %2\n").arg(executable, args);
-    return CVSPlugin::tr("Executing in %1: %2 %3\n").arg(workingDir, executable, args);
+    return CVSPlugin::tr("Executing in %1: %2 %3\n").
+            arg(QDir::toNativeSeparators(workingDir), executable, args);
 }
 
 // Run CVS. At this point, file arguments must be relative to
diff --git a/src/plugins/perforce/perforcechecker.cpp b/src/plugins/perforce/perforcechecker.cpp
index 315c7311b49..ea48d9db00f 100644
--- a/src/plugins/perforce/perforcechecker.cpp
+++ b/src/plugins/perforce/perforcechecker.cpp
@@ -155,8 +155,9 @@ static inline QString clientRootFromOutput(const QString &in)
     QRegExp regExp(QLatin1String("(\\n|\\r\\n|\\r)Root:\\s*(.*)(\\n|\\r\\n|\\r)"));
     QTC_ASSERT(regExp.isValid(), return QString());
     regExp.setMinimal(true);
+    // Normalize slashes and capitalization of Windows drive letters for caching.
     if (regExp.indexIn(in) != -1)
-        return regExp.cap(2).trimmed();
+        return QFileInfo(regExp.cap(2).trimmed()).absoluteFilePath();
     return QString();
 }
 
diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp
index 36e60dcc937..a29483bd189 100644
--- a/src/plugins/subversion/subversionplugin.cpp
+++ b/src/plugins/subversion/subversionplugin.cpp
@@ -1030,7 +1030,8 @@ static inline QString msgExecutionLogEntry(const QString &workingDir, const QStr
     const QString argsS = SubversionSettings::formatArguments(arguments);
     if (workingDir.isEmpty())
         return SubversionPlugin::tr("Executing: %1 %2\n").arg(executable, argsS);
-    return SubversionPlugin::tr("Executing in %1: %2 %3\n").arg(workingDir, executable, argsS);
+    return SubversionPlugin::tr("Executing in %1: %2 %3\n").
+            arg(QDir::toNativeSeparators(workingDir), executable, argsS);
 }
 
 SubversionResponse SubversionPlugin::runSvn(const QString &workingDir,
@@ -1252,7 +1253,7 @@ QString SubversionPlugin::findTopLevelForDirectoryI(const QString &directory) co
         return QString();
     for (QDir parentDir = lastDirectory; parentDir.cdUp() ; lastDirectory = parentDir) {
         if (!managesDirectory(parentDir))
-            return QDir::toNativeSeparators(lastDirectory.absolutePath());
+            return lastDirectory.absolutePath();
     }
     return QString();
 }
-- 
GitLab