diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 6ad9ede5b4998149479f28b3770ab4c377d09b70..9b5637bf8316b2798bdfccaa4c16df61724811fd 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"