summaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@nokia.com>2011-04-15 16:02:44 +0200
committerTobias Hunger <tobias.hunger@nokia.com>2011-04-15 16:06:38 +0200
commitc07e2133990d23e1aa7df6a8bf6ff77ea50c2167 (patch)
treecf42bb98786dc8fa615510f8e36c418cde2f40cc /src/plugins
parent9978ebeda85bad33f017d2ed0c045ae3b1838714 (diff)
downloadqt-creator-c07e2133990d23e1aa7df6a8bf6ff77ea50c2167.tar.gz
VCS: Do not claim to support any operation if unconfigured
Make sure none of the VCS systems claims it does support any VCS operation while unconfigured. This stops the specific VCS from showing up in wizards, etc. till they can actually be used.
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/bazaar/bazaarcontrol.cpp14
-rw-r--r--src/plugins/bazaar/bazaarcontrol.h1
-rw-r--r--src/plugins/coreplugin/iversioncontrol.h6
-rw-r--r--src/plugins/cvs/cvscontrol.cpp12
-rw-r--r--src/plugins/cvs/cvscontrol.h1
-rw-r--r--src/plugins/git/gitplugin.cpp5
-rw-r--r--src/plugins/git/gitversioncontrol.cpp56
-rw-r--r--src/plugins/git/gitversioncontrol.h2
-rw-r--r--src/plugins/mercurial/mercurialcontrol.cpp13
-rw-r--r--src/plugins/mercurial/mercurialcontrol.h1
-rw-r--r--src/plugins/perforce/perforceversioncontrol.cpp14
-rw-r--r--src/plugins/perforce/perforceversioncontrol.h2
-rw-r--r--src/plugins/subversion/subversioncontrol.cpp12
-rw-r--r--src/plugins/subversion/subversioncontrol.h1
14 files changed, 101 insertions, 39 deletions
diff --git a/src/plugins/bazaar/bazaarcontrol.cpp b/src/plugins/bazaar/bazaarcontrol.cpp
index cf7f9fcfa4..43c0a8356f 100644
--- a/src/plugins/bazaar/bazaarcontrol.cpp
+++ b/src/plugins/bazaar/bazaarcontrol.cpp
@@ -33,6 +33,8 @@
#include "bazaarcontrol.h"
#include "bazaarclient.h"
+#include <vcsbase/vcsbaseclientsettings.h>
+
#include <QtCore/QFileInfo>
#include <QtCore/QVariant>
#include <QtCore/QStringList>
@@ -59,9 +61,19 @@ bool BazaarControl::managesDirectory(const QString &directory, QString *topLevel
return !topLevelFound.isEmpty();
}
+bool BazaarControl::isConfigured() const
+{
+ const QString binary = m_bazaarClient->settings().binary();
+ if (binary.isEmpty())
+ return false;
+ QFileInfo fi(binary);
+ return fi.exists() && fi.isFile() && fi.isExecutable();
+}
+
bool BazaarControl::supportsOperation(Operation operation) const
{
- bool supported = true;
+ bool supported = isConfigured();
+
switch (operation) {
case Core::IVersionControl::AddOperation:
case Core::IVersionControl::DeleteOperation:
diff --git a/src/plugins/bazaar/bazaarcontrol.h b/src/plugins/bazaar/bazaarcontrol.h
index deff2efe27..5d0182b2ae 100644
--- a/src/plugins/bazaar/bazaarcontrol.h
+++ b/src/plugins/bazaar/bazaarcontrol.h
@@ -54,6 +54,7 @@ public:
QString displayName() const;
bool managesDirectory(const QString &filename, QString *topLevel = 0) const;
+ bool isConfigured() const;
bool supportsOperation(Operation operation) const;
bool vcsOpen(const QString &fileName);
bool vcsAdd(const QString &filename);
diff --git a/src/plugins/coreplugin/iversioncontrol.h b/src/plugins/coreplugin/iversioncontrol.h
index 5b94e18c6d..2e264e337d 100644
--- a/src/plugins/coreplugin/iversioncontrol.h
+++ b/src/plugins/coreplugin/iversioncontrol.h
@@ -76,7 +76,13 @@ public:
virtual bool managesDirectory(const QString &filename, QString *topLevel = 0) const = 0;
/*!
+ * Returns true is the VCS is configured to run.
+ */
+ virtual bool isConfigured() const = 0;
+ /*!
* Called to query whether a VCS supports the respective operations.
+ *
+ * Return false if the VCS is not configured yet.
*/
virtual bool supportsOperation(Operation operation) const = 0;
diff --git a/src/plugins/cvs/cvscontrol.cpp b/src/plugins/cvs/cvscontrol.cpp
index 2dfa2b9566..ce1801eb52 100644
--- a/src/plugins/cvs/cvscontrol.cpp
+++ b/src/plugins/cvs/cvscontrol.cpp
@@ -32,6 +32,7 @@
#include "cvscontrol.h"
#include "cvsplugin.h"
+#include "cvssettings.h"
#include <QtCore/QFileInfo>
@@ -48,9 +49,18 @@ QString CVSControl::displayName() const
return QLatin1String("cvs");
}
+bool CVSControl::isConfigured() const
+{
+ const QString binary = m_plugin->settings().cvsCommand;
+ if (binary.isEmpty())
+ return false;
+ QFileInfo fi(binary);
+ return fi.exists() && fi.isFile() && fi.isExecutable();
+}
+
bool CVSControl::supportsOperation(Operation operation) const
{
- bool rc = true;
+ bool rc = isConfigured();
switch (operation) {
case AddOperation:
case DeleteOperation:
diff --git a/src/plugins/cvs/cvscontrol.h b/src/plugins/cvs/cvscontrol.h
index 12145a6aad..a26366eb0f 100644
--- a/src/plugins/cvs/cvscontrol.h
+++ b/src/plugins/cvs/cvscontrol.h
@@ -50,6 +50,7 @@ public:
bool managesDirectory(const QString &directory, QString *topLevel = 0) const;
+ bool isConfigured() const;
bool supportsOperation(Operation operation) const;
bool vcsOpen(const QString &fileName);
bool vcsAdd(const QString &fileName);
diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp
index 08a122dc92..8687ec823f 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -277,13 +277,14 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
Q_UNUSED(arguments)
Q_UNUSED(errorMessage)
+ m_core = Core::ICore::instance();
+ m_gitClient = new GitClient(this);
+
typedef VCSBase::VCSEditorFactory<GitEditor> GitEditorFactory;
typedef VCSBase::VCSSubmitEditorFactory<GitSubmitEditor> GitSubmitEditorFactory;
VCSBase::VCSBasePlugin::initialize(new GitVersionControl(m_gitClient));
- m_core = Core::ICore::instance();
- m_gitClient = new GitClient(this);
// Create the globalcontext list to register actions accordingly
Core::Context globalcontext(Core::Constants::C_GLOBAL);
diff --git a/src/plugins/git/gitversioncontrol.cpp b/src/plugins/git/gitversioncontrol.cpp
index c53a49f62c..9977fd8db2 100644
--- a/src/plugins/git/gitversioncontrol.cpp
+++ b/src/plugins/git/gitversioncontrol.cpp
@@ -46,13 +46,7 @@ static const char stashRevisionIdC[] = "revision";
namespace Git {
namespace Internal {
-static inline GitClient *gitClient()
-{
- return GitPlugin::instance()->gitClient();
-}
-
GitVersionControl::GitVersionControl(GitClient *client) :
- m_enabled(true),
m_client(client)
{
}
@@ -62,18 +56,22 @@ QString GitVersionControl::displayName() const
return QLatin1String("git");
}
-// Add: Implement using "git add --intent-to-add" starting from 1.6.1
-static inline bool addOperationSupported()
+bool GitVersionControl::isConfigured() const
{
- return gitClient()->gitVersion(true) >= version(1, 6, 1);
+ bool ok = false;
+ m_client->settings().gitBinaryPath(&ok);
+ return ok;
}
bool GitVersionControl::supportsOperation(Operation operation) const
{
+ if (!isConfigured())
+ return false;
+
bool rc = false;
switch (operation) {
case AddOperation:
- rc = addOperationSupported();
+ rc = m_client->gitVersion(true) >= version(1, 6, 1);;
break;
case DeleteOperation:
rc = true;
@@ -106,37 +104,37 @@ bool GitVersionControl::vcsOpen(const QString & /*fileName*/)
bool GitVersionControl::vcsAdd(const QString & fileName)
{
// Implement in terms of using "--intent-to-add"
- QTC_ASSERT(addOperationSupported(), return false);
+ QTC_ASSERT(m_client->gitVersion(true) >= version(1, 6, 1), return false);
const QFileInfo fi(fileName);
- return gitClient()->synchronousAdd(fi.absolutePath(), true, QStringList(fi.fileName()));
+ return m_client->synchronousAdd(fi.absolutePath(), true, QStringList(fi.fileName()));
}
bool GitVersionControl::vcsDelete(const QString & fileName)
{
const QFileInfo fi(fileName);
- return gitClient()->synchronousDelete(fi.absolutePath(), true, QStringList(fi.fileName()));
+ return m_client->synchronousDelete(fi.absolutePath(), true, QStringList(fi.fileName()));
}
bool GitVersionControl::vcsMove(const QString &from, const QString &to)
{
const QFileInfo fromInfo(from);
const QFileInfo toInfo(to);
- return gitClient()->synchronousMove(fromInfo.absolutePath(), fromInfo.absoluteFilePath(), toInfo.absoluteFilePath());
+ return m_client->synchronousMove(fromInfo.absolutePath(), fromInfo.absoluteFilePath(), toInfo.absoluteFilePath());
}
bool GitVersionControl::vcsCreateRepository(const QString &directory)
{
- return gitClient()->synchronousInit(directory);
+ return m_client->synchronousInit(directory);
}
bool GitVersionControl::vcsCheckout(const QString &directory, const QByteArray &url)
{
- return gitClient()->cloneRepository(directory,url);
+ return m_client->cloneRepository(directory,url);
}
QString GitVersionControl::vcsGetRepositoryURL(const QString &directory)
{
- return gitClient()->vcsGetRepositoryURL(directory);
+ return m_client->vcsGetRepositoryURL(directory);
}
/* Snapshots are implement using stashes, relying on stash messages for
@@ -153,7 +151,7 @@ QString GitVersionControl::vcsCreateSnapshot(const QString &topLevel)
static int n = 1;
QString keyword = QLatin1String(stashMessageKeywordC) + QString::number(n++);
const QString stashMessage =
- gitClient()->synchronousStash(topLevel, keyword,
+ m_client->synchronousStash(topLevel, keyword,
GitClient::StashImmediateRestore|GitClient::StashIgnoreUnchanged,
&repositoryUnchanged);
if (!stashMessage.isEmpty())
@@ -162,7 +160,7 @@ QString GitVersionControl::vcsCreateSnapshot(const QString &topLevel)
// For unchanged repository state: return identifier + top revision
QString topRevision;
QString branch;
- if (!gitClient()->synchronousTopRevision(topLevel, &topRevision, &branch))
+ if (!m_client->synchronousTopRevision(topLevel, &topRevision, &branch))
return QString();
const QChar colon = QLatin1Char(':');
QString id = QLatin1String(stashRevisionIdC);
@@ -178,7 +176,7 @@ QString GitVersionControl::vcsCreateSnapshot(const QString &topLevel)
QStringList GitVersionControl::vcsSnapshots(const QString &topLevel)
{
QList<Stash> stashes;
- if (!gitClient()->synchronousStashList(topLevel, &stashes))
+ if (!m_client->synchronousStashList(topLevel, &stashes))
return QStringList();
// Return the git stash 'message' as identifier, ignoring empty ones
QStringList rc;
@@ -200,15 +198,15 @@ bool GitVersionControl::vcsRestoreSnapshot(const QString &topLevel, const QStrin
break;
const QString branch = tokens.at(1);
const QString revision = tokens.at(2);
- success = gitClient()->synchronousReset(topLevel)
- && gitClient()->synchronousCheckoutBranch(topLevel, branch)
- && gitClient()->synchronousCheckoutFiles(topLevel, QStringList(), revision);
+ success = m_client->synchronousReset(topLevel)
+ && m_client->synchronousCheckoutBranch(topLevel, branch)
+ && m_client->synchronousCheckoutFiles(topLevel, QStringList(), revision);
} else {
// Restore stash if it can be resolved.
QString stashName;
- success = gitClient()->stashNameFromMessage(topLevel, name, &stashName)
- && gitClient()->synchronousReset(topLevel)
- && gitClient()->synchronousStashRestore(topLevel, stashName);
+ success = m_client->stashNameFromMessage(topLevel, name, &stashName)
+ && m_client->synchronousReset(topLevel)
+ && m_client->synchronousStashRestore(topLevel, stashName);
}
} while (false);
return success;
@@ -220,8 +218,8 @@ bool GitVersionControl::vcsRemoveSnapshot(const QString &topLevel, const QString
if (name.startsWith(QLatin1String(stashRevisionIdC)))
return true;
QString stashName;
- return gitClient()->stashNameFromMessage(topLevel, name, &stashName)
- && gitClient()->synchronousStashRemove(topLevel, stashName);
+ return m_client->stashNameFromMessage(topLevel, name, &stashName)
+ && m_client->synchronousStashRemove(topLevel, stashName);
}
bool GitVersionControl::managesDirectory(const QString &directory, QString *topLevel) const
@@ -235,7 +233,7 @@ bool GitVersionControl::managesDirectory(const QString &directory, QString *topL
bool GitVersionControl::vcsAnnotate(const QString &file, int line)
{
const QFileInfo fi(file);
- gitClient()->blame(fi.absolutePath(), QStringList(), fi.fileName(), QString(), line);
+ m_client->blame(fi.absolutePath(), QStringList(), fi.fileName(), QString(), line);
return true;
}
diff --git a/src/plugins/git/gitversioncontrol.h b/src/plugins/git/gitversioncontrol.h
index 71917ad36d..b4c62e535a 100644
--- a/src/plugins/git/gitversioncontrol.h
+++ b/src/plugins/git/gitversioncontrol.h
@@ -51,6 +51,7 @@ public:
bool managesDirectory(const QString &directory, QString *topLevel) const;
+ bool isConfigured() const;
bool supportsOperation(Operation operation) const;
bool vcsOpen(const QString &fileName);
bool vcsAdd(const QString &fileName);
@@ -70,7 +71,6 @@ public:
void emitRepositoryChanged(const QString &);
private:
- bool m_enabled;
GitClient *m_client;
};
diff --git a/src/plugins/mercurial/mercurialcontrol.cpp b/src/plugins/mercurial/mercurialcontrol.cpp
index e5cd67b840..9b7af6a54a 100644
--- a/src/plugins/mercurial/mercurialcontrol.cpp
+++ b/src/plugins/mercurial/mercurialcontrol.cpp
@@ -33,6 +33,8 @@
#include "mercurialcontrol.h"
#include "mercurialclient.h"
+#include <vcsbase/vcsbaseclientsettings.h>
+
#include <QtCore/QFileInfo>
#include <QtCore/QVariant>
#include <QtCore/QStringList>
@@ -59,9 +61,18 @@ bool MercurialControl::managesDirectory(const QString &directory, QString *topLe
return !topLevelFound.isEmpty();
}
+bool MercurialControl::isConfigured() const
+{
+ const QString binary = mercurialClient->settings().binary();
+ if (binary.isEmpty())
+ return false;
+ QFileInfo fi(binary);
+ return fi.exists() && fi.isFile() && fi.isExecutable();
+}
+
bool MercurialControl::supportsOperation(Operation operation) const
{
- bool supported = true;
+ bool supported = isConfigured();
switch (operation) {
case Core::IVersionControl::AddOperation:
case Core::IVersionControl::DeleteOperation:
diff --git a/src/plugins/mercurial/mercurialcontrol.h b/src/plugins/mercurial/mercurialcontrol.h
index 6ae14d3cd8..687c8d4908 100644
--- a/src/plugins/mercurial/mercurialcontrol.h
+++ b/src/plugins/mercurial/mercurialcontrol.h
@@ -54,6 +54,7 @@ public:
QString displayName() const;
bool managesDirectory(const QString &filename, QString *topLevel = 0) const;
+ bool isConfigured() const;
bool supportsOperation(Operation operation) const;
bool vcsOpen(const QString &fileName);
bool vcsAdd(const QString &filename);
diff --git a/src/plugins/perforce/perforceversioncontrol.cpp b/src/plugins/perforce/perforceversioncontrol.cpp
index 7cf1bf7501..170cc91dc7 100644
--- a/src/plugins/perforce/perforceversioncontrol.cpp
+++ b/src/plugins/perforce/perforceversioncontrol.cpp
@@ -33,6 +33,7 @@
#include "perforceversioncontrol.h"
#include "perforceplugin.h"
#include "perforceconstants.h"
+#include "perforcesettings.h"
#include <QtCore/QFileInfo>
#include <QtCore/QDebug>
@@ -41,7 +42,6 @@ namespace Perforce {
namespace Internal {
PerforceVersionControl::PerforceVersionControl(PerforcePlugin *plugin) :
- m_enabled(true),
m_plugin(plugin)
{
}
@@ -51,15 +51,25 @@ QString PerforceVersionControl::displayName() const
return QLatin1String("perforce");
}
+bool PerforceVersionControl::isConfigured() const
+{
+ const QString binary = m_plugin->settings().p4Command();
+ if (binary.isEmpty())
+ return false;
+ QFileInfo fi(binary);
+ return fi.exists() && fi.isFile() && fi.isExecutable();
+}
+
bool PerforceVersionControl::supportsOperation(Operation operation) const
{
+ bool supported = isConfigured();
switch (operation) {
case AddOperation:
case DeleteOperation:
case MoveOperation:
case OpenOperation:
case AnnotateOperation:
- return true;
+ return supported;
case CreateRepositoryOperation:
case SnapshotOperations:
case CheckoutOperation:
diff --git a/src/plugins/perforce/perforceversioncontrol.h b/src/plugins/perforce/perforceversioncontrol.h
index 282277ff2a..bc77555591 100644
--- a/src/plugins/perforce/perforceversioncontrol.h
+++ b/src/plugins/perforce/perforceversioncontrol.h
@@ -50,7 +50,7 @@ public:
bool managesDirectory(const QString &directory, QString *topLevel = 0) const;
-
+ bool isConfigured() const;
bool supportsOperation(Operation operation) const;
bool vcsOpen(const QString &fileName);
SettingsFlags settingsFlags() const;
diff --git a/src/plugins/subversion/subversioncontrol.cpp b/src/plugins/subversion/subversioncontrol.cpp
index 4be772918a..08fab79557 100644
--- a/src/plugins/subversion/subversioncontrol.cpp
+++ b/src/plugins/subversion/subversioncontrol.cpp
@@ -32,6 +32,7 @@
#include "subversioncontrol.h"
#include "subversionplugin.h"
+#include "subversionsettings.h"
#include <QtCore/QFileInfo>
@@ -48,9 +49,18 @@ QString SubversionControl::displayName() const
return QLatin1String("subversion");
}
+bool SubversionControl::isConfigured() const
+{
+ const QString binary = m_plugin->settings().svnCommand;
+ if (binary.isEmpty())
+ return false;
+ QFileInfo fi(binary);
+ return fi.exists() && fi.isFile() && fi.isExecutable();
+}
+
bool SubversionControl::supportsOperation(Operation operation) const
{
- bool rc = true;
+ bool rc = isConfigured();
switch (operation) {
case AddOperation:
case DeleteOperation:
diff --git a/src/plugins/subversion/subversioncontrol.h b/src/plugins/subversion/subversioncontrol.h
index bdf6bd0b67..1dd519328f 100644
--- a/src/plugins/subversion/subversioncontrol.h
+++ b/src/plugins/subversion/subversioncontrol.h
@@ -50,6 +50,7 @@ public:
bool managesDirectory(const QString &directory, QString *topLevel = 0) const;
+ bool isConfigured() const;
bool supportsOperation(Operation operation) const;
bool vcsOpen(const QString &fileName);
bool vcsAdd(const QString &fileName);