VCS: Notify project wizard about config changes

... and have the project wizard update the available VCS.

Task-number: QTCREATORBUG-4423
This commit is contained in:
Tobias Hunger
2011-04-15 17:43:44 +02:00
parent 51cbd001e8
commit bcd8740a6e
21 changed files with 75 additions and 14 deletions
+5
View File
@@ -177,3 +177,8 @@ void BazaarControl::changed(const QVariant &v)
break; break;
} }
} }
void BazaarControl::emitConfigurationChanged()
{
emit configurationChanged();
}
+1
View File
@@ -74,6 +74,7 @@ public slots:
// files changed signals according to the variant's type: // files changed signals according to the variant's type:
// String -> repository, StringList -> files // String -> repository, StringList -> files
void changed(const QVariant&); void changed(const QVariant&);
void emitConfigurationChanged();
private: private:
BazaarClient *m_bazaarClient; BazaarClient *m_bazaarClient;
+1
View File
@@ -208,6 +208,7 @@ void BazaarPlugin::setSettings(const BazaarSettings &settings)
m_bazaarSettings = settings; m_bazaarSettings = settings;
if (userIdChanged) if (userIdChanged)
client()->synchronousSetUserId(); client()->synchronousSetUserId();
static_cast<BazaarControl *>(versionControl())->emitConfigurationChanged();
} }
} }
+1
View File
@@ -166,6 +166,7 @@ public:
signals: signals:
void repositoryChanged(const QString &repository); void repositoryChanged(const QString &repository);
void filesChanged(const QStringList &files); void filesChanged(const QStringList &files);
void configurationChanged();
// TODO: ADD A WAY TO DETECT WHETHER A FILE IS MANAGED, e.g // TODO: ADD A WAY TO DETECT WHETHER A FILE IS MANAGED, e.g
// virtual bool sccManaged(const QString &filename) = 0; // virtual bool sccManaged(const QString &filename) = 0;
+5
View File
@@ -158,3 +158,8 @@ void CVSControl::emitFilesChanged(const QStringList &l)
{ {
emit filesChanged(l); emit filesChanged(l);
} }
void CVSControl::emitConfigurationChanged()
{
emit configurationChanged();
}
+1
View File
@@ -67,6 +67,7 @@ public:
void emitRepositoryChanged(const QString &s); void emitRepositoryChanged(const QString &s);
void emitFilesChanged(const QStringList &l); void emitFilesChanged(const QStringList &l);
void emitConfigurationChanged();
private: private:
CVSPlugin *m_plugin; CVSPlugin *m_plugin;
+1
View File
@@ -1320,6 +1320,7 @@ void CVSPlugin::setSettings(const CVSSettings &s)
m_settings = s; m_settings = s;
if (QSettings *settings = Core::ICore::instance()->settings()) if (QSettings *settings = Core::ICore::instance()->settings())
m_settings.toSettings(settings); m_settings.toSettings(settings);
cvsVersionControl()->emitConfigurationChanged();
} }
} }
+1
View File
@@ -2387,6 +2387,7 @@ void GitClient::setSettings(const GitSettings &s)
m_binaryPath = m_settings.gitBinaryPath(); m_binaryPath = m_settings.gitBinaryPath();
m_cachedGitVersion = 0u; m_cachedGitVersion = 0u;
m_hasCachedGitVersion = false; m_hasCachedGitVersion = false;
m_plugin->gitVersionControl()->emitConfigurationChanged();
} }
} }
+5
View File
@@ -247,5 +247,10 @@ void GitVersionControl::emitRepositoryChanged(const QString &r)
emit repositoryChanged(r); emit repositoryChanged(r);
} }
void GitVersionControl::emitConfigurationChanged()
{
emit configurationChanged();
}
} // Internal } // Internal
} // Git } // Git
+1
View File
@@ -69,6 +69,7 @@ public:
void emitFilesChanged(const QStringList &); void emitFilesChanged(const QStringList &);
void emitRepositoryChanged(const QString &); void emitRepositoryChanged(const QString &);
void emitConfigurationChanged();
private: private:
GitClient *m_client; GitClient *m_client;
@@ -183,3 +183,8 @@ void MercurialControl::changed(const QVariant &v)
break; break;
} }
} }
void MercurialControl::emitConfigurationChanged()
{
emit configurationChanged();
}
+1
View File
@@ -75,6 +75,7 @@ public slots:
// files changed signals according to the variant's type: // files changed signals according to the variant's type:
// String -> repository, StringList -> files // String -> repository, StringList -> files
void changed(const QVariant&); void changed(const QVariant&);
void emitConfigurationChanged();
private: private:
MercurialClient *mercurialClient; MercurialClient *mercurialClient;
@@ -199,6 +199,7 @@ void MercurialPlugin::setSettings(const MercurialSettings &settings)
{ {
if (settings != mercurialSettings) { if (settings != mercurialSettings) {
mercurialSettings = settings; mercurialSettings = settings;
static_cast<MercurialControl *>(versionControl())->emitConfigurationChanged();
} }
} }
+1
View File
@@ -1457,6 +1457,7 @@ void PerforcePlugin::setSettings(const Settings &newSettings)
m_managedDirectoryCache.clear(); m_managedDirectoryCache.clear();
m_settings.toSettings(Core::ICore::instance()->settings()); m_settings.toSettings(Core::ICore::instance()->settings());
getTopLevel(); getTopLevel();
perforceVersionControl()->emitConfigurationChanged();
} }
} }
@@ -175,5 +175,10 @@ void PerforceVersionControl::emitFilesChanged(const QStringList &l)
emit filesChanged(l); emit filesChanged(l);
} }
void PerforceVersionControl::emitConfigurationChanged()
{
emit configurationChanged();
}
} // Internal } // Internal
} // Perforce } // Perforce
@@ -68,6 +68,7 @@ public:
void emitRepositoryChanged(const QString &s); void emitRepositoryChanged(const QString &s);
void emitFilesChanged(const QStringList &l); void emitFilesChanged(const QStringList &l);
void emitConfigurationChanged();
private: private:
bool m_enabled; bool m_enabled;
@@ -169,6 +169,7 @@ struct ProjectWizardContext
void clear(); void clear();
QList<Core::IVersionControl*> versionControls; QList<Core::IVersionControl*> versionControls;
QList<Core::IVersionControl*> activeVersionControls;
QList<ProjectEntry> projects; QList<ProjectEntry> projects;
ProjectWizardPage *page; ProjectWizardPage *page;
bool repositoryExists; // Is VCS 'add' sufficient, or should a repository be created? bool repositoryExists; // Is VCS 'add' sufficient, or should a repository be created?
@@ -185,7 +186,7 @@ ProjectWizardContext::ProjectWizardContext() :
void ProjectWizardContext::clear() void ProjectWizardContext::clear()
{ {
versionControls.clear(); activeVersionControls.clear();
projects.clear(); projects.clear();
commonDirectory.clear(); commonDirectory.clear();
page = 0; page = 0;
@@ -299,6 +300,13 @@ void ProjectFileWizardExtension::firstExtensionPageShown(
} else { } else {
m_context->page->setCurrentProjectIndex(bestProjectIndex + 1); m_context->page->setCurrentProjectIndex(bestProjectIndex + 1);
} }
// Store all version controls for later use:
foreach (Core::IVersionControl *vc, ExtensionSystem::PluginManager::instance()->getObjects<Core::IVersionControl>()) {
m_context->versionControls.append(vc);
connect(vc, SIGNAL(configurationChanged()), this, SLOT(initializeVersionControlChoices()));
}
initializeVersionControlChoices(); initializeVersionControlChoices();
} }
@@ -308,32 +316,42 @@ void ProjectFileWizardExtension::initializeVersionControlChoices()
// 1) Directory is managed and VCS supports "Add" -> List it // 1) Directory is managed and VCS supports "Add" -> List it
// 2) Directory is managed and VCS does not support "Add" -> None available // 2) Directory is managed and VCS does not support "Add" -> None available
// 3) Directory is not managed -> Offer all VCS that support "CreateRepository" // 3) Directory is not managed -> Offer all VCS that support "CreateRepository"
m_context->versionControls.clear();
Core::IVersionControl *currentSelection = 0;
int currentIdx = m_context->page->versionControlIndex() - 1;
if (currentIdx >= 0 && currentIdx <= m_context->activeVersionControls.size() - 1)
currentSelection = m_context->activeVersionControls.at(currentIdx);
m_context->activeVersionControls.clear();
QStringList versionControlChoices = QStringList(tr("<None>"));
if (!m_context->commonDirectory.isEmpty()) { if (!m_context->commonDirectory.isEmpty()) {
Core::IVersionControl *managingControl = Core::ICore::instance()->vcsManager()->findVersionControlForDirectory(m_context->commonDirectory); Core::IVersionControl *managingControl = Core::ICore::instance()->vcsManager()->findVersionControlForDirectory(m_context->commonDirectory);
if (managingControl) { if (managingControl) {
// Under VCS // Under VCS
if (managingControl->supportsOperation(Core::IVersionControl::AddOperation)) { if (managingControl->supportsOperation(Core::IVersionControl::AddOperation)) {
m_context->versionControls.push_back(managingControl); m_context->activeVersionControls.push_back(managingControl);
m_context->repositoryExists = true; m_context->repositoryExists = true;
} }
} else { } else {
// Create // Create
foreach (Core::IVersionControl *vc, ExtensionSystem::PluginManager::instance()->getObjects<Core::IVersionControl>()) foreach (Core::IVersionControl *vc, m_context->versionControls)
if (vc->supportsOperation(Core::IVersionControl::CreateRepositoryOperation)) if (vc->supportsOperation(Core::IVersionControl::CreateRepositoryOperation)) {
m_context->versionControls.push_back(vc); versionControlChoices.append(vc->displayName());
m_context->activeVersionControls.append(vc);
}
m_context->repositoryExists = false; m_context->repositoryExists = false;
} }
} // has a common root. } // has a common root.
// Compile names
//: No version control system selected
QStringList versionControlChoices = QStringList(tr("<None>"));
foreach(const Core::IVersionControl *c, m_context->versionControls)
versionControlChoices.push_back(c->displayName());
m_context->page->setVersionControls(versionControlChoices); m_context->page->setVersionControls(versionControlChoices);
// Enable adding to version control by default. // Enable adding to version control by default.
if (m_context->repositoryExists && versionControlChoices.size() >= 2) if (m_context->repositoryExists && versionControlChoices.size() >= 2)
m_context->page->setVersionControlIndex(1); m_context->page->setVersionControlIndex(1);
if (!m_context->repositoryExists) {
int newIdx = m_context->activeVersionControls.indexOf(currentSelection) + 1;
m_context->page->setVersionControlIndex(newIdx);
}
} }
QList<QWizardPage *> ProjectFileWizardExtension::extensionPages(const Core::IWizard *wizard) QList<QWizardPage *> ProjectFileWizardExtension::extensionPages(const Core::IWizard *wizard)
@@ -442,10 +460,10 @@ bool ProjectFileWizardExtension::processVersionControl(const QList<Core::Generat
{ {
// Add files to version control (Entry at 0 is 'None'). // Add files to version control (Entry at 0 is 'None').
const int vcsIndex = m_context->page->versionControlIndex() - 1; const int vcsIndex = m_context->page->versionControlIndex() - 1;
if (vcsIndex < 0 || vcsIndex >= m_context->versionControls.size()) if (vcsIndex < 0 || vcsIndex >= m_context->activeVersionControls.size())
return true; return true;
QTC_ASSERT(!m_context->commonDirectory.isEmpty(), return false); QTC_ASSERT(!m_context->commonDirectory.isEmpty(), return false);
Core::IVersionControl *versionControl = m_context->versionControls.at(vcsIndex); Core::IVersionControl *versionControl = m_context->activeVersionControls.at(vcsIndex);
// Create repository? // Create repository?
if (!m_context->repositoryExists) { if (!m_context->repositoryExists) {
QTC_ASSERT(versionControl->supportsOperation(Core::IVersionControl::CreateRepositoryOperation), return false); QTC_ASSERT(versionControl->supportsOperation(Core::IVersionControl::CreateRepositoryOperation), return false);
@@ -54,10 +54,10 @@ public:
public slots: public slots:
void firstExtensionPageShown(const QList<Core::GeneratedFile> &files); void firstExtensionPageShown(const QList<Core::GeneratedFile> &files);
void initializeVersionControlChoices();
private: private:
void initProjectChoices(const QString &generatedProjectFilePath); void initProjectChoices(const QString &generatedProjectFilePath);
void initializeVersionControlChoices();
bool processProject(const QList<Core::GeneratedFile> &files, bool processProject(const QList<Core::GeneratedFile> &files,
bool *removeOpenProjectAttribute, QString *errorMessage); bool *removeOpenProjectAttribute, QString *errorMessage);
bool processVersionControl(const QList<Core::GeneratedFile> &files, QString *errorMessage); bool processVersionControl(const QList<Core::GeneratedFile> &files, QString *errorMessage);
@@ -159,3 +159,8 @@ void SubversionControl::emitFilesChanged(const QStringList &l)
{ {
emit filesChanged(l); emit filesChanged(l);
} }
void SubversionControl::emitConfigurationChanged()
{
emit configurationChanged();
}
@@ -69,6 +69,7 @@ public:
void emitRepositoryChanged(const QString &); void emitRepositoryChanged(const QString &);
void emitFilesChanged(const QStringList &); void emitFilesChanged(const QStringList &);
void emitConfigurationChanged();
private: private:
SubversionPlugin *m_plugin; SubversionPlugin *m_plugin;
@@ -1203,6 +1203,7 @@ void SubversionPlugin::setSettings(const SubversionSettings &s)
m_settings = s; m_settings = s;
if (QSettings *settings = Core::ICore::instance()->settings()) if (QSettings *settings = Core::ICore::instance()->settings())
m_settings.toSettings(settings); m_settings.toSettings(settings);
subVersionControl()->emitConfigurationChanged();
} }
} }