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