diff --git a/src/plugins/coreplugin/vcsmanager.cpp b/src/plugins/coreplugin/vcsmanager.cpp index f4839a1dc28..ce8cef68e58 100644 --- a/src/plugins/coreplugin/vcsmanager.cpp +++ b/src/plugins/coreplugin/vcsmanager.cpp @@ -106,6 +106,11 @@ public: return result; } + void clearCache() + { + m_cachedMatches.clear(); + } + void resetCache(const QString &dir) { QTC_ASSERT(QDir(dir).isAbsolute(), return); @@ -381,4 +386,12 @@ void VcsManager::promptToAdd(const QString &directory, const QStringList &fileNa } } +void VcsManager::clearVersionControlCache() +{ + QStringList repoList = d->m_cachedMatches.keys(); + d->clearCache(); + foreach (const QString &repo, repoList) + emit repositoryChanged(repo); +} + } // namespace Core diff --git a/src/plugins/coreplugin/vcsmanager.h b/src/plugins/coreplugin/vcsmanager.h index 103ecb8f09d..e8f43623a58 100644 --- a/src/plugins/coreplugin/vcsmanager.h +++ b/src/plugins/coreplugin/vcsmanager.h @@ -95,6 +95,9 @@ public: signals: void repositoryChanged(const QString &repository); +public slots: + void clearVersionControlCache(); + private: VcsManagerPrivate *d; }; diff --git a/src/plugins/vcsbase/vcsbaseplugin.cpp b/src/plugins/vcsbase/vcsbaseplugin.cpp index 7193f0deff5..c56f8469286 100644 --- a/src/plugins/vcsbase/vcsbaseplugin.cpp +++ b/src/plugins/vcsbase/vcsbaseplugin.cpp @@ -549,6 +549,9 @@ void VcsBasePlugin::initializeVcs(Core::IVersionControl *vc) SIGNAL(stateChanged(VcsBase::Internal::State,Core::IVersionControl*)), this, SLOT(slotStateChanged(VcsBase::Internal::State,Core::IVersionControl*))); + // VCSes might have become (un-)available, so clear the VCS directory cache + connect(vc, SIGNAL(configurationChanged()), + Core::ICore::vcsManager(), SLOT(clearVersionControlCache())); } void VcsBasePlugin::extensionsInitialized()