Vcs: Re-implement Fossil's topic indicator using a TopicCache sub-class

The functionality for tracking project's current topic/branch has
long been folded into a base class Core::IVersionControl::TopicCache.
Fossil plugin should just sub-class it and pass the instance to the base.

Change-Id: I1b6c1631f5fc10987d8a608d573defeecbc31b37
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
Artur Shepilko
2017-04-20 00:59:51 -05:00
parent 9086d2d11d
commit ac8005190d
3 changed files with 29 additions and 27 deletions

View File

@@ -568,36 +568,17 @@ QString FossilClient::synchronousGetRepositoryURL(const QString &workingDirector
return output; return output;
} }
struct TopicData
{
QDateTime timeStamp;
QString topic;
};
QString FossilClient::synchronousTopic(const QString &workingDirectory) QString FossilClient::synchronousTopic(const QString &workingDirectory)
{ {
static QMap<QString, TopicData> topicCache;
if (workingDirectory.isEmpty()) if (workingDirectory.isEmpty())
return QString(); return QString();
// return current branch name // return current branch name
const QString topLevel = findTopLevelForFile(workingDirectory);
const QFileInfo currentStateFile(topLevel + "/" + Constants::FOSSILREPO);
TopicData &data = topicCache[workingDirectory];
const QDateTime lastModified = currentStateFile.lastModified();
if (lastModified == data.timeStamp)
return data.topic;
const BranchInfo branchInfo = synchronousCurrentBranch(workingDirectory); const BranchInfo branchInfo = synchronousCurrentBranch(workingDirectory);
if (branchInfo.name().isEmpty()) if (branchInfo.name().isEmpty())
return QString(); return QString();
data.timeStamp = lastModified; return branchInfo.name();
data.topic = branchInfo.name();
return data.topic;
} }
bool FossilClient::synchronousCreateRepository(const QString &workingDirectory, const QStringList &extraOptions) bool FossilClient::synchronousCreateRepository(const QString &workingDirectory, const QStringList &extraOptions)

View File

@@ -41,9 +41,33 @@
#include <QDir> #include <QDir>
#include <QUrl> #include <QUrl>
using namespace Fossil::Internal; namespace Fossil {
namespace Internal {
class FossilTopicCache : public Core::IVersionControl::TopicCache
{
public:
FossilTopicCache(FossilClient *client) :
m_client(client)
{ }
protected:
QString trackFile(const QString &repository) final
{
return repository + "/" + Constants::FOSSILREPO;
}
QString refreshTopic(const QString &repository) final
{
return m_client->synchronousTopic(repository);
}
private:
FossilClient *m_client;
};
FossilControl::FossilControl(FossilClient *client) : FossilControl::FossilControl(FossilClient *client) :
Core::IVersionControl(new FossilTopicCache(client)),
m_client(client) m_client(client)
{ } { }
@@ -156,11 +180,6 @@ bool FossilControl::vcsAnnotate(const QString &file, int line)
return true; return true;
} }
QString FossilControl::vcsTopic(const QString &directory)
{
return m_client->synchronousTopic(directory);
}
Core::ShellCommand *FossilControl::createInitialCheckoutCommand(const QString &sourceUrl, Core::ShellCommand *FossilControl::createInitialCheckoutCommand(const QString &sourceUrl,
const Utils::FileName &baseDirectory, const Utils::FileName &baseDirectory,
const QString &localName, const QString &localName,
@@ -287,3 +306,6 @@ void FossilControl::changed(const QVariant &v)
break; break;
} }
} }
} // namespace Internal
} // namespace Fossil

View File

@@ -59,7 +59,6 @@ public:
bool vcsMove(const QString &from, const QString &to) final; bool vcsMove(const QString &from, const QString &to) final;
bool vcsCreateRepository(const QString &directory) final; bool vcsCreateRepository(const QString &directory) final;
bool vcsAnnotate(const QString &file, int line) final; bool vcsAnnotate(const QString &file, int line) final;
QString vcsTopic(const QString &directory) final;
Core::ShellCommand *createInitialCheckoutCommand(const QString &sourceUrl, Core::ShellCommand *createInitialCheckoutCommand(const QString &sourceUrl,
const Utils::FileName &baseDirectory, const Utils::FileName &baseDirectory,
const QString &localName, const QString &localName,