summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArtur Shepilko <artur.shepilko@nomadbyte.com>2017-04-20 00:59:51 -0500
committerArtur Shepilko <artur.shepilko@nomadbyte.com>2017-04-21 15:00:02 +0000
commitac8005190d5fa26d3488392aa560a3afd196e99c (patch)
tree627f9c67caeaf7c27e55d6d39f4b87d5aae0a27c
parent9086d2d11de6b0543bcae41af1be6e06a5a5f65e (diff)
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>
-rw-r--r--plugins/fossil/fossilclient.cpp21
-rw-r--r--plugins/fossil/fossilcontrol.cpp34
-rw-r--r--plugins/fossil/fossilcontrol.h1
3 files changed, 29 insertions, 27 deletions
diff --git a/plugins/fossil/fossilclient.cpp b/plugins/fossil/fossilclient.cpp
index 6e88166..bb8bcee 100644
--- a/plugins/fossil/fossilclient.cpp
+++ b/plugins/fossil/fossilclient.cpp
@@ -568,36 +568,17 @@ QString FossilClient::synchronousGetRepositoryURL(const QString &workingDirector
return output;
}
-struct TopicData
-{
- QDateTime timeStamp;
- QString topic;
-};
-
QString FossilClient::synchronousTopic(const QString &workingDirectory)
{
- static QMap<QString, TopicData> topicCache;
-
if (workingDirectory.isEmpty())
return QString();
// 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);
if (branchInfo.name().isEmpty())
return QString();
- data.timeStamp = lastModified;
- data.topic = branchInfo.name();
- return data.topic;
+ return branchInfo.name();
}
bool FossilClient::synchronousCreateRepository(const QString &workingDirectory, const QStringList &extraOptions)
diff --git a/plugins/fossil/fossilcontrol.cpp b/plugins/fossil/fossilcontrol.cpp
index 45ef0c2..dc515c9 100644
--- a/plugins/fossil/fossilcontrol.cpp
+++ b/plugins/fossil/fossilcontrol.cpp
@@ -41,9 +41,33 @@
#include <QDir>
#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) :
+ Core::IVersionControl(new FossilTopicCache(client)),
m_client(client)
{ }
@@ -156,11 +180,6 @@ bool FossilControl::vcsAnnotate(const QString &file, int line)
return true;
}
-QString FossilControl::vcsTopic(const QString &directory)
-{
- return m_client->synchronousTopic(directory);
-}
-
Core::ShellCommand *FossilControl::createInitialCheckoutCommand(const QString &sourceUrl,
const Utils::FileName &baseDirectory,
const QString &localName,
@@ -287,3 +306,6 @@ void FossilControl::changed(const QVariant &v)
break;
}
}
+
+} // namespace Internal
+} // namespace Fossil
diff --git a/plugins/fossil/fossilcontrol.h b/plugins/fossil/fossilcontrol.h
index 8a3e53f..59a3bf4 100644
--- a/plugins/fossil/fossilcontrol.h
+++ b/plugins/fossil/fossilcontrol.h
@@ -59,7 +59,6 @@ public:
bool vcsMove(const QString &from, const QString &to) final;
bool vcsCreateRepository(const QString &directory) final;
bool vcsAnnotate(const QString &file, int line) final;
- QString vcsTopic(const QString &directory) final;
Core::ShellCommand *createInitialCheckoutCommand(const QString &sourceUrl,
const Utils::FileName &baseDirectory,
const QString &localName,