aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/bazaar/bazaarplugin.cpp2
-rw-r--r--src/plugins/coreplugin/vcsmanager.cpp28
-rw-r--r--src/plugins/coreplugin/vcsmanager.h7
-rw-r--r--src/plugins/fossil/fossilplugin.cpp2
-rw-r--r--src/plugins/git/gitclient.cpp2
-rw-r--r--src/plugins/mercurial/mercurialplugin.cpp4
-rw-r--r--src/plugins/subversion/subversionplugin.cpp2
-rw-r--r--src/plugins/vcsbase/vcsbaseplugin.cpp26
-rw-r--r--src/plugins/vcsbase/vcsbaseplugin.h7
9 files changed, 41 insertions, 39 deletions
diff --git a/src/plugins/bazaar/bazaarplugin.cpp b/src/plugins/bazaar/bazaarplugin.cpp
index a8b0baa67c1..9102966a3dc 100644
--- a/src/plugins/bazaar/bazaarplugin.cpp
+++ b/src/plugins/bazaar/bazaarplugin.cpp
@@ -871,7 +871,7 @@ bool BazaarPluginPrivate::isVcsFileOrDirectory(const Utils::FilePath &fileName)
bool BazaarPluginPrivate::managesDirectory(const FilePath &directory, FilePath *topLevel) const
{
- const FilePath topLevelFound = VcsBase::findRepositoryForFile(
+ const FilePath topLevelFound = VcsManager::findRepositoryForFiles(
directory, {QString(Constants::BAZAARREPO) + "/branch-format"});
if (topLevel)
*topLevel = topLevelFound;
diff --git a/src/plugins/coreplugin/vcsmanager.cpp b/src/plugins/coreplugin/vcsmanager.cpp
index 3a419d507c7..de146a5656b 100644
--- a/src/plugins/coreplugin/vcsmanager.cpp
+++ b/src/plugins/coreplugin/vcsmanager.cpp
@@ -25,6 +25,8 @@
#include <optional>
+static Q_LOGGING_CATEGORY(findRepoLog, "qtc.vcs.find-repo", QtWarningMsg)
+
using namespace Utils;
namespace Core {
@@ -436,6 +438,32 @@ void VcsManager::clearVersionControlCache()
emit m_instance->repositoryChanged(repo);
}
+// Find top level for version controls like git/Mercurial that have
+// a directory at the top of the repository.
+// Note that checking for the existence of files is preferred over directories
+// since checking for directories can cause them to be created when
+// AutoFS is used (due its automatically creating mountpoints when querying
+// a directory). In addition, bail out when reaching the home directory
+// of the user or root (generally avoid '/', where mountpoints are created).
+FilePath VcsManager::findRepositoryForFiles(
+ const Utils::FilePath &fileOrDir, const QStringList &checkFiles)
+{
+ const FilePath dirS = fileOrDir.isDir() ? fileOrDir : fileOrDir.parentDir();
+ qCDebug(findRepoLog) << ">" << dirS << checkFiles;
+ QTC_ASSERT(!dirS.isEmpty(), return {});
+
+ FilePath parent;
+ for (FilePath dir = dirS; !dir.isEmpty() && !dir.isRootPath(); dir = dir.parentDir()) {
+ for (const QString &checkFile : checkFiles) {
+ if (dir.pathAppended(checkFile).isFile()) {
+ qCDebug(findRepoLog) << "<" << dir.toUserOutput();
+ return dir;
+ }
+ }
+ }
+ return {};
+}
+
void VcsManager::handleConfigurationChanges(IVersionControl *vc)
{
d->m_cachedAdditionalToolsPathsDirty = true;
diff --git a/src/plugins/coreplugin/vcsmanager.h b/src/plugins/coreplugin/vcsmanager.h
index 4daad33124d..f12b0df9ffa 100644
--- a/src/plugins/coreplugin/vcsmanager.h
+++ b/src/plugins/coreplugin/vcsmanager.h
@@ -76,6 +76,13 @@ public:
static void clearVersionControlCache();
+ // Convenience that searches for the repository specifically for version control
+ // systems that do not have directories like "CVS" in each managed subdirectory
+ // but have a directory at the top of the repository like ".git" containing
+ // a well known file. See implementation for gory details.
+ static Utils::FilePath findRepositoryForFiles(
+ const Utils::FilePath &fileOrDir, const QStringList &checkFiles);
+
signals:
void repositoryChanged(const Utils::FilePath &repository);
void configurationChanged(const IVersionControl *vcs);
diff --git a/src/plugins/fossil/fossilplugin.cpp b/src/plugins/fossil/fossilplugin.cpp
index 3c28916a778..ea049c95d93 100644
--- a/src/plugins/fossil/fossilplugin.cpp
+++ b/src/plugins/fossil/fossilplugin.cpp
@@ -801,7 +801,7 @@ bool FossilPluginPrivate::isVcsFileOrDirectory(const FilePath &filePath) const
bool FossilPluginPrivate::managesDirectory(const FilePath &directory, FilePath *topLevel) const
{
const FilePath topLevelFound
- = VcsBase::findRepositoryForFile(directory, {Constants::FOSSILREPO});
+ = VcsManager::findRepositoryForFiles(directory, {Constants::FOSSILREPO});
if (topLevel)
*topLevel = topLevelFound;
return !topLevelFound.isEmpty();
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index b7ac7428de9..6bb1301f40b 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -837,7 +837,7 @@ GitSettings &GitClient::settings()
FilePath GitClient::findRepositoryForDirectory(const FilePath &directory) const
{
- return VcsBase::findRepositoryForFile(directory, {".git", ".git/config"});
+ return VcsManager::findRepositoryForFiles(directory, {".git", ".git/config"});
}
FilePath GitClient::findGitDirForRepository(const FilePath &repositoryDir) const
diff --git a/src/plugins/mercurial/mercurialplugin.cpp b/src/plugins/mercurial/mercurialplugin.cpp
index d45af47fd18..92d50bae398 100644
--- a/src/plugins/mercurial/mercurialplugin.cpp
+++ b/src/plugins/mercurial/mercurialplugin.cpp
@@ -655,8 +655,8 @@ bool MercurialPluginPrivate::isVcsFileOrDirectory(const FilePath &filePath) cons
bool MercurialPluginPrivate::managesDirectory(const FilePath &filePath, FilePath *topLevel) const
{
- const FilePath topLevelFound
- = VcsBase::findRepositoryForFile(filePath, {QString(Constants::MERCURIALREPO) + "/requires"});
+ const FilePath topLevelFound = Core::VcsManager::findRepositoryForFiles(
+ filePath, {QString(Constants::MERCURIALREPO) + "/requires"});
if (topLevel)
*topLevel = topLevelFound;
return !topLevelFound.isEmpty();
diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp
index 8c27cad92e0..e07e9ad3a26 100644
--- a/src/plugins/subversion/subversionplugin.cpp
+++ b/src/plugins/subversion/subversionplugin.cpp
@@ -1026,7 +1026,7 @@ bool SubversionPluginPrivate::managesDirectory(const FilePath &directory, FilePa
const QStringList filesToCheck = transform(m_svnDirectories, [](const QString &s) {
return QString(s + "/wc.db");
});
- const FilePath topLevelFound = VcsBase::findRepositoryForFile(directory, filesToCheck);
+ const FilePath topLevelFound = VcsManager::findRepositoryForFiles(directory, filesToCheck);
if (topLevel)
*topLevel = topLevelFound;
return !topLevelFound.isEmpty();
diff --git a/src/plugins/vcsbase/vcsbaseplugin.cpp b/src/plugins/vcsbase/vcsbaseplugin.cpp
index e8b051377f2..1a8f33258e0 100644
--- a/src/plugins/vcsbase/vcsbaseplugin.cpp
+++ b/src/plugins/vcsbase/vcsbaseplugin.cpp
@@ -38,7 +38,6 @@ using namespace ProjectExplorer;
namespace {
static Q_LOGGING_CATEGORY(baseLog, "qtc.vcs.base", QtWarningMsg)
-static Q_LOGGING_CATEGORY(findRepoLog, "qtc.vcs.find-repo", QtWarningMsg)
static Q_LOGGING_CATEGORY(stateLog, "qtc.vcs.state", QtWarningMsg)
}
@@ -705,31 +704,6 @@ void VersionControlBase::discardCommit()
{
}
-// Find top level for version controls like git/Mercurial that have
-// a directory at the top of the repository.
-// Note that checking for the existence of files is preferred over directories
-// since checking for directories can cause them to be created when
-// AutoFS is used (due its automatically creating mountpoints when querying
-// a directory). In addition, bail out when reaching the home directory
-// of the user or root (generally avoid '/', where mountpoints are created).
-FilePath findRepositoryForFile(const FilePath &fileOrDir, const QStringList &checkFiles)
-{
- const FilePath dirS = fileOrDir.isDir() ? fileOrDir : fileOrDir.parentDir();
- qCDebug(findRepoLog) << ">" << dirS << checkFiles;
- QTC_ASSERT(!dirS.isEmpty(), return {});
-
- FilePath parent;
- for (FilePath dir = dirS; !dir.isEmpty() && !dir.isRootPath(); dir = dir.parentDir()) {
- for (const QString &checkFile : checkFiles) {
- if (dir.pathAppended(checkFile).isFile()) {
- qCDebug(findRepoLog) << "<" << dir.toUserOutput();
- return dir;
- }
- }
- }
- return {};
-}
-
static const char SOURCE_PROPERTY[] = "qtcreator_source";
void setSource(IDocument *document, const FilePath &source)
diff --git a/src/plugins/vcsbase/vcsbaseplugin.h b/src/plugins/vcsbase/vcsbaseplugin.h
index 7d7f38b0e56..3505f41d160 100644
--- a/src/plugins/vcsbase/vcsbaseplugin.h
+++ b/src/plugins/vcsbase/vcsbaseplugin.h
@@ -94,13 +94,6 @@ private:
QSharedDataPointer<VcsBasePluginStateData> data;
};
-// Convenience that searches for the repository specifically for version control
-// systems that do not have directories like "CVS" in each managed subdirectory
-// but have a directory at the top of the repository like ".git" containing
-// a well known file. See implementation for gory details.
-VCSBASE_EXPORT Utils::FilePath findRepositoryForFile(
- const Utils::FilePath &fileOrDir, const QStringList &checkFiles);
-
// Set up the environment for a version control command line call.
// Sets up SSH graphical password prompting (note that the latter
// requires a terminal-less process) and sets LANG to 'C' to force English