aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@qt.io>2016-10-20 13:06:11 +0200
committerTobias Hunger <tobias.hunger@qt.io>2016-10-21 13:04:40 +0000
commit28325aa446e59cfc428ed48e7a29a64cfd006431 (patch)
tree58a67dbbdb31cee7178b25025c8f3022efb932d0
parent768eb4e52ecf5da9b25c05828c666d28560d735d (diff)
VCS: Add a way to filter out files/directories that belong to a VCS
Change-Id: I4dcbe6242cfe327e3b72d3dd550309be45e326a9 Reviewed-by: Orgad Shaneh <orgads@gmail.com>
-rw-r--r--src/plugins/bazaar/bazaarclient.cpp8
-rw-r--r--src/plugins/bazaar/bazaarclient.h1
-rw-r--r--src/plugins/bazaar/bazaarcontrol.cpp5
-rw-r--r--src/plugins/bazaar/bazaarcontrol.h2
-rw-r--r--src/plugins/clearcase/clearcasecontrol.cpp6
-rw-r--r--src/plugins/clearcase/clearcasecontrol.h2
-rw-r--r--src/plugins/coreplugin/iversioncontrol.h14
-rw-r--r--src/plugins/cvs/cvscontrol.cpp7
-rw-r--r--src/plugins/cvs/cvscontrol.h2
-rw-r--r--src/plugins/git/gitversioncontrol.cpp8
-rw-r--r--src/plugins/git/gitversioncontrol.h2
-rw-r--r--src/plugins/mercurial/mercurialclient.cpp7
-rw-r--r--src/plugins/mercurial/mercurialclient.h1
-rw-r--r--src/plugins/mercurial/mercurialcontrol.cpp5
-rw-r--r--src/plugins/mercurial/mercurialcontrol.h2
-rw-r--r--src/plugins/perforce/perforceversioncontrol.cpp6
-rw-r--r--src/plugins/perforce/perforceversioncontrol.h1
-rw-r--r--src/plugins/subversion/subversioncontrol.cpp5
-rw-r--r--src/plugins/subversion/subversioncontrol.h1
-rw-r--r--src/plugins/subversion/subversionplugin.cpp10
-rw-r--r--src/plugins/subversion/subversionplugin.h2
21 files changed, 97 insertions, 0 deletions
diff --git a/src/plugins/bazaar/bazaarclient.cpp b/src/plugins/bazaar/bazaarclient.cpp
index 991f9947419..20808eea4c2 100644
--- a/src/plugins/bazaar/bazaarclient.cpp
+++ b/src/plugins/bazaar/bazaarclient.cpp
@@ -32,6 +32,8 @@
#include <vcsbase/vcsoutputwindow.h>
#include <vcsbase/vcsbaseeditorparameterwidget.h>
+#include <utils/hostosinfo.h>
+
#include <QDir>
#include <QFileInfo>
#include <QTextStream>
@@ -171,6 +173,12 @@ VcsBaseEditorWidget *BazaarClient::annotate(
QStringList(extraOptions) << QLatin1String("--long"));
}
+bool BazaarClient::isVcsDirectory(const FileName &fileName) const
+{
+ return fileName.toFileInfo().isDir()
+ && fileName.fileName().compare(Constants::BAZAARREPO, HostOsInfo::fileNameCaseSensitivity());
+}
+
QString BazaarClient::findTopLevelForFile(const QFileInfo &file) const
{
const QString repositoryCheckFile =
diff --git a/src/plugins/bazaar/bazaarclient.h b/src/plugins/bazaar/bazaarclient.h
index c4293366a2a..96f6a97a80f 100644
--- a/src/plugins/bazaar/bazaarclient.h
+++ b/src/plugins/bazaar/bazaarclient.h
@@ -52,6 +52,7 @@ public:
VcsBase::VcsBaseEditorWidget *annotate(
const QString &workingDir, const QString &file, const QString &revision = QString(),
int lineNumber = -1, const QStringList &extraOptions = QStringList());
+ bool isVcsDirectory(const Utils::FileName &fileName) const;
QString findTopLevelForFile(const QFileInfo &file) const;
bool managesFile(const QString &workingDirectory, const QString &fileName) const;
diff --git a/src/plugins/bazaar/bazaarcontrol.cpp b/src/plugins/bazaar/bazaarcontrol.cpp
index 35269f622ca..3db806cf0c3 100644
--- a/src/plugins/bazaar/bazaarcontrol.cpp
+++ b/src/plugins/bazaar/bazaarcontrol.cpp
@@ -52,6 +52,11 @@ Core::Id BazaarControl::id() const
return Core::Id(VcsBase::Constants::VCS_ID_BAZAAR);
}
+bool BazaarControl::isVcsFileOrDirectory(const Utils::FileName &fileName) const
+{
+ return m_bazaarClient->isVcsDirectory(fileName);
+}
+
bool BazaarControl::managesDirectory(const QString &directory, QString *topLevel) const
{
QFileInfo dir(directory);
diff --git a/src/plugins/bazaar/bazaarcontrol.h b/src/plugins/bazaar/bazaarcontrol.h
index 9ecb827d363..020e15d37bb 100644
--- a/src/plugins/bazaar/bazaarcontrol.h
+++ b/src/plugins/bazaar/bazaarcontrol.h
@@ -48,6 +48,8 @@ public:
QString displayName() const final;
Core::Id id() const final;
+ bool isVcsFileOrDirectory(const Utils::FileName &fileName) const final;
+
bool managesDirectory(const QString &filename, QString *topLevel = 0) const final;
bool managesFile(const QString &workingDirectory, const QString &fileName) const final;
bool isConfigured() const final;
diff --git a/src/plugins/clearcase/clearcasecontrol.cpp b/src/plugins/clearcase/clearcasecontrol.cpp
index 5c358082dfb..ef18e6d62db 100644
--- a/src/plugins/clearcase/clearcasecontrol.cpp
+++ b/src/plugins/clearcase/clearcasecontrol.cpp
@@ -49,6 +49,12 @@ Core::Id ClearCaseControl::id() const
return Constants::VCS_ID_CLEARCASE;
}
+bool ClearCaseControl::isVcsFileOrDirectory(const Utils::FileName &fileName) const
+{
+ Q_UNUSED(fileName);
+ return false; // ClearCase has no files/directories littering the sources
+}
+
bool ClearCaseControl::isConfigured() const
{
#ifdef WITH_TESTS
diff --git a/src/plugins/clearcase/clearcasecontrol.h b/src/plugins/clearcase/clearcasecontrol.h
index 050a4bd23ea..07648d4836c 100644
--- a/src/plugins/clearcase/clearcasecontrol.h
+++ b/src/plugins/clearcase/clearcasecontrol.h
@@ -42,6 +42,8 @@ public:
QString displayName() const final;
Core::Id id() const final;
+ bool isVcsFileOrDirectory(const Utils::FileName &fileName) const final;
+
bool managesDirectory(const QString &directory, QString *topLevel = 0) const final;
bool managesFile(const QString &workingDirectory, const QString &fileName) const final;
diff --git a/src/plugins/coreplugin/iversioncontrol.h b/src/plugins/coreplugin/iversioncontrol.h
index a78775bae3a..eb880e7c70f 100644
--- a/src/plugins/coreplugin/iversioncontrol.h
+++ b/src/plugins/coreplugin/iversioncontrol.h
@@ -93,6 +93,17 @@ public:
virtual Id id() const = 0;
/*!
+ * \brief isVcsFileOrDirectory
+ * \param fileName
+ * \return True if filename is a file or directory that is maintained by the
+ * version control system.
+ *
+ * It will return true only for exact matches of the name, not for e.g. files in a
+ * directory owned by the version control system (e.g. .git/control).
+ */
+ virtual bool isVcsFileOrDirectory(const Utils::FileName &fileName) const = 0;
+
+ /*!
* Returns whether files in this directory should be managed with this
* version control.
* If \a topLevel is non-null, it should return the topmost directory,
@@ -232,6 +243,9 @@ public:
{ }
~TestVersionControl();
+ bool isVcsFileOrDirectory(const Utils::FileName &fileName) const final
+ { Q_UNUSED(fileName); return false; }
+
void setManagedDirectories(const QHash<QString, QString> &dirs);
void setManagedFiles(const QSet<QString> &files);
diff --git a/src/plugins/cvs/cvscontrol.cpp b/src/plugins/cvs/cvscontrol.cpp
index c277557d163..22f09bdff56 100644
--- a/src/plugins/cvs/cvscontrol.cpp
+++ b/src/plugins/cvs/cvscontrol.cpp
@@ -33,6 +33,7 @@
#include <vcsbase/vcscommand.h>
#include <utils/fileutils.h>
+#include <utils/hostosinfo.h>
#include <utils/qtcassert.h>
#include <QFileInfo>
@@ -54,6 +55,12 @@ Core::Id CvsControl::id() const
return Core::Id(VcsBase::Constants::VCS_ID_CVS);
}
+bool CvsControl::isVcsFileOrDirectory(const Utils::FileName &fileName) const
+{
+ return fileName.toFileInfo().isDir()
+ && fileName.fileName().compare("CVS", Utils::HostOsInfo::fileNameCaseSensitivity());
+}
+
bool CvsControl::isConfigured() const
{
const Utils::FileName binary = m_plugin->client()->vcsBinary();
diff --git a/src/plugins/cvs/cvscontrol.h b/src/plugins/cvs/cvscontrol.h
index 5e2c2a6a1b7..1bc093b7889 100644
--- a/src/plugins/cvs/cvscontrol.h
+++ b/src/plugins/cvs/cvscontrol.h
@@ -42,6 +42,8 @@ public:
QString displayName() const final;
Core::Id id() const final;
+ bool isVcsFileOrDirectory(const Utils::FileName &fileName) const final;
+
bool managesDirectory(const QString &directory, QString *topLevel = 0) const final;
bool managesFile(const QString &workingDirectory, const QString &fileName) const final;
diff --git a/src/plugins/git/gitversioncontrol.cpp b/src/plugins/git/gitversioncontrol.cpp
index b1ba6139117..b1168423ae0 100644
--- a/src/plugins/git/gitversioncontrol.cpp
+++ b/src/plugins/git/gitversioncontrol.cpp
@@ -30,6 +30,8 @@
#include <vcsbase/vcsbaseconstants.h>
#include <vcsbase/vcscommand.h>
+#include <utils/hostosinfo.h>
+
#include <QFileInfo>
#include <QProcessEnvironment>
@@ -74,6 +76,12 @@ Core::Id GitVersionControl::id() const
return Core::Id(VcsBase::Constants::VCS_ID_GIT);
}
+bool GitVersionControl::isVcsFileOrDirectory(const Utils::FileName &fileName) const
+{
+ return fileName.toFileInfo().isDir()
+ && fileName.fileName().compare(".git", Utils::HostOsInfo::fileNameCaseSensitivity());
+}
+
bool GitVersionControl::isConfigured() const
{
return !m_client->vcsBinary().isEmpty();
diff --git a/src/plugins/git/gitversioncontrol.h b/src/plugins/git/gitversioncontrol.h
index c0f75fa9ca5..2df3c7c8565 100644
--- a/src/plugins/git/gitversioncontrol.h
+++ b/src/plugins/git/gitversioncontrol.h
@@ -42,6 +42,8 @@ public:
QString displayName() const final;
Core::Id id() const final;
+ bool isVcsFileOrDirectory(const Utils::FileName &fileName) const final;
+
bool managesDirectory(const QString &directory, QString *topLevel) const final;
bool managesFile(const QString &workingDirectory, const QString &fileName) const final;
diff --git a/src/plugins/mercurial/mercurialclient.cpp b/src/plugins/mercurial/mercurialclient.cpp
index 21149bce989..06408c4bf42 100644
--- a/src/plugins/mercurial/mercurialclient.cpp
+++ b/src/plugins/mercurial/mercurialclient.cpp
@@ -33,6 +33,7 @@
#include <vcsbase/vcsbaseeditorparameterwidget.h>
#include <utils/synchronousprocess.h>
#include <utils/fileutils.h>
+#include <utils/hostosinfo.h>
#include <utils/qtcassert.h>
#include <QDateTime>
@@ -333,6 +334,12 @@ void MercurialClient::revertAll(const QString &workingDir, const QString &revisi
QStringList(extraOptions) << QLatin1String("--all"));
}
+bool MercurialClient::isVcsDirectory(const FileName &fileName) const
+{
+ return fileName.toFileInfo().isDir()
+ && fileName.fileName().compare(Constants::MERCURIALREPO, HostOsInfo::fileNameCaseSensitivity());
+}
+
void MercurialClient::view(const QString &source, const QString &id,
const QStringList &extraOptions)
{
diff --git a/src/plugins/mercurial/mercurialclient.h b/src/plugins/mercurial/mercurialclient.h
index f1dfce97ae3..2692b4bfd62 100644
--- a/src/plugins/mercurial/mercurialclient.h
+++ b/src/plugins/mercurial/mercurialclient.h
@@ -70,6 +70,7 @@ public:
void revertAll(const QString &workingDir, const QString &revision = QString(),
const QStringList &extraOptions = QStringList()) override;
+ bool isVcsDirectory(const Utils::FileName &fileName) const;
QString findTopLevelForFile(const QFileInfo &file) const override;
public slots:
diff --git a/src/plugins/mercurial/mercurialcontrol.cpp b/src/plugins/mercurial/mercurialcontrol.cpp
index 3c3a42bccf7..b60fd3e4194 100644
--- a/src/plugins/mercurial/mercurialcontrol.cpp
+++ b/src/plugins/mercurial/mercurialcontrol.cpp
@@ -78,6 +78,11 @@ Core::Id MercurialControl::id() const
return Core::Id(VcsBase::Constants::VCS_ID_MERCURIAL);
}
+bool MercurialControl::isVcsFileOrDirectory(const Utils::FileName &fileName) const
+{
+ return mercurialClient->isVcsDirectory(fileName);
+}
+
bool MercurialControl::managesDirectory(const QString &directory, QString *topLevel) const
{
QFileInfo dir(directory);
diff --git a/src/plugins/mercurial/mercurialcontrol.h b/src/plugins/mercurial/mercurialcontrol.h
index b9bc590a4e8..39917063ace 100644
--- a/src/plugins/mercurial/mercurialcontrol.h
+++ b/src/plugins/mercurial/mercurialcontrol.h
@@ -47,6 +47,8 @@ public:
QString displayName() const final;
Core::Id id() const final;
+ bool isVcsFileOrDirectory(const Utils::FileName &fileName) const final;
+
bool managesDirectory(const QString &filename, QString *topLevel = 0) const final;
bool managesFile(const QString &workingDirectory, const QString &fileName) const final;
bool isConfigured() const final;
diff --git a/src/plugins/perforce/perforceversioncontrol.cpp b/src/plugins/perforce/perforceversioncontrol.cpp
index d436991b0f0..e027a8ef26e 100644
--- a/src/plugins/perforce/perforceversioncontrol.cpp
+++ b/src/plugins/perforce/perforceversioncontrol.cpp
@@ -49,6 +49,12 @@ Core::Id PerforceVersionControl::id() const
return Core::Id(VcsBase::Constants::VCS_ID_PERFORCE);
}
+bool PerforceVersionControl::isVcsFileOrDirectory(const Utils::FileName &fileName) const
+{
+ Q_UNUSED(fileName);
+ return false; // Perforce does not seem to litter its files into the source tree.
+}
+
bool PerforceVersionControl::isConfigured() const
{
const QString binary = m_plugin->settings().p4BinaryPath();
diff --git a/src/plugins/perforce/perforceversioncontrol.h b/src/plugins/perforce/perforceversioncontrol.h
index 52670f637aa..6f1a2c2bc38 100644
--- a/src/plugins/perforce/perforceversioncontrol.h
+++ b/src/plugins/perforce/perforceversioncontrol.h
@@ -41,6 +41,7 @@ public:
QString displayName() const final;
Core::Id id() const final;
+ bool isVcsFileOrDirectory(const Utils::FileName &fileName) const final;
bool managesDirectory(const QString &directory, QString *topLevel = 0) const final;
bool managesFile(const QString &workingDirectory, const QString &fileName) const final;
diff --git a/src/plugins/subversion/subversioncontrol.cpp b/src/plugins/subversion/subversioncontrol.cpp
index c8de2421b72..e7265534eae 100644
--- a/src/plugins/subversion/subversioncontrol.cpp
+++ b/src/plugins/subversion/subversioncontrol.cpp
@@ -77,6 +77,11 @@ Core::Id SubversionControl::id() const
return Core::Id(VcsBase::Constants::VCS_ID_SUBVERSION);
}
+bool SubversionControl::isVcsFileOrDirectory(const Utils::FileName &fileName) const
+{
+ return m_plugin->isVcsDirectory(fileName);
+}
+
bool SubversionControl::isConfigured() const
{
const Utils::FileName binary = m_plugin->client()->vcsBinary();
diff --git a/src/plugins/subversion/subversioncontrol.h b/src/plugins/subversion/subversioncontrol.h
index 3fa0c35e1d8..8e63be64271 100644
--- a/src/plugins/subversion/subversioncontrol.h
+++ b/src/plugins/subversion/subversioncontrol.h
@@ -40,6 +40,7 @@ public:
explicit SubversionControl(SubversionPlugin *plugin);
QString displayName() const final;
Core::Id id() const final;
+ bool isVcsFileOrDirectory(const Utils::FileName &fileName) const final;
bool managesDirectory(const QString &directory, QString *topLevel = 0) const final;
bool managesFile(const QString &workingDirectory, const QString &fileName) const final;
diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp
index d52f10aa8a2..8998303afa7 100644
--- a/src/plugins/subversion/subversionplugin.cpp
+++ b/src/plugins/subversion/subversionplugin.cpp
@@ -54,6 +54,7 @@
#include <coreplugin/locator/commandlocator.h>
#include <coreplugin/messagemanager.h>
+#include <utils/algorithm.h>
#include <utils/fileutils.h>
#include <utils/hostosinfo.h>
#include <utils/mimetypes/mimedatabase.h>
@@ -408,6 +409,15 @@ bool SubversionPlugin::initialize(const QStringList & /*arguments */, QString *e
return true;
}
+bool SubversionPlugin::isVcsDirectory(const FileName &fileName)
+{
+ const QString baseName = fileName.fileName();
+ return fileName.toFileInfo().isDir()
+ && contains(m_svnDirectories, [baseName](const QString &s) {
+ return baseName.compare(s, HostOsInfo::fileNameCaseSensitivity());
+ });
+}
+
SubversionClient *SubversionPlugin::client() const
{
QTC_CHECK(m_client);
diff --git a/src/plugins/subversion/subversionplugin.h b/src/plugins/subversion/subversionplugin.h
index da05a072a5b..3c614eeb7ce 100644
--- a/src/plugins/subversion/subversionplugin.h
+++ b/src/plugins/subversion/subversionplugin.h
@@ -73,6 +73,8 @@ public:
bool initialize(const QStringList &arguments, QString *errorMessage);
+ bool isVcsDirectory(const Utils::FileName &fileName);
+
SubversionClient *client() const;
SubversionSubmitEditor *openSubversionSubmitEditor(const QString &fileName);