From 74ce5fff5248b3cfcd915728c87948280b7fe0a6 Mon Sep 17 00:00:00 2001
From: Tobias Hunger <tobias.hunger@theqtcompany.com>
Date: Mon, 3 Nov 2014 15:35:00 +0100
Subject: [PATCH] Subversion: Improve detection of svn directories

* Subversion was not found when calling the managesDirectory method
  in subversion's top level directory
* Subversion was not found for non-existing directories. This broke
  the wizard's version control support.

Task-number: QTCREATORBUG-7763
Change-Id: Iefbd8e179c48b188e4f079fce8f72ae8b3ec0236
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
---
 src/plugins/subversion/subversionplugin.cpp | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp
index ab61a121649..6db7adf3abd 100644
--- a/src/plugins/subversion/subversionplugin.cpp
+++ b/src/plugins/subversion/subversionplugin.cpp
@@ -1178,9 +1178,6 @@ QString SubversionPlugin::vcsGetRepositoryURL(const QString &directory)
 bool SubversionPlugin::managesDirectory(const QString &directory, QString *topLevel /* = 0 */) const
 {
     const QDir dir(directory);
-    if (!dir.exists())
-        return false;
-
     if (topLevel)
         topLevel->clear();
 
@@ -1188,12 +1185,13 @@ bool SubversionPlugin::managesDirectory(const QString &directory, QString *topLe
      * furthest parent containing ".svn/wc.db". Need to check for furthest parent as closer
      * parents may be svn:externals. */
     QDir parentDir = dir;
-    while (!parentDir.isRoot() && parentDir.cdUp()) {
+    while (!parentDir.isRoot()) {
         if (checkSVNSubDir(parentDir, QLatin1String("wc.db"))) {
             if (topLevel)
                 *topLevel = parentDir.absolutePath();
             return true;
         }
+        parentDir.cdUp();
     }
 
     /* Subversion < 1.7 has ".svn" directory in each directory
@@ -1230,10 +1228,10 @@ bool SubversionPlugin::checkSVNSubDir(const QDir &directory, const QString &file
 {
     const int dirCount = m_svnDirectories.size();
     for (int i = 0; i < dirCount; i++) {
-        const QString svnDir = directory.absoluteFilePath(m_svnDirectories.at(i));
-        if (!QFileInfo(svnDir).isDir())
+        const QDir svnDir(directory.absoluteFilePath(m_svnDirectories.at(i)));
+        if (!svnDir.exists())
             continue;
-        if (!fileName.isEmpty() && !QDir(svnDir).exists(fileName))
+        if (!fileName.isEmpty() && !svnDir.exists(fileName))
             continue;
         return true;
     }
-- 
GitLab