diff --git a/src/plugins/mercurial/mercurialclient.cpp b/src/plugins/mercurial/mercurialclient.cpp index 821c4d53b6c..d8c8ca948d1 100644 --- a/src/plugins/mercurial/mercurialclient.cpp +++ b/src/plugins/mercurial/mercurialclient.cpp @@ -39,6 +39,7 @@ #include #include +#include #include #include #include @@ -155,10 +156,12 @@ bool MercurialClient::synchronousPull(const QString &workingDir, const QString & QString MercurialClient::branchQuerySync(const QString &repositoryRoot) { - QByteArray output; - if (vcsFullySynchronousExec(repositoryRoot, QStringList(QLatin1String("branch")), &output)) - return QTextCodec::codecForLocale()->toUnicode(output).trimmed(); - + QFile branchFile(repositoryRoot + QLatin1String("/.hg/branch")); + if (branchFile.open(QFile::ReadOnly)) { + const QByteArray branch = branchFile.readAll().trimmed(); + if (!branch.isEmpty()) + return QString::fromLocal8Bit(branch); + } return QLatin1String("Unknown Branch"); } diff --git a/src/plugins/mercurial/mercurialcontrol.cpp b/src/plugins/mercurial/mercurialcontrol.cpp index 0dd8711dda0..0b763952ad0 100644 --- a/src/plugins/mercurial/mercurialcontrol.cpp +++ b/src/plugins/mercurial/mercurialcontrol.cpp @@ -33,6 +33,8 @@ #include #include +#include + #include #include #include @@ -40,8 +42,29 @@ using namespace Mercurial::Internal; +class MercurialTopicCache : public Core::IVersionControl::TopicCache +{ +public: + MercurialTopicCache(MercurialClient *client) : m_client(client) {} + +protected: + QString trackFile(const QString &repository) + { + return repository + QLatin1String("/.hg/branch"); + } + + QString refreshTopic(const QString &repository) + { + return m_client->branchQuerySync(repository); + } + +private: + MercurialClient *m_client; +}; + MercurialControl::MercurialControl(MercurialClient *client) - : mercurialClient(client) + : Core::IVersionControl(new MercurialTopicCache(client)) + , mercurialClient(client) { } @@ -136,11 +159,6 @@ bool MercurialControl::vcsAnnotate(const QString &file, int line) return true; } -QString MercurialControl::vcsTopic(const QString &directory) -{ - return mercurialClient->branchQuerySync(directory); -} - bool MercurialControl::sccManaged(const QString &filename) { const QFileInfo fi(filename); diff --git a/src/plugins/mercurial/mercurialcontrol.h b/src/plugins/mercurial/mercurialcontrol.h index a5a1d1c8f1a..067dcf1c787 100644 --- a/src/plugins/mercurial/mercurialcontrol.h +++ b/src/plugins/mercurial/mercurialcontrol.h @@ -65,7 +65,6 @@ public: QString vcsGetRepositoryURL(const QString &directory); bool sccManaged(const QString &filename); bool vcsAnnotate(const QString &file, int line); - QString vcsTopic(const QString &directory); public slots: // To be connected to the HgTask's success signal to emit the repository/ diff --git a/src/plugins/mercurial/mercurialplugin.cpp b/src/plugins/mercurial/mercurialplugin.cpp index eac981f3b38..027909d327f 100644 --- a/src/plugins/mercurial/mercurialplugin.cpp +++ b/src/plugins/mercurial/mercurialplugin.cpp @@ -581,7 +581,7 @@ void MercurialPlugin::showCommitWidget(const QList &s arg(QDir::toNativeSeparators(m_submitRepository)); commitEditor->document()->setDisplayName(msg); - QString branch = m_client->branchQuerySync(m_submitRepository); + QString branch = versionControl()->vcsTopic(m_submitRepository); commitEditor->setFields(m_submitRepository, branch, mercurialSettings.stringValue(MercurialSettings::userNameKey), mercurialSettings.stringValue(MercurialSettings::userEmailKey), status);