diff --git a/src/plugins/subversion/subversionclient.cpp b/src/plugins/subversion/subversionclient.cpp index 9e0b8df70c04ee8bbf6ba89eeacddb7c7d4e8696..70c207e326141f196ea7fdf3f55aaef4c6a88b48 100644 --- a/src/plugins/subversion/subversionclient.cpp +++ b/src/plugins/subversion/subversionclient.cpp @@ -209,6 +209,25 @@ QStringList SubversionClient::addAuthenticationOptions(const QStringList &args, return rc; } +QString SubversionClient::synchronousTopic(const QString &repository) +{ + QStringList args; + args << QLatin1String("info"); + + QByteArray stdOut; + if (!vcsFullySynchronousExec(repository, args, &stdOut)) + return QString(); + + const QString revisionString = QLatin1String("Revision: "); + // stdOut is ASCII only (at least in those areas we care about). + QString output = SynchronousProcess::normalizeNewlines(QString::fromLocal8Bit(stdOut)); + foreach (const QString &line, output.split(QLatin1Char('\n'))) { + if (line.startsWith(revisionString)) + return QString::fromLatin1("r") + line.mid(revisionString.count()); + } + return QString(); +} + void SubversionClient::diff(const QString &workingDir, const QStringList &files, const QStringList &extraOptions) { diff --git a/src/plugins/subversion/subversionclient.h b/src/plugins/subversion/subversionclient.h index f73c03ca6a36c87d920b908cdfc74bc9b5be31de..7b0ec2fe0f71335bbffcb9c8387f0383755b9195 100644 --- a/src/plugins/subversion/subversionclient.h +++ b/src/plugins/subversion/subversionclient.h @@ -81,6 +81,8 @@ public: const QString &userName = QString(), const QString &password = QString()); + QString synchronousTopic(const QString &repository); + protected: Core::Id vcsEditorKind(VcsCommandTag cmd) const; VcsBase::VcsBaseEditorParameterWidget *createDiffEditor(const QString &workingDir, diff --git a/src/plugins/subversion/subversioncontrol.cpp b/src/plugins/subversion/subversioncontrol.cpp index b2913363fe3450cad70e906bfd09ea8fdd108198..a69206db0ec73c765afb8ec6c280c66a9798b1f9 100644 --- a/src/plugins/subversion/subversioncontrol.cpp +++ b/src/plugins/subversion/subversioncontrol.cpp @@ -36,13 +36,35 @@ #include <QFileInfo> -using namespace Subversion; -using namespace Subversion::Internal; +namespace Subversion { +namespace Internal { + +class SubversionTopicCache : public Core::IVersionControl::TopicCache +{ +public: + SubversionTopicCache(SubversionPlugin *plugin) : + m_plugin(plugin) + { } + +protected: + QString trackFile(const QString &repository) + { + return m_plugin->monitorFile(repository); + } + + QString refreshTopic(const QString &repository) + { + return m_plugin->synchronousTopic(repository); + } + +private: + SubversionPlugin *m_plugin; +}; SubversionControl::SubversionControl(SubversionPlugin *plugin) : + Core::IVersionControl(new SubversionTopicCache(plugin)), m_plugin(plugin) -{ -} +{ } QString SubversionControl::displayName() const { @@ -153,3 +175,6 @@ void SubversionControl::emitConfigurationChanged() { emit configurationChanged(); } + +} // namespace Internal +} // namespace Subversion diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp index f920663053a3c6fff4b193b58dbd66f4a29672a2..8a16f6057c2138221922f75b459b8f46918456c6 100644 --- a/src/plugins/subversion/subversionplugin.cpp +++ b/src/plugins/subversion/subversionplugin.cpp @@ -1074,6 +1074,25 @@ SubversionPlugin *SubversionPlugin::instance() return m_subversionPluginInstance; } +QString SubversionPlugin::monitorFile(const QString &repository) const +{ + QTC_ASSERT(!repository.isEmpty(), return QString()); + QDir repoDir(repository); + foreach (const QString &svnDir, m_svnDirectories) { + if (repoDir.exists(svnDir)) { + QFileInfo fi(repoDir.absoluteFilePath(svnDir + QLatin1String("/wc.db"))); + if (fi.exists() && fi.isFile()) + return fi.absoluteFilePath(); + } + } + return QString(); +} + +QString SubversionPlugin::synchronousTopic(const QString &repository) const +{ + return m_client->synchronousTopic(repository); +} + bool SubversionPlugin::vcsAdd(const QString &workingDir, const QString &rawFileName) { const QString file = QDir::toNativeSeparators(rawFileName); diff --git a/src/plugins/subversion/subversionplugin.h b/src/plugins/subversion/subversionplugin.h index e9d1ca741f071400469a0e5f1b106bfb799b93f5..7fecab837ea02e43d095ecad943624f99fc7d513 100644 --- a/src/plugins/subversion/subversionplugin.h +++ b/src/plugins/subversion/subversionplugin.h @@ -91,6 +91,9 @@ public: static SubversionPlugin *instance(); + QString monitorFile(const QString &repository) const; + QString synchronousTopic(const QString &repository) const; + public slots: void vcsAnnotate(const QString &workingDir, const QString &file, const QString &revision = QString(), int lineNumber = -1);