From 82709dc766fa478b08bb1fa6aba57cccf72d7194 Mon Sep 17 00:00:00 2001
From: Tobias Hunger <tobias.hunger@nokia.com>
Date: Tue, 17 Jan 2012 11:02:56 +0100
Subject: [PATCH] Git: Fix finding of top-level directory

Fix finding of top-level directory for git when
  * Git version >= 1.7.0 and
  * the directory queried does not exist

Task-number: QTCREATORBUG-6821
Change-Id: I54a6050b71fe924f421921b8e5b468578db1210d
Reviewed-by: Alessandro Portale <alessandro.portale@nokia.com>
---
 src/plugins/git/gitclient.cpp | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 6ad9ede5b49..9b5637bf831 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -368,10 +368,24 @@ const char *GitClient::decorateOption = "--decorate";
 QString GitClient::findRepositoryForDirectory(const QString &dir)
 {
     if (synchronousGitVersion(true) >= 0x010700) {
+        // Find a directory to run git in:
+        const QString root = QDir::rootPath();
+        const QString home = QDir::homePath();
+
+        QDir directory(dir);
+        do {
+            const QString absDirPath = directory.absolutePath();
+            if (absDirPath == root || absDirPath == home)
+                break;
+
+            if (directory.exists())
+                break;
+        } while (directory.cdUp());
+
         QByteArray outputText;
         QStringList arguments;
         arguments << QLatin1String("rev-parse") << QLatin1String("--show-toplevel");
-        fullySynchronousGit(dir, arguments, &outputText, 0, false);
+        fullySynchronousGit(directory.absolutePath(), arguments, &outputText, 0, false);
         return outputText.trimmed();
     } else {
         // Check for ".git/config"
-- 
GitLab