]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/views/versioncontrol/versioncontrolobserver.cpp
Merge branch 'master' into frameworks
[dolphin.git] / src / views / versioncontrol / versioncontrolobserver.cpp
index 2c966e18659f9fdff790e29b954c057f66638e2a..c41803c161cab573ffffab9409bcedcf260fbafe 100644 (file)
@@ -317,11 +317,18 @@ KVersionControlPlugin* VersionControlObserver::searchPlugin(const KUrl& director
         }
     }
 
         }
     }
 
+    // We use the number of upUrl() calls to find the best matching plugin
+    // for the given directory. The smaller value, the better it is (0 is best).
+    KVersionControlPlugin* bestPlugin = 0;
+    int bestScore = INT_MAX;
+
     // Verify whether the current directory contains revision information
     // like .svn, .git, ...
     foreach (KVersionControlPlugin* plugin, plugins) {
         const QString fileName = directory.path(KUrl::AddTrailingSlash) + plugin->fileName();
         if (QFile::exists(fileName)) {
     // Verify whether the current directory contains revision information
     // like .svn, .git, ...
     foreach (KVersionControlPlugin* plugin, plugins) {
         const QString fileName = directory.path(KUrl::AddTrailingSlash) + plugin->fileName();
         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 plugin;
         }
 
@@ -334,18 +341,24 @@ KVersionControlPlugin* VersionControlObserver::searchPlugin(const KUrl& director
         if (m_versionedDirectory) {
             KUrl dirUrl(directory);
             KUrl upUrl = dirUrl.upUrl();
         if (m_versionedDirectory) {
             KUrl dirUrl(directory);
             KUrl upUrl = dirUrl.upUrl();
-            while (upUrl != dirUrl) {
+            int upUrlCounter = 1;
+            while ((upUrlCounter < bestScore) && (upUrl != dirUrl)) {
                 const QString fileName = dirUrl.path(KUrl::AddTrailingSlash) + plugin->fileName();
                 if (QFile::exists(fileName)) {
                 const QString fileName = dirUrl.path(KUrl::AddTrailingSlash) + plugin->fileName();
                 if (QFile::exists(fileName)) {
-                    return plugin;
+                    if (upUrlCounter < bestScore) {
+                        bestPlugin = plugin;
+                        bestScore = upUrlCounter;
+                    }
+                    break;
                 }
                 dirUrl = upUrl;
                 upUrl = dirUrl.upUrl();
                 }
                 dirUrl = upUrl;
                 upUrl = dirUrl.upUrl();
+                ++upUrlCounter;
             }
         }
     }
 
             }
         }
     }
 
-    return 0;
+    return bestPlugin;
 }
 
 bool VersionControlObserver::isVersioned() const
 }
 
 bool VersionControlObserver::isVersioned() const
@@ -353,4 +366,3 @@ bool VersionControlObserver::isVersioned() const
     return m_versionedDirectory && m_plugin;
 }
 
     return m_versionedDirectory && m_plugin;
 }
 
-#include "versioncontrolobserver.moc"