summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@theqtcompany.com>2015-04-29 14:34:07 +0200
committerTobias Hunger <tobias.hunger@theqtcompany.com>2015-05-11 11:51:53 +0000
commit75f067550f15fe384f2b59989a90dcb7dd8d5e43 (patch)
treecd33c43e575a483a0d7a5516e71a9b29c16d33b7 /src
parentf5dcc93b7e816a7d728082a9f8261595104abe89 (diff)
downloadqt-creator-75f067550f15fe384f2b59989a90dcb7dd8d5e43.tar.gz
IVersionControl: Add method to get a ShellCommand for initial checkouts
Change-Id: Iabc056dad186d788003b221afb34303c37fef728 Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/bazaar/bazaarclient.h2
-rw-r--r--src/plugins/bazaar/bazaarcontrol.cpp19
-rw-r--r--src/plugins/bazaar/bazaarcontrol.h5
-rw-r--r--src/plugins/clearcase/clearcasecontrol.cpp1
-rw-r--r--src/plugins/coreplugin/iversioncontrol.cpp12
-rw-r--r--src/plugins/coreplugin/iversioncontrol.h18
-rw-r--r--src/plugins/cvs/cvscontrol.cpp21
-rw-r--r--src/plugins/cvs/cvscontrol.h5
-rw-r--r--src/plugins/git/gitversioncontrol.cpp22
-rw-r--r--src/plugins/git/gitversioncontrol.h5
-rw-r--r--src/plugins/mercurial/mercurialcontrol.cpp16
-rw-r--r--src/plugins/mercurial/mercurialcontrol.h5
-rw-r--r--src/plugins/perforce/perforceversioncontrol.cpp1
-rw-r--r--src/plugins/subversion/subversioncontrol.cpp21
-rw-r--r--src/plugins/subversion/subversioncontrol.h5
15 files changed, 153 insertions, 5 deletions
diff --git a/src/plugins/bazaar/bazaarclient.h b/src/plugins/bazaar/bazaarclient.h
index 913f341540..42005bd166 100644
--- a/src/plugins/bazaar/bazaarclient.h
+++ b/src/plugins/bazaar/bazaarclient.h
@@ -38,6 +38,7 @@ namespace Bazaar {
namespace Internal {
class BazaarSettings;
+class BazaarControl;
class BazaarClient : public VcsBase::VcsBaseClient
{
@@ -70,6 +71,7 @@ protected:
private:
friend class CloneWizard;
+ friend class BazaarControl;
};
} // namespace Internal
diff --git a/src/plugins/bazaar/bazaarcontrol.cpp b/src/plugins/bazaar/bazaarcontrol.cpp
index e9a9be117d..5827a9cd60 100644
--- a/src/plugins/bazaar/bazaarcontrol.cpp
+++ b/src/plugins/bazaar/bazaarcontrol.cpp
@@ -29,8 +29,11 @@
****************************************************************************/
#include "bazaarcontrol.h"
#include "bazaarclient.h"
+#include "bazaarplugin.h"
+#include <vcsbase/vcsbaseclientsettings.h>
#include <vcsbase/vcsbaseconstants.h>
+#include <vcsbase/vcscommand.h>
#include <utils/fileutils.h>
@@ -88,6 +91,7 @@ bool BazaarControl::supportsOperation(Operation operation) const
case Core::IVersionControl::MoveOperation:
case Core::IVersionControl::CreateRepositoryOperation:
case Core::IVersionControl::AnnotateOperation:
+ case Core::IVersionControl::InitialCheckoutOperation:
break;
case Core::IVersionControl::SnapshotOperations:
supported = false;
@@ -135,6 +139,21 @@ bool BazaarControl::vcsAnnotate(const QString &file, int line)
return true;
}
+Core::ShellCommand *BazaarControl::createInitialCheckoutCommand(const QString &url,
+ const Utils::FileName &baseDirectory,
+ const QString &localName,
+ const QStringList &extraArgs)
+{
+ QStringList args;
+ args << m_bazaarClient->vcsCommandString(BazaarClient::CloneCommand)
+ << extraArgs << url << localName;
+
+ auto command = new VcsBase::VcsCommand(baseDirectory.toString(),
+ m_bazaarClient->processEnvironment());
+ command->addJob(m_bazaarClient->vcsBinary(), args, -1);
+ return command;
+}
+
void BazaarControl::changed(const QVariant &v)
{
switch (v.type()) {
diff --git a/src/plugins/bazaar/bazaarcontrol.h b/src/plugins/bazaar/bazaarcontrol.h
index bd74926d41..f55ad73ca3 100644
--- a/src/plugins/bazaar/bazaarcontrol.h
+++ b/src/plugins/bazaar/bazaarcontrol.h
@@ -64,6 +64,11 @@ public:
bool vcsCreateRepository(const QString &directory) override;
bool vcsAnnotate(const QString &file, int line) override;
+ Core::ShellCommand *createInitialCheckoutCommand(const QString &url,
+ const Utils::FileName &baseDirectory,
+ const QString &localName,
+ const QStringList &extraArgs) override;
+
public slots:
// To be connected to the VCSTask's success signal to emit the repository/
// files changed signals according to the variant's type:
diff --git a/src/plugins/clearcase/clearcasecontrol.cpp b/src/plugins/clearcase/clearcasecontrol.cpp
index 686f782a92..472d79a81b 100644
--- a/src/plugins/clearcase/clearcasecontrol.cpp
+++ b/src/plugins/clearcase/clearcasecontrol.cpp
@@ -80,6 +80,7 @@ bool ClearCaseControl::supportsOperation(Operation operation) const
break;
case CreateRepositoryOperation:
case SnapshotOperations:
+ case Core::IVersionControl::InitialCheckoutOperation:
rc = false;
break;
}
diff --git a/src/plugins/coreplugin/iversioncontrol.cpp b/src/plugins/coreplugin/iversioncontrol.cpp
index f9cbf4a90d..d7af51eabb 100644
--- a/src/plugins/coreplugin/iversioncontrol.cpp
+++ b/src/plugins/coreplugin/iversioncontrol.cpp
@@ -83,6 +83,18 @@ QStringList IVersionControl::additionalToolsPath() const
return QStringList();
}
+ShellCommand *IVersionControl::createInitialCheckoutCommand(const QString &url,
+ const Utils::FileName &baseDirectory,
+ const QString &localName,
+ const QStringList &extraArgs)
+{
+ Q_UNUSED(url);
+ Q_UNUSED(baseDirectory);
+ Q_UNUSED(localName);
+ Q_UNUSED(extraArgs);
+ return 0;
+}
+
QString IVersionControl::vcsTopic(const QString &topLevel)
{
return m_topicCache ? m_topicCache->topic(topLevel) : QString();
diff --git a/src/plugins/coreplugin/iversioncontrol.h b/src/plugins/coreplugin/iversioncontrol.h
index f9a9d2b76e..04c733cefd 100644
--- a/src/plugins/coreplugin/iversioncontrol.h
+++ b/src/plugins/coreplugin/iversioncontrol.h
@@ -34,6 +34,8 @@
#include "core_global.h"
#include "id.h"
+#include <utils/fileutils.h>
+
#include <QDateTime>
#include <QFlags>
#include <QHash>
@@ -42,6 +44,8 @@
namespace Core {
+class ShellCommand;
+
class CORE_EXPORT IVersionControl : public QObject
{
Q_OBJECT
@@ -56,7 +60,8 @@ public:
AddOperation, DeleteOperation, MoveOperation,
CreateRepositoryOperation,
SnapshotOperations,
- AnnotateOperation
+ AnnotateOperation,
+ InitialCheckoutOperation
};
enum OpenSupportMode {
@@ -194,6 +199,17 @@ public:
*/
virtual QStringList additionalToolsPath() const;
+ /*!
+ * Return a ShellCommand capable of checking out \a url into \a baseDirectory, where
+ * a new subdirectory with \a localName will be created.
+ *
+ * \a extraArgs are passed on to the command being run.
+ */
+ virtual ShellCommand *createInitialCheckoutCommand(const QString &url,
+ const Utils::FileName &baseDirectory,
+ const QString &localName,
+ const QStringList &extraArgs);
+
signals:
void repositoryChanged(const QString &repository);
void filesChanged(const QStringList &files);
diff --git a/src/plugins/cvs/cvscontrol.cpp b/src/plugins/cvs/cvscontrol.cpp
index ceb1eeca66..82e09bc38a 100644
--- a/src/plugins/cvs/cvscontrol.cpp
+++ b/src/plugins/cvs/cvscontrol.cpp
@@ -35,8 +35,10 @@
#include "cvssettings.h"
#include <vcsbase/vcsbaseconstants.h>
+#include <vcsbase/vcscommand.h>
#include <utils/fileutils.h>
+#include <utils/qtcassert.h>
#include <QFileInfo>
@@ -74,6 +76,7 @@ bool CvsControl::supportsOperation(Operation operation) const
case AddOperation:
case DeleteOperation:
case AnnotateOperation:
+ case InitialCheckoutOperation:
break;
case MoveOperation:
case CreateRepositoryOperation:
@@ -132,6 +135,24 @@ QString CvsControl::vcsOpenText() const
return tr("&Edit");
}
+Core::ShellCommand *CvsControl::createInitialCheckoutCommand(const QString &url,
+ const Utils::FileName &baseDirectory,
+ const QString &localName,
+ const QStringList &extraArgs)
+{
+ QTC_ASSERT(localName == url, return 0);
+
+ const CvsSettings settings = CvsPlugin::instance()->client()->settings();
+
+ QStringList args;
+ args << QLatin1String("checkout") << url << extraArgs;
+
+ auto command = new VcsBase::VcsCommand(baseDirectory.toString(),
+ QProcessEnvironment::systemEnvironment());
+ command->addJob(m_plugin->client()->vcsBinary(), settings.addOptions(args), -1);
+ return command;
+}
+
bool CvsControl::managesDirectory(const QString &directory, QString *topLevel) const
{
return m_plugin->managesDirectory(directory, topLevel);
diff --git a/src/plugins/cvs/cvscontrol.h b/src/plugins/cvs/cvscontrol.h
index 7d2425aaad..ec18756877 100644
--- a/src/plugins/cvs/cvscontrol.h
+++ b/src/plugins/cvs/cvscontrol.h
@@ -63,6 +63,11 @@ public:
QString vcsOpenText() const override;
+ Core::ShellCommand *createInitialCheckoutCommand(const QString &url,
+ const Utils::FileName &baseDirectory,
+ const QString &localName,
+ const QStringList &extraArgs) override;
+
void emitRepositoryChanged(const QString &s);
void emitFilesChanged(const QStringList &l);
diff --git a/src/plugins/git/gitversioncontrol.cpp b/src/plugins/git/gitversioncontrol.cpp
index ba9ec5589e..bb5f7024e9 100644
--- a/src/plugins/git/gitversioncontrol.cpp
+++ b/src/plugins/git/gitversioncontrol.cpp
@@ -33,8 +33,10 @@
#include "gitutils.h"
#include <vcsbase/vcsbaseconstants.h>
+#include <vcsbase/vcscommand.h>
#include <QFileInfo>
+#include <QProcessEnvironment>
namespace Git {
namespace Internal {
@@ -44,8 +46,7 @@ class GitTopicCache : public Core::IVersionControl::TopicCache
public:
GitTopicCache(GitClient *client) :
m_client(client)
- {
- }
+ { }
protected:
QString trackFile(const QString &repository) override
@@ -66,8 +67,7 @@ private:
GitVersionControl::GitVersionControl(GitClient *client) :
Core::IVersionControl(new GitTopicCache(client)),
m_client(client)
-{
-}
+{ }
QString GitVersionControl::displayName() const
{
@@ -96,6 +96,7 @@ bool GitVersionControl::supportsOperation(Operation operation) const
case CreateRepositoryOperation:
case SnapshotOperations:
case AnnotateOperation:
+ case InitialCheckoutOperation:
return true;
}
return false;
@@ -139,6 +140,19 @@ QString GitVersionControl::vcsTopic(const QString &directory)
return topic;
}
+Core::ShellCommand *GitVersionControl::createInitialCheckoutCommand(const QString &url,
+ const Utils::FileName &baseDirectory,
+ const QString &localName,
+ const QStringList &extraArgs)
+{
+ QStringList args;
+ args << QLatin1String("clone") << extraArgs << url << localName;
+
+ auto command = new VcsBase::VcsCommand(baseDirectory.toString(), m_client->processEnvironment());
+ command->addJob(m_client->vcsBinary(), args, -1);
+ return command;
+}
+
QStringList GitVersionControl::additionalToolsPath() const
{
QStringList res = m_client->settings().searchPathList();
diff --git a/src/plugins/git/gitversioncontrol.h b/src/plugins/git/gitversioncontrol.h
index 2e528ab487..71dedb09ee 100644
--- a/src/plugins/git/gitversioncontrol.h
+++ b/src/plugins/git/gitversioncontrol.h
@@ -62,6 +62,11 @@ public:
bool vcsAnnotate(const QString &file, int line) override;
QString vcsTopic(const QString &directory) override;
+ Core::ShellCommand *createInitialCheckoutCommand(const QString &url,
+ const Utils::FileName &baseDirectory,
+ const QString &localName,
+ const QStringList &extraArgs) override;
+
QStringList additionalToolsPath() const override;
void emitFilesChanged(const QStringList &);
diff --git a/src/plugins/mercurial/mercurialcontrol.cpp b/src/plugins/mercurial/mercurialcontrol.cpp
index 6f5ad95fb1..827355601f 100644
--- a/src/plugins/mercurial/mercurialcontrol.cpp
+++ b/src/plugins/mercurial/mercurialcontrol.cpp
@@ -33,12 +33,14 @@
#include <vcsbase/vcsbaseclientsettings.h>
#include <vcsbase/vcsbaseconstants.h>
+#include <vcsbase/vcscommand.h>
#include <coreplugin/vcsmanager.h>
#include <utils/fileutils.h>
#include <QFileInfo>
+#include <QProcessEnvironment>
#include <QVariant>
#include <QStringList>
#include <QDir>
@@ -114,6 +116,7 @@ bool MercurialControl::supportsOperation(Operation operation) const
case Core::IVersionControl::MoveOperation:
case Core::IVersionControl::CreateRepositoryOperation:
case Core::IVersionControl::AnnotateOperation:
+ case Core::IVersionControl::InitialCheckoutOperation:
break;
case Core::IVersionControl::SnapshotOperations:
supported = false;
@@ -161,6 +164,19 @@ bool MercurialControl::vcsAnnotate(const QString &file, int line)
return true;
}
+Core::ShellCommand *MercurialControl::createInitialCheckoutCommand(const QString &url,
+ const Utils::FileName &baseDirectory,
+ const QString &localName,
+ const QStringList &extraArgs)
+{
+ QStringList args;
+ args << QLatin1String("clone") << extraArgs << url << localName;
+ auto command = new VcsBase::VcsCommand(baseDirectory.toString(),
+ mercurialClient->processEnvironment());
+ command->addJob(mercurialClient->vcsBinary(), args, -1);
+ return command;
+}
+
bool MercurialControl::sccManaged(const QString &filename)
{
const QFileInfo fi(filename);
diff --git a/src/plugins/mercurial/mercurialcontrol.h b/src/plugins/mercurial/mercurialcontrol.h
index 6807e57aba..30b33c8de3 100644
--- a/src/plugins/mercurial/mercurialcontrol.h
+++ b/src/plugins/mercurial/mercurialcontrol.h
@@ -64,6 +64,11 @@ public:
bool vcsCreateRepository(const QString &directory) override;
bool vcsAnnotate(const QString &file, int line) override;
+ Core::ShellCommand *createInitialCheckoutCommand(const QString &url,
+ const Utils::FileName &baseDirectory,
+ const QString &localName,
+ const QStringList &extraArgs) override;
+
bool sccManaged(const QString &filename);
public slots:
diff --git a/src/plugins/perforce/perforceversioncontrol.cpp b/src/plugins/perforce/perforceversioncontrol.cpp
index 8ae4b02c06..5e7cb29bb0 100644
--- a/src/plugins/perforce/perforceversioncontrol.cpp
+++ b/src/plugins/perforce/perforceversioncontrol.cpp
@@ -76,6 +76,7 @@ bool PerforceVersionControl::supportsOperation(Operation operation) const
return supported;
case CreateRepositoryOperation:
case SnapshotOperations:
+ case InitialCheckoutOperation:
break;
}
return false;
diff --git a/src/plugins/subversion/subversioncontrol.cpp b/src/plugins/subversion/subversioncontrol.cpp
index a6fe4d48d4..9017562021 100644
--- a/src/plugins/subversion/subversioncontrol.cpp
+++ b/src/plugins/subversion/subversioncontrol.cpp
@@ -31,10 +31,12 @@
#include "subversioncontrol.h"
#include "subversionclient.h"
+#include "subversionconstants.h"
#include "subversionplugin.h"
#include "subversionsettings.h"
#include <vcsbase/vcsbaseconstants.h>
+#include <vcsbase/vcsbaseclientsettings.h>
#include <utils/fileutils.h>
@@ -97,6 +99,7 @@ bool SubversionControl::supportsOperation(Operation operation) const
case DeleteOperation:
case MoveOperation:
case AnnotateOperation:
+ case InitialCheckoutOperation:
break;
case CreateRepositoryOperation:
case SnapshotOperations:
@@ -153,6 +156,24 @@ bool SubversionControl::vcsAnnotate(const QString &file, int line)
return true;
}
+Core::ShellCommand *SubversionControl::createInitialCheckoutCommand(const QString &url,
+ const Utils::FileName &baseDirectory,
+ const QString &localName,
+ const QStringList &extraArgs)
+{
+ SubversionClient *client = m_plugin->client();
+
+ QStringList args;
+ args << QLatin1String("checkout");
+ args << SubversionClient::addAuthenticationOptions(client->settings());
+ args << QLatin1String(Subversion::Constants::NON_INTERACTIVE_OPTION);
+ args << extraArgs << url << localName;
+
+ auto command = new VcsBase::VcsCommand(baseDirectory.toString(), client->processEnvironment());
+ command->addJob(client->vcsBinary(), args, -1);
+ return command;
+}
+
void SubversionControl::emitRepositoryChanged(const QString &s)
{
emit repositoryChanged(s);
diff --git a/src/plugins/subversion/subversioncontrol.h b/src/plugins/subversion/subversioncontrol.h
index 62d2ee902f..f05185ac1e 100644
--- a/src/plugins/subversion/subversioncontrol.h
+++ b/src/plugins/subversion/subversioncontrol.h
@@ -60,6 +60,11 @@ public:
bool vcsAnnotate(const QString &file, int line) override;
+ Core::ShellCommand *createInitialCheckoutCommand(const QString &url,
+ const Utils::FileName &baseDirectory,
+ const QString &localName,
+ const QStringList &extraArgs) override;
+
void emitRepositoryChanged(const QString &);
void emitFilesChanged(const QStringList &);