Mercurial: Add cache for branch query

Change-Id: Ied6f2008324b80b9d4869ba17d67e6d55a91d08c
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
This commit is contained in:
Orgad Shaneh
2014-02-18 20:50:41 +02:00
committed by Orgad Shaneh
parent cd48c5e513
commit d9bfc67d1f
4 changed files with 32 additions and 12 deletions

View File

@@ -39,6 +39,7 @@
#include <utils/fileutils.h> #include <utils/fileutils.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <QDateTime>
#include <QDir> #include <QDir>
#include <QFileInfo> #include <QFileInfo>
#include <QTextCodec> #include <QTextCodec>
@@ -155,10 +156,12 @@ bool MercurialClient::synchronousPull(const QString &workingDir, const QString &
QString MercurialClient::branchQuerySync(const QString &repositoryRoot) QString MercurialClient::branchQuerySync(const QString &repositoryRoot)
{ {
QByteArray output; QFile branchFile(repositoryRoot + QLatin1String("/.hg/branch"));
if (vcsFullySynchronousExec(repositoryRoot, QStringList(QLatin1String("branch")), &output)) if (branchFile.open(QFile::ReadOnly)) {
return QTextCodec::codecForLocale()->toUnicode(output).trimmed(); const QByteArray branch = branchFile.readAll().trimmed();
if (!branch.isEmpty())
return QString::fromLocal8Bit(branch);
}
return QLatin1String("Unknown Branch"); return QLatin1String("Unknown Branch");
} }

View File

@@ -33,6 +33,8 @@
#include <vcsbase/vcsbaseclientsettings.h> #include <vcsbase/vcsbaseclientsettings.h>
#include <vcsbase/vcsbaseconstants.h> #include <vcsbase/vcsbaseconstants.h>
#include <coreplugin/vcsmanager.h>
#include <QFileInfo> #include <QFileInfo>
#include <QVariant> #include <QVariant>
#include <QStringList> #include <QStringList>
@@ -40,8 +42,29 @@
using namespace Mercurial::Internal; 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) 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; return true;
} }
QString MercurialControl::vcsTopic(const QString &directory)
{
return mercurialClient->branchQuerySync(directory);
}
bool MercurialControl::sccManaged(const QString &filename) bool MercurialControl::sccManaged(const QString &filename)
{ {
const QFileInfo fi(filename); const QFileInfo fi(filename);

View File

@@ -65,7 +65,6 @@ public:
QString vcsGetRepositoryURL(const QString &directory); QString vcsGetRepositoryURL(const QString &directory);
bool sccManaged(const QString &filename); bool sccManaged(const QString &filename);
bool vcsAnnotate(const QString &file, int line); bool vcsAnnotate(const QString &file, int line);
QString vcsTopic(const QString &directory);
public slots: public slots:
// To be connected to the HgTask's success signal to emit the repository/ // To be connected to the HgTask's success signal to emit the repository/

View File

@@ -581,7 +581,7 @@ void MercurialPlugin::showCommitWidget(const QList<VcsBaseClient::StatusItem> &s
arg(QDir::toNativeSeparators(m_submitRepository)); arg(QDir::toNativeSeparators(m_submitRepository));
commitEditor->document()->setDisplayName(msg); commitEditor->document()->setDisplayName(msg);
QString branch = m_client->branchQuerySync(m_submitRepository); QString branch = versionControl()->vcsTopic(m_submitRepository);
commitEditor->setFields(m_submitRepository, branch, commitEditor->setFields(m_submitRepository, branch,
mercurialSettings.stringValue(MercurialSettings::userNameKey), mercurialSettings.stringValue(MercurialSettings::userNameKey),
mercurialSettings.stringValue(MercurialSettings::userEmailKey), status); mercurialSettings.stringValue(MercurialSettings::userEmailKey), status);