From 17106e69c4d2e889d99f0a8a0deda6920bec28f9 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Tue, 11 Jun 2013 13:59:06 +0300 Subject: [PATCH] Suggest configuring VCS if it is unconfigured Change-Id: I6ef3c615070f055e688c94d6901d8c9a861b9928 Reviewed-by: Tobias Hunger --- src/plugins/coreplugin/vcsmanager.cpp | 42 ++++++++++++++++++++++++--- src/plugins/coreplugin/vcsmanager.h | 3 ++ 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/src/plugins/coreplugin/vcsmanager.cpp b/src/plugins/coreplugin/vcsmanager.cpp index 4ccc4d064af..89745f4d2af 100644 --- a/src/plugins/coreplugin/vcsmanager.cpp +++ b/src/plugins/coreplugin/vcsmanager.cpp @@ -31,6 +31,12 @@ #include "iversioncontrol.h" #include "icore.h" #include "documentmanager.h" +#include "editormanager.h" +#include "ieditor.h" +#include "idocument.h" +#include "infobar.h" + +#include #include #include @@ -74,6 +80,9 @@ public: QString topLevel; }; + VcsManagerPrivate() : m_unconfiguredVcs(0) + { } + ~VcsManagerPrivate() { qDeleteAll(m_vcsInfoList); @@ -165,6 +174,7 @@ public: QMap m_cachedMatches; QList m_vcsInfoList; + IVersionControl *m_unconfiguredVcs; }; VcsManager::VcsManager(QObject *parent) : @@ -231,10 +241,8 @@ IVersionControl* VcsManager::findVersionControlForDirectory(const QString &input foreach (IVersionControl * versionControl, versionControls) { QString topLevel; - if (versionControl->isConfigured() - && versionControl->managesDirectory(directory, &topLevel)) { + if (versionControl->managesDirectory(directory, &topLevel)) allThatCanManage.push_back(StringVersionControlPair(topLevel, versionControl)); - } } // To properly find a nested repository (say, git checkout inside SVN), @@ -265,7 +273,26 @@ IVersionControl* VcsManager::findVersionControlForDirectory(const QString &input // return result if (topLevelDirectory) *topLevelDirectory = allThatCanManage.first().first; - return allThatCanManage.first().second; + IVersionControl *versionControl = allThatCanManage.first().second; + if (!versionControl->isConfigured()) { + if (IEditor *curEditor = EditorManager::currentEditor()) { + if (IDocument *curDocument = curEditor->document()) { + Id vcsWarning("VcsNotConfiguredWarning"); + InfoBar *infoBar = curDocument->infoBar(); + if (infoBar->canInfoBeAdded(vcsWarning)) { + InfoBarEntry info(vcsWarning, + tr("%1 repository was detected but %1 is not configured.") + .arg(versionControl->displayName()), + InfoBarEntry::GlobalSuppressionEnabled); + d->m_unconfiguredVcs = versionControl; + info.setCustomButtonInfo(tr("Configure"), this, SLOT(configureVcs())); + infoBar->addInfo(info); + } + } + } + versionControl = 0; + } + return versionControl; } QStringList VcsManager::repositories(const IVersionControl *vc) const @@ -399,4 +426,11 @@ void VcsManager::clearVersionControlCache() emit repositoryChanged(repo); } +void VcsManager::configureVcs() +{ + QTC_ASSERT(d->m_unconfiguredVcs, return); + ICore::showOptionsDialog(Id(VcsBase::Constants::VCS_SETTINGS_CATEGORY), + d->m_unconfiguredVcs->id()); +} + } // namespace Core diff --git a/src/plugins/coreplugin/vcsmanager.h b/src/plugins/coreplugin/vcsmanager.h index 2b8a91463e9..8eb8fa5b55e 100644 --- a/src/plugins/coreplugin/vcsmanager.h +++ b/src/plugins/coreplugin/vcsmanager.h @@ -100,6 +100,9 @@ signals: public slots: void clearVersionControlCache(); +private slots: + void configureVcs(); + private: VcsManagerPrivate *d; };