IVersionControl: Add method to get a ShellCommand for initial checkouts

Change-Id: Iabc056dad186d788003b221afb34303c37fef728
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
Tobias Hunger
2015-04-29 14:34:07 +02:00
parent f5dcc93b7e
commit 75f067550f
15 changed files with 153 additions and 5 deletions

View File

@@ -38,6 +38,7 @@ namespace Bazaar {
namespace Internal { namespace Internal {
class BazaarSettings; class BazaarSettings;
class BazaarControl;
class BazaarClient : public VcsBase::VcsBaseClient class BazaarClient : public VcsBase::VcsBaseClient
{ {
@@ -70,6 +71,7 @@ protected:
private: private:
friend class CloneWizard; friend class CloneWizard;
friend class BazaarControl;
}; };
} // namespace Internal } // namespace Internal

View File

@@ -29,8 +29,11 @@
****************************************************************************/ ****************************************************************************/
#include "bazaarcontrol.h" #include "bazaarcontrol.h"
#include "bazaarclient.h" #include "bazaarclient.h"
#include "bazaarplugin.h"
#include <vcsbase/vcsbaseclientsettings.h>
#include <vcsbase/vcsbaseconstants.h> #include <vcsbase/vcsbaseconstants.h>
#include <vcsbase/vcscommand.h>
#include <utils/fileutils.h> #include <utils/fileutils.h>
@@ -88,6 +91,7 @@ bool BazaarControl::supportsOperation(Operation operation) const
case Core::IVersionControl::MoveOperation: case Core::IVersionControl::MoveOperation:
case Core::IVersionControl::CreateRepositoryOperation: case Core::IVersionControl::CreateRepositoryOperation:
case Core::IVersionControl::AnnotateOperation: case Core::IVersionControl::AnnotateOperation:
case Core::IVersionControl::InitialCheckoutOperation:
break; break;
case Core::IVersionControl::SnapshotOperations: case Core::IVersionControl::SnapshotOperations:
supported = false; supported = false;
@@ -135,6 +139,21 @@ bool BazaarControl::vcsAnnotate(const QString &file, int line)
return true; 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) void BazaarControl::changed(const QVariant &v)
{ {
switch (v.type()) { switch (v.type()) {

View File

@@ -64,6 +64,11 @@ public:
bool vcsCreateRepository(const QString &directory) override; bool vcsCreateRepository(const QString &directory) override;
bool vcsAnnotate(const QString &file, int line) 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: public slots:
// To be connected to the VCSTask's success signal to emit the repository/ // To be connected to the VCSTask's success signal to emit the repository/
// files changed signals according to the variant's type: // files changed signals according to the variant's type:

View File

@@ -80,6 +80,7 @@ bool ClearCaseControl::supportsOperation(Operation operation) const
break; break;
case CreateRepositoryOperation: case CreateRepositoryOperation:
case SnapshotOperations: case SnapshotOperations:
case Core::IVersionControl::InitialCheckoutOperation:
rc = false; rc = false;
break; break;
} }

View File

@@ -83,6 +83,18 @@ QStringList IVersionControl::additionalToolsPath() const
return QStringList(); 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) QString IVersionControl::vcsTopic(const QString &topLevel)
{ {
return m_topicCache ? m_topicCache->topic(topLevel) : QString(); return m_topicCache ? m_topicCache->topic(topLevel) : QString();

View File

@@ -34,6 +34,8 @@
#include "core_global.h" #include "core_global.h"
#include "id.h" #include "id.h"
#include <utils/fileutils.h>
#include <QDateTime> #include <QDateTime>
#include <QFlags> #include <QFlags>
#include <QHash> #include <QHash>
@@ -42,6 +44,8 @@
namespace Core { namespace Core {
class ShellCommand;
class CORE_EXPORT IVersionControl : public QObject class CORE_EXPORT IVersionControl : public QObject
{ {
Q_OBJECT Q_OBJECT
@@ -56,7 +60,8 @@ public:
AddOperation, DeleteOperation, MoveOperation, AddOperation, DeleteOperation, MoveOperation,
CreateRepositoryOperation, CreateRepositoryOperation,
SnapshotOperations, SnapshotOperations,
AnnotateOperation AnnotateOperation,
InitialCheckoutOperation
}; };
enum OpenSupportMode { enum OpenSupportMode {
@@ -194,6 +199,17 @@ public:
*/ */
virtual QStringList additionalToolsPath() const; 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: signals:
void repositoryChanged(const QString &repository); void repositoryChanged(const QString &repository);
void filesChanged(const QStringList &files); void filesChanged(const QStringList &files);

View File

@@ -35,8 +35,10 @@
#include "cvssettings.h" #include "cvssettings.h"
#include <vcsbase/vcsbaseconstants.h> #include <vcsbase/vcsbaseconstants.h>
#include <vcsbase/vcscommand.h>
#include <utils/fileutils.h> #include <utils/fileutils.h>
#include <utils/qtcassert.h>
#include <QFileInfo> #include <QFileInfo>
@@ -74,6 +76,7 @@ bool CvsControl::supportsOperation(Operation operation) const
case AddOperation: case AddOperation:
case DeleteOperation: case DeleteOperation:
case AnnotateOperation: case AnnotateOperation:
case InitialCheckoutOperation:
break; break;
case MoveOperation: case MoveOperation:
case CreateRepositoryOperation: case CreateRepositoryOperation:
@@ -132,6 +135,24 @@ QString CvsControl::vcsOpenText() const
return tr("&Edit"); 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 bool CvsControl::managesDirectory(const QString &directory, QString *topLevel) const
{ {
return m_plugin->managesDirectory(directory, topLevel); return m_plugin->managesDirectory(directory, topLevel);

View File

@@ -63,6 +63,11 @@ public:
QString vcsOpenText() const override; 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 emitRepositoryChanged(const QString &s);
void emitFilesChanged(const QStringList &l); void emitFilesChanged(const QStringList &l);

View File

@@ -33,8 +33,10 @@
#include "gitutils.h" #include "gitutils.h"
#include <vcsbase/vcsbaseconstants.h> #include <vcsbase/vcsbaseconstants.h>
#include <vcsbase/vcscommand.h>
#include <QFileInfo> #include <QFileInfo>
#include <QProcessEnvironment>
namespace Git { namespace Git {
namespace Internal { namespace Internal {
@@ -44,8 +46,7 @@ class GitTopicCache : public Core::IVersionControl::TopicCache
public: public:
GitTopicCache(GitClient *client) : GitTopicCache(GitClient *client) :
m_client(client) m_client(client)
{ { }
}
protected: protected:
QString trackFile(const QString &repository) override QString trackFile(const QString &repository) override
@@ -66,8 +67,7 @@ private:
GitVersionControl::GitVersionControl(GitClient *client) : GitVersionControl::GitVersionControl(GitClient *client) :
Core::IVersionControl(new GitTopicCache(client)), Core::IVersionControl(new GitTopicCache(client)),
m_client(client) m_client(client)
{ { }
}
QString GitVersionControl::displayName() const QString GitVersionControl::displayName() const
{ {
@@ -96,6 +96,7 @@ bool GitVersionControl::supportsOperation(Operation operation) const
case CreateRepositoryOperation: case CreateRepositoryOperation:
case SnapshotOperations: case SnapshotOperations:
case AnnotateOperation: case AnnotateOperation:
case InitialCheckoutOperation:
return true; return true;
} }
return false; return false;
@@ -139,6 +140,19 @@ QString GitVersionControl::vcsTopic(const QString &directory)
return topic; 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 GitVersionControl::additionalToolsPath() const
{ {
QStringList res = m_client->settings().searchPathList(); QStringList res = m_client->settings().searchPathList();

View File

@@ -62,6 +62,11 @@ public:
bool vcsAnnotate(const QString &file, int line) override; bool vcsAnnotate(const QString &file, int line) override;
QString vcsTopic(const QString &directory) 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; QStringList additionalToolsPath() const override;
void emitFilesChanged(const QStringList &); void emitFilesChanged(const QStringList &);

View File

@@ -33,12 +33,14 @@
#include <vcsbase/vcsbaseclientsettings.h> #include <vcsbase/vcsbaseclientsettings.h>
#include <vcsbase/vcsbaseconstants.h> #include <vcsbase/vcsbaseconstants.h>
#include <vcsbase/vcscommand.h>
#include <coreplugin/vcsmanager.h> #include <coreplugin/vcsmanager.h>
#include <utils/fileutils.h> #include <utils/fileutils.h>
#include <QFileInfo> #include <QFileInfo>
#include <QProcessEnvironment>
#include <QVariant> #include <QVariant>
#include <QStringList> #include <QStringList>
#include <QDir> #include <QDir>
@@ -114,6 +116,7 @@ bool MercurialControl::supportsOperation(Operation operation) const
case Core::IVersionControl::MoveOperation: case Core::IVersionControl::MoveOperation:
case Core::IVersionControl::CreateRepositoryOperation: case Core::IVersionControl::CreateRepositoryOperation:
case Core::IVersionControl::AnnotateOperation: case Core::IVersionControl::AnnotateOperation:
case Core::IVersionControl::InitialCheckoutOperation:
break; break;
case Core::IVersionControl::SnapshotOperations: case Core::IVersionControl::SnapshotOperations:
supported = false; supported = false;
@@ -161,6 +164,19 @@ bool MercurialControl::vcsAnnotate(const QString &file, int line)
return true; 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) bool MercurialControl::sccManaged(const QString &filename)
{ {
const QFileInfo fi(filename); const QFileInfo fi(filename);

View File

@@ -64,6 +64,11 @@ public:
bool vcsCreateRepository(const QString &directory) override; bool vcsCreateRepository(const QString &directory) override;
bool vcsAnnotate(const QString &file, int line) 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); bool sccManaged(const QString &filename);
public slots: public slots:

View File

@@ -76,6 +76,7 @@ bool PerforceVersionControl::supportsOperation(Operation operation) const
return supported; return supported;
case CreateRepositoryOperation: case CreateRepositoryOperation:
case SnapshotOperations: case SnapshotOperations:
case InitialCheckoutOperation:
break; break;
} }
return false; return false;

View File

@@ -31,10 +31,12 @@
#include "subversioncontrol.h" #include "subversioncontrol.h"
#include "subversionclient.h" #include "subversionclient.h"
#include "subversionconstants.h"
#include "subversionplugin.h" #include "subversionplugin.h"
#include "subversionsettings.h" #include "subversionsettings.h"
#include <vcsbase/vcsbaseconstants.h> #include <vcsbase/vcsbaseconstants.h>
#include <vcsbase/vcsbaseclientsettings.h>
#include <utils/fileutils.h> #include <utils/fileutils.h>
@@ -97,6 +99,7 @@ bool SubversionControl::supportsOperation(Operation operation) const
case DeleteOperation: case DeleteOperation:
case MoveOperation: case MoveOperation:
case AnnotateOperation: case AnnotateOperation:
case InitialCheckoutOperation:
break; break;
case CreateRepositoryOperation: case CreateRepositoryOperation:
case SnapshotOperations: case SnapshotOperations:
@@ -153,6 +156,24 @@ bool SubversionControl::vcsAnnotate(const QString &file, int line)
return true; 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) void SubversionControl::emitRepositoryChanged(const QString &s)
{ {
emit repositoryChanged(s); emit repositoryChanged(s);

View File

@@ -60,6 +60,11 @@ public:
bool vcsAnnotate(const QString &file, int line) 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;
void emitRepositoryChanged(const QString &); void emitRepositoryChanged(const QString &);
void emitFilesChanged(const QStringList &); void emitFilesChanged(const QStringList &);