diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 849e27dd140..ad2b2292909 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -361,9 +361,17 @@ const char *GitClient::decorateOption = "--decorate"; QString GitClient::findRepositoryForDirectory(const QString &dir) { - // Check for ".git/config" - const QString checkFile = QLatin1String(GIT_DIRECTORY) + QLatin1String("/config"); - return VcsBase::VcsBasePlugin::findRepositoryForDirectory(dir, checkFile); + if (synchronousGitVersion(true) >= 0x010700) { + QByteArray outputText; + QStringList arguments; + arguments << QLatin1String("rev-parse") << QLatin1String("--show-toplevel"); + fullySynchronousGit(dir, arguments, &outputText, 0, false); + return outputText.trimmed(); + } else { + // Check for ".git/config" + const QString checkFile = QLatin1String(GIT_DIRECTORY) + QLatin1String("/config"); + return VcsBase::VcsBasePlugin::findRepositoryForDirectory(dir, checkFile); + } } VcsBase::VcsBaseEditorWidget *GitClient::findExistingVCSEditor(const char *registerDynamicProperty, diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h index c2375287993..31ac4b740fc 100644 --- a/src/plugins/git/gitclient.h +++ b/src/plugins/git/gitclient.h @@ -87,7 +87,7 @@ public: unsigned gitVersion(bool silent, QString *errorMessage = 0) const; QString gitVersionString(bool silent, QString *errorMessage = 0) const; - static QString findRepositoryForDirectory(const QString &dir); + QString findRepositoryForDirectory(const QString &dir); void diff(const QString &workingDirectory, const QStringList &diffArgs, const QString &fileName); void diff(const QString &workingDirectory, const QStringList &diffArgs, diff --git a/src/plugins/git/gitversioncontrol.cpp b/src/plugins/git/gitversioncontrol.cpp index 3440e7e22e6..e2a09cc9639 100644 --- a/src/plugins/git/gitversioncontrol.cpp +++ b/src/plugins/git/gitversioncontrol.cpp @@ -230,7 +230,7 @@ bool GitVersionControl::vcsRemoveSnapshot(const QString &topLevel, const QString bool GitVersionControl::managesDirectory(const QString &directory, QString *topLevel) const { - const QString topLevelFound = GitClient::findRepositoryForDirectory(directory); + const QString topLevelFound = m_client->findRepositoryForDirectory(directory); if (topLevel) *topLevel = topLevelFound; return !topLevelFound.isEmpty();