┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/views/versioncontrol/versioncontrolobserver.cpp
diff options
context:
space:
mode:
authorEmmanuel Pescosta <[email protected]>2014-02-25 19:38:57 +0100
committerEmmanuel Pescosta <[email protected]>2014-02-25 19:38:57 +0100
commit9a9ab6e50cbfaee56a3d3b84ed7bea2f987985df (patch)
tree1eba12e845de0fbeda6d6a71e84b2b61c7a3415e /src/views/versioncontrol/versioncontrolobserver.cpp
parent75c0f240200c2ee06d5f46893b9e55f51b870881 (diff)
Fix Bug 330605 - Dropbox plugin prevents git plugin from working
Use scoring to find the best matching plugin for the given directory. Thanks to Phil Schaf for testing this patch! BUG: 330605 FIXED-IN: 4.12.3 REVIEW: 116019
Diffstat (limited to 'src/views/versioncontrol/versioncontrolobserver.cpp')
-rw-r--r--src/views/versioncontrol/versioncontrolobserver.cpp19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/views/versioncontrol/versioncontrolobserver.cpp b/src/views/versioncontrol/versioncontrolobserver.cpp
index 4d939ee0d..769c290f9 100644
--- a/src/views/versioncontrol/versioncontrolobserver.cpp
+++ b/src/views/versioncontrol/versioncontrolobserver.cpp
@@ -322,11 +322,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)) {
+ // 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;
}
@@ -339,18 +346,24 @@ KVersionControlPlugin* VersionControlObserver::searchPlugin(const KUrl& director
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)) {
- return plugin;
+ if (upUrlCounter < bestScore) {
+ bestPlugin = plugin;
+ bestScore = upUrlCounter;
+ }
+ break;
}
dirUrl = upUrl;
upUrl = dirUrl.upUrl();
+ ++upUrlCounter;
}
}
}
- return 0;
+ return bestPlugin;
}
bool VersionControlObserver::isVersioned() const