diff options
| author | Frank Reininghaus <[email protected]> | 2014-02-27 09:11:48 +0100 |
|---|---|---|
| committer | Frank Reininghaus <[email protected]> | 2014-02-27 09:11:48 +0100 |
| commit | 006f667ab14aff2d067373e7e88bde4800b2d9c2 (patch) | |
| tree | 2b4080c6efdedd226ecacbe24f5b37a5ffa5d991 /src/views/versioncontrol/versioncontrolobserver.cpp | |
| parent | 342822e83de4508a7e32bf9c23ee074c2d584d48 (diff) | |
| parent | c5d9791ad392efffa19108c3ce7a4e6a67453a09 (diff) | |
Merge remote-tracking branch 'origin/KDE/4.12' into KDE/4.13
Diffstat (limited to 'src/views/versioncontrol/versioncontrolobserver.cpp')
| -rw-r--r-- | src/views/versioncontrol/versioncontrolobserver.cpp | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/views/versioncontrol/versioncontrolobserver.cpp b/src/views/versioncontrol/versioncontrolobserver.cpp index 36345d986..6affe80d3 100644 --- a/src/views/versioncontrol/versioncontrolobserver.cpp +++ b/src/views/versioncontrol/versioncontrolobserver.cpp @@ -316,11 +316,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; } @@ -333,18 +340,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 |
