┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikolai Krasheninnikov <[email protected]>2020-02-18 13:17:53 -0700
committerNate Graham <[email protected]>2020-02-18 14:55:24 -0700
commitd0cbcf9718bb5192738ea9f5a5a3d6c4f9f7dcef (patch)
treef1ccba61cb092d2d61259c0a9fe7abd45db490aa
parente545efee73a869aef4276baef0535169f03933de (diff)
Fixes multiple KVersionControlPlugin::fileName() calls on entering or updating directory.
Summary: BUG: 415698 FIXED-IN: 20.04 On each VCS plugin creation corresponding file name is saved (cached) so when we search which VCS plugin is appropriate for current directory we don't need to call KVersionControlPlugin::fileName() again. Reviewers: #dolphin, meven, elvisangelaccio, ngraham Reviewed By: #dolphin, meven, ngraham Subscribers: kfm-devel Tags: #dolphin Differential Revision: https://phabricator.kde.org/D26962
-rw-r--r--src/views/versioncontrol/versioncontrolobserver.cpp12
-rw-r--r--src/views/versioncontrol/versioncontrolobserver.h3
2 files changed, 8 insertions, 7 deletions
diff --git a/src/views/versioncontrol/versioncontrolobserver.cpp b/src/views/versioncontrol/versioncontrolobserver.cpp
index 65c13ef7d..2d801686e 100644
--- a/src/views/versioncontrol/versioncontrolobserver.cpp
+++ b/src/views/versioncontrol/versioncontrolobserver.cpp
@@ -303,7 +303,7 @@ KVersionControlPlugin* VersionControlObserver::searchPlugin(const QUrl& director
if (enabledPlugins.contains((*it)->name())) {
KVersionControlPlugin* plugin = (*it)->createInstance<KVersionControlPlugin>(this);
if (plugin) {
- m_plugins.append(plugin);
+ m_plugins.append( qMakePair(plugin, plugin->fileName()) );
}
}
}
@@ -323,12 +323,12 @@ KVersionControlPlugin* VersionControlObserver::searchPlugin(const QUrl& director
// Verify whether the current directory contains revision information
// like .svn, .git, ...
- foreach (KVersionControlPlugin* plugin, m_plugins) {
- const QString fileName = directory.path() + '/' + plugin->fileName();
+ for (const auto &it : qAsConst(m_plugins)) {
+ const QString fileName = directory.path() + '/' + it.second;
if (QFile::exists(fileName)) {
// The score of this plugin is 0 (best), so we can just return this plugin,
// instead of going through the plugin scoring procedure, we can't find a better one ;)
- return plugin;
+ return it.first;
}
// Version control systems like Git provide the version information
@@ -342,10 +342,10 @@ KVersionControlPlugin* VersionControlObserver::searchPlugin(const QUrl& director
QUrl upUrl = KIO::upUrl(dirUrl);
int upUrlCounter = 1;
while ((upUrlCounter < bestScore) && (upUrl != dirUrl)) {
- const QString fileName = dirUrl.path() + '/' + plugin->fileName();
+ const QString fileName = dirUrl.path() + '/' + it.second;
if (QFile::exists(fileName)) {
if (upUrlCounter < bestScore) {
- bestPlugin = plugin;
+ bestPlugin = it.first;
bestScore = upUrlCounter;
}
break;
diff --git a/src/views/versioncontrol/versioncontrolobserver.h b/src/views/versioncontrol/versioncontrolobserver.h
index 7b269abec..66f992963 100644
--- a/src/views/versioncontrol/versioncontrolobserver.h
+++ b/src/views/versioncontrol/versioncontrolobserver.h
@@ -114,6 +114,7 @@ private slots:
private:
typedef QPair<KFileItem, KVersionControlPlugin::ItemVersion> ItemState;
+ typedef QPair<KVersionControlPlugin*, QString> VCSPlugin;
void updateItemStates();
@@ -157,7 +158,7 @@ private:
bool m_pluginsInitialized;
KVersionControlPlugin* m_plugin;
- QList<KVersionControlPlugin*> m_plugins;
+ QList<VCSPlugin> m_plugins;
UpdateItemStatesThread* m_updateItemStatesThread;
friend class UpdateItemStatesThread;