diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2016-10-20 13:06:11 +0200 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@qt.io> | 2016-10-21 13:04:40 +0000 |
commit | 28325aa446e59cfc428ed48e7a29a64cfd006431 (patch) | |
tree | 58a67dbbdb31cee7178b25025c8f3022efb932d0 | |
parent | 768eb4e52ecf5da9b25c05828c666d28560d735d (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>
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); |