]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Fixes multiple KVersionControlPlugin::fileName() calls on entering or updating directory.
authorNikolai Krasheninnikov <nkrasheninnikov@yandex.ru>
Tue, 18 Feb 2020 20:17:53 +0000 (13:17 -0700)
committerNate Graham <nate@kde.org>
Tue, 18 Feb 2020 21:55:24 +0000 (14:55 -0700)
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

src/views/versioncontrol/versioncontrolobserver.cpp
src/views/versioncontrol/versioncontrolobserver.h

index 65c13ef7d31760002ab63eaf93f9ea87793455a2..2d801686e259099a249a301b613f49109d41ca03 100644 (file)
@@ -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;
index 7b269abec76c7e836d2016ad06b7fd0ce9628f9d..66f992963c3532d5080f00844d01ea01d7a25798 100644 (file)
@@ -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;