vcsbase: overhaul *Arguments() methods in VCSBaseClient

Refactor how sub VCS clients redefine commands like diff, log, ...
This allows sensible code shrinks in Bazaar and Mercurial plugins

Change-Id: Ifeaf366c5c1c2eee776ce5d6bc748c3872e53f5a
Merge-request: 2201
Reviewed-by: Tobias Hunger <tobias.hunger@nokia.com>
Reviewed-on: http://codereview.qt.nokia.com/3403
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
This commit is contained in:
cerf
2011-08-23 10:38:44 +00:00
committed by Tobias Hunger
parent 31739dc0f7
commit eebe6681bc
7 changed files with 180 additions and 357 deletions

View File

@@ -92,6 +92,21 @@ BranchInfo BazaarClient::synchronousBranchQuery(const QString &repositoryRoot) c
return BranchInfo(repositoryRoot, false); return BranchInfo(repositoryRoot, false);
} }
void BazaarClient::commit(const QString &repositoryRoot, const QStringList &files,
const QString &commitMessageFile, const QStringList &extraOptions)
{
VCSBaseClient::commit(repositoryRoot, files, commitMessageFile,
QStringList(extraOptions) << QLatin1String("-F") << commitMessageFile);
}
void BazaarClient::annotate(const QString &workingDir, const QString &file,
const QString revision, int lineNumber,
const QStringList &extraOptions)
{
VCSBaseClient::annotate(workingDir, file, revision, lineNumber,
QStringList(extraOptions) << QLatin1String("--long"));
}
QString BazaarClient::findTopLevelForFile(const QFileInfo &file) const QString BazaarClient::findTopLevelForFile(const QFileInfo &file) const
{ {
const QString repositoryCheckFile = const QString repositoryCheckFile =
@@ -103,6 +118,13 @@ QString BazaarClient::findTopLevelForFile(const QFileInfo &file) const
repositoryCheckFile); repositoryCheckFile);
} }
void BazaarClient::view(const QString &source, const QString &id, const QStringList &extraOptions)
{
QStringList args(QLatin1String("log"));
args << QLatin1String("-p") << QLatin1String("-v") << extraOptions;
VCSBaseClient::view(source, id, args);
}
QString BazaarClient::vcsEditorKind(VCSCommand cmd) const QString BazaarClient::vcsEditorKind(VCSCommand cmd) const
{ {
switch(cmd) { switch(cmd) {
@@ -117,54 +139,7 @@ QString BazaarClient::vcsEditorKind(VCSCommand cmd) const
} }
} }
QStringList BazaarClient::cloneArguments(const QString &srcLocation, QStringList BazaarClient::revisionSpec(const QString &revision) const
const QString &dstLocation,
const QStringList &extraOptions) const
{
QStringList args(extraOptions);
args << srcLocation;
if (!dstLocation.isEmpty())
args << dstLocation;
return args;
}
QStringList BazaarClient::pullArguments(const QString &srcLocation,
const QStringList &extraOptions) const
{
QStringList args(extraOptions);
if (!srcLocation.isEmpty())
args << srcLocation;
return args;
}
QStringList BazaarClient::pushArguments(const QString &dstLocation,
const QStringList &extraOptions) const
{
QStringList args(extraOptions);
if (!dstLocation.isEmpty())
args << dstLocation;
return args;
}
QStringList BazaarClient::commitArguments(const QStringList &files,
const QString &commitMessageFile,
const QStringList &extraOptions) const
{
QStringList args(extraOptions);
args << QLatin1String("-F") << commitMessageFile;
args << files;
return args;
}
QStringList BazaarClient::importArguments(const QStringList &files) const
{
QStringList args;
if (!files.isEmpty())
args.append(files);
return args;
}
QStringList BazaarClient::updateArguments(const QString &revision) const
{ {
QStringList args; QStringList args;
if (!revision.isEmpty()) if (!revision.isEmpty())
@@ -172,67 +147,6 @@ QStringList BazaarClient::updateArguments(const QString &revision) const
return args; return args;
} }
QStringList BazaarClient::revertArguments(const QString &file,
const QString &revision) const
{
QStringList args;
if (!revision.isEmpty())
args << QLatin1String("-r") << revision;
if (!file.isEmpty())
args << file;
return args;
}
QStringList BazaarClient::revertAllArguments(const QString &revision) const
{
QStringList args;
if (!revision.isEmpty())
args << QLatin1String("-r") << revision;
return args;
}
QStringList BazaarClient::annotateArguments(const QString &file,
const QString &revision,
int lineNumber) const
{
Q_UNUSED(lineNumber);
QStringList args(QLatin1String("--long"));
if (!revision.isEmpty())
args << QLatin1String("-r") << revision;
return args << file;
}
QStringList BazaarClient::diffArguments(const QStringList &files,
const QStringList &extraOptions) const
{
QStringList args(extraOptions);
if (!files.isEmpty())
args.append(files);
return args;
}
QStringList BazaarClient::logArguments(const QStringList &files,
const QStringList &extraOptions) const
{
return diffArguments(files, extraOptions);
}
QStringList BazaarClient::statusArguments(const QString &file) const
{
QStringList args;
if (!file.isEmpty())
args.append(file);
return args;
}
QStringList BazaarClient::viewArguments(const QString &revision) const
{
QStringList args(QLatin1String("log"));
args << QLatin1String("-p") << QLatin1String("-v")
<< QLatin1String("-r") << revision;
return args;
}
BazaarClient::StatusItem BazaarClient::parseStatusLine(const QString &line) const BazaarClient::StatusItem BazaarClient::parseStatusLine(const QString &line) const
{ {
StatusItem item; StatusItem item;

View File

@@ -52,40 +52,24 @@ public:
bool synchronousSetUserId(); bool synchronousSetUserId();
BranchInfo synchronousBranchQuery(const QString &repositoryRoot) const; BranchInfo synchronousBranchQuery(const QString &repositoryRoot) const;
void commit(const QString &repositoryRoot, const QStringList &files,
const QString &commitMessageFile, const QStringList &extraOptions = QStringList());
void annotate(const QString &workingDir, const QString &file,
const QString revision = QString(), int lineNumber = -1,
const QStringList &extraOptions = QStringList());
void view(const QString &source, const QString &id,
const QStringList &extraOptions = QStringList());
QString findTopLevelForFile(const QFileInfo &file) const; QString findTopLevelForFile(const QFileInfo &file) const;
protected: protected:
QString vcsEditorKind(VCSCommand cmd) const; QString vcsEditorKind(VCSCommand cmd) const;
QStringList revisionSpec(const QString &revision) const;
QStringList cloneArguments(const QString &srcLocation,
const QString &dstLocation,
const QStringList &extraOptions) const;
QStringList pullArguments(const QString &srcLocation,
const QStringList &extraOptions) const;
QStringList pushArguments(const QString &dstLocation,
const QStringList &extraOptions) const;
QStringList commitArguments(const QStringList &files,
const QString &commitMessageFile,
const QStringList &extraOptions) const;
QStringList importArguments(const QStringList &files) const;
QStringList updateArguments(const QString &revision) const;
QStringList revertArguments(const QString &file, const QString &revision) const;
QStringList revertAllArguments(const QString &revision) const;
QStringList annotateArguments(const QString &file,
const QString &revision, int lineNumber) const;
QStringList diffArguments(const QStringList &files,
const QStringList &extraOptions) const;
VCSBase::VCSBaseEditorParameterWidget *createDiffEditor(const QString &workingDir, VCSBase::VCSBaseEditorParameterWidget *createDiffEditor(const QString &workingDir,
const QStringList &files, const QStringList &files,
const QStringList &extraOptions); const QStringList &extraOptions);
QStringList logArguments(const QStringList &files,
const QStringList &extraOptions) const;
VCSBase::VCSBaseEditorParameterWidget *createLogEditor(const QString &workingDir, VCSBase::VCSBaseEditorParameterWidget *createLogEditor(const QString &workingDir,
const QStringList &files, const QStringList &files,
const QStringList &extraOptions); const QStringList &extraOptions);
QStringList statusArguments(const QString &file) const;
QStringList viewArguments(const QString &revision) const;
StatusItem parseStatusLine(const QString &line) const; StatusItem parseStatusLine(const QString &line) const;
private: private:
friend class CloneWizard; friend class CloneWizard;

View File

@@ -112,7 +112,7 @@ QSharedPointer<VCSBase::AbstractCheckoutJob> CloneWizard::createJob(const QList<
extraOptions << QLatin1String("-r") << panel->revision(); extraOptions << QLatin1String("-r") << panel->revision();
const BazaarClient *client = BazaarPlugin::instance()->client(); const BazaarClient *client = BazaarPlugin::instance()->client();
args << client->vcsCommandString(BazaarClient::CloneCommand) args << client->vcsCommandString(BazaarClient::CloneCommand)
<< client->cloneArguments(page->repository(), page->directory(), extraOptions); << extraOptions << page->repository() << page->directory();
VCSBase::ProcessCheckoutJob *job = new VCSBase::ProcessCheckoutJob; VCSBase::ProcessCheckoutJob *job = new VCSBase::ProcessCheckoutJob;
job->addStep(settings.binary(), args, page->path()); job->addStep(settings.binary(), args, page->path());

View File

@@ -303,6 +303,54 @@ void MercurialClient::outgoing(const QString &repositoryRoot)
enqueueJob(job); enqueueJob(job);
} }
void MercurialClient::annotate(const QString &workingDir, const QString &file,
const QString revision, int lineNumber,
const QStringList &extraOptions)
{
QStringList args(extraOptions);
args << QLatin1String("-u") << QLatin1String("-c") << QLatin1String("-d");
VCSBaseClient::annotate(workingDir, file, revision, lineNumber, args);
}
void MercurialClient::commit(const QString &repositoryRoot, const QStringList &files,
const QString &commitMessageFile,
const QStringList &extraOptions)
{
QStringList args(extraOptions);
args << QLatin1String("--noninteractive") << QLatin1String("-l") << commitMessageFile;
VCSBaseClient::commit(repositoryRoot, files, commitMessageFile, args);
}
void MercurialClient::diff(const QString &workingDir, const QStringList &files,
const QStringList &extraOptions)
{
QStringList args(extraOptions);
args << QLatin1String("-g") << QLatin1String("-p") << QLatin1String("-U 8");
VCSBaseClient::diff(workingDir, files, args);
}
void MercurialClient::import(const QString &repositoryRoot, const QStringList &files,
const QStringList &extraOptions)
{
VCSBaseClient::import(repositoryRoot, files,
QStringList(extraOptions) << QLatin1String("--no-commit"));
}
void MercurialClient::revertAll(const QString &workingDir, const QString &revision,
const QStringList &extraOptions)
{
VCSBaseClient::revertAll(workingDir, revision,
QStringList(extraOptions) << QLatin1String("--all"));
}
void MercurialClient::view(const QString &source, const QString &id,
const QStringList &extraOptions)
{
QStringList args;
args << QLatin1String("log") << QLatin1String("-p") << QLatin1String("-g");
VCSBaseClient::view(source, id, args << extraOptions);
}
QString MercurialClient::findTopLevelForFile(const QFileInfo &file) const QString MercurialClient::findTopLevelForFile(const QFileInfo &file) const
{ {
const QString repositoryCheckFile = QLatin1String(Constants::MECURIALREPO) + QLatin1String("/requires"); const QString repositoryCheckFile = QLatin1String(Constants::MECURIALREPO) + QLatin1String("/requires");
@@ -323,60 +371,7 @@ QString MercurialClient::vcsEditorKind(VCSCommand cmd) const
return QLatin1String(""); return QLatin1String("");
} }
QStringList MercurialClient::cloneArguments(const QString &srcLocation, QStringList MercurialClient::revisionSpec(const QString &revision) const
const QString &dstLocation,
const QStringList &extraOptions) const
{
Q_UNUSED(srcLocation);
Q_UNUSED(dstLocation);
Q_UNUSED(extraOptions);
QStringList args;
return args;
}
QStringList MercurialClient::pullArguments(const QString &srcLocation,
const QStringList &extraOptions) const
{
Q_UNUSED(extraOptions);
QStringList args;
// Add arguments for common options
if (!srcLocation.isEmpty())
args << srcLocation;
return args;
}
QStringList MercurialClient::pushArguments(const QString &dstLocation,
const QStringList &extraOptions) const
{
Q_UNUSED(extraOptions);
QStringList args;
// Add arguments for common options
if (!dstLocation.isEmpty())
args << dstLocation;
return args;
}
QStringList MercurialClient::commitArguments(const QStringList &files,
const QString &commitMessageFile,
const QStringList &extraOptions) const
{
QStringList args(QLatin1String("--noninteractive"));
if (!args.isEmpty())
args.append(extraOptions);
args << QLatin1String("-l") << commitMessageFile;
args << files;
return args;
}
QStringList MercurialClient::importArguments(const QStringList &files) const
{
QStringList args(QLatin1String("--no-commit"));
if (!files.isEmpty())
args.append(files);
return args;
}
QStringList MercurialClient::updateArguments(const QString &revision) const
{ {
QStringList args; QStringList args;
if (!revision.isEmpty()) if (!revision.isEmpty())
@@ -384,74 +379,6 @@ QStringList MercurialClient::updateArguments(const QString &revision) const
return args; return args;
} }
QStringList MercurialClient::revertArguments(const QString &file,
const QString &revision) const
{
QStringList args;
if (!revision.isEmpty())
args << QLatin1String("-r") << revision;
if (!file.isEmpty())
args << file;
return args;
}
QStringList MercurialClient::revertAllArguments(const QString &revision) const
{
QStringList args;
if (!revision.isEmpty())
args << QLatin1String("-r") << revision;
return args << QLatin1String("--all");
}
QStringList MercurialClient::annotateArguments(const QString &file,
const QString &revision,
int /*lineNumber*/) const
{
QStringList args;
args << QLatin1String("-u") << QLatin1String("-c") << QLatin1String("-d");
if (!revision.isEmpty())
args << QLatin1String("-r") << revision;
return args << file;
}
QStringList MercurialClient::diffArguments(const QStringList &files,
const QStringList &extraOptions) const
{
QStringList args;
args << QLatin1String("-g") << QLatin1String("-p") << QLatin1String("-U 8");
if (!args.isEmpty())
args.append(extraOptions);
if (!files.isEmpty())
args.append(files);
return args;
}
QStringList MercurialClient::logArguments(const QStringList &files,
const QStringList &extraOptions) const
{
Q_UNUSED(extraOptions);
QStringList args;
if (!files.empty())
args.append(files);
return args;
}
QStringList MercurialClient::statusArguments(const QString &file) const
{
QStringList args;
if (!file.isEmpty())
args.append(file);
return args;
}
QStringList MercurialClient::viewArguments(const QString &revision) const
{
QStringList args;
args << QLatin1String("log") << QLatin1String("-p") << QLatin1String("-g")
<< QLatin1String("-r") << revision;
return args;
}
MercurialClient::StatusItem MercurialClient::parseStatusLine(const QString &line) const MercurialClient::StatusItem MercurialClient::parseStatusLine(const QString &line) const
{ {
StatusItem item; StatusItem item;

View File

@@ -68,38 +68,30 @@ public:
void outgoing(const QString &repositoryRoot); void outgoing(const QString &repositoryRoot);
QString vcsGetRepositoryURL(const QString &directory); QString vcsGetRepositoryURL(const QString &directory);
void annotate(const QString &workingDir, const QString &file,
const QString revision = QString(), int lineNumber = -1,
const QStringList &extraOptions = QStringList());
void commit(const QString &repositoryRoot, const QStringList &files,
const QString &commitMessageFile,
const QStringList &extraOptions = QStringList());
void diff(const QString &workingDir, const QStringList &files = QStringList(),
const QStringList &extraOptions = QStringList());
void import(const QString &repositoryRoot, const QStringList &files,
const QStringList &extraOptions = QStringList());
void revertAll(const QString &workingDir, const QString &revision = QString(),
const QStringList &extraOptions = QStringList());
void view(const QString &source, const QString &id,
const QStringList &extraOptions = QStringList());
public: public:
QString findTopLevelForFile(const QFileInfo &file) const; QString findTopLevelForFile(const QFileInfo &file) const;
protected: protected:
QString vcsEditorKind(VCSCommand cmd) const; QString vcsEditorKind(VCSCommand cmd) const;
QStringList revisionSpec(const QString &revision) const;
QStringList cloneArguments(const QString &srcLocation,
const QString &dstLocation,
const QStringList &extraOptions) const;
QStringList pullArguments(const QString &srcLocation,
const QStringList &extraOptions) const;
QStringList pushArguments(const QString &dstLocation,
const QStringList &extraOptions) const;
QStringList commitArguments(const QStringList &files,
const QString &commitMessageFile,
const QStringList &extraOptions) const;
QStringList importArguments(const QStringList &files) const;
QStringList updateArguments(const QString &revision) const;
QStringList revertArguments(const QString &file, const QString &revision) const;
QStringList revertAllArguments(const QString &revision) const;
QStringList annotateArguments(const QString &file,
const QString &revision, int lineNumber) const;
QStringList diffArguments(const QStringList &files,
const QStringList &extraOptions) const;
VCSBase::VCSBaseEditorParameterWidget *createDiffEditor(const QString &workingDir, VCSBase::VCSBaseEditorParameterWidget *createDiffEditor(const QString &workingDir,
const QStringList &files, const QStringList &files,
const QStringList &extraOptions); const QStringList &extraOptions);
QStringList logArguments(const QStringList &files,
const QStringList &extraOptions) const;
QStringList statusArguments(const QString &file) const;
QStringList viewArguments(const QString &revision) const;
StatusItem parseStatusLine(const QString &line) const; StatusItem parseStatusLine(const QString &line) const;
}; };

View File

@@ -155,9 +155,11 @@ VCSBaseClient::~VCSBaseClient()
} }
} }
bool VCSBaseClient::synchronousCreateRepository(const QString &workingDirectory) bool VCSBaseClient::synchronousCreateRepository(const QString &workingDirectory,
const QStringList &extraOptions)
{ {
const QStringList args(vcsCommandString(CreateRepositoryCommand)); QStringList args(vcsCommandString(CreateRepositoryCommand));
args << extraOptions;
QByteArray outputData; QByteArray outputData;
if (!vcsFullySynchronousExec(workingDirectory, args, &outputData)) if (!vcsFullySynchronousExec(workingDirectory, args, &outputData))
return false; return false;
@@ -174,32 +176,35 @@ bool VCSBaseClient::synchronousClone(const QString &workingDir,
{ {
QStringList args; QStringList args;
args << vcsCommandString(CloneCommand) args << vcsCommandString(CloneCommand)
<< cloneArguments(srcLocation, dstLocation, extraOptions); << extraOptions << srcLocation << dstLocation;
QByteArray stdOut; QByteArray stdOut;
return vcsFullySynchronousExec(workingDir, args, &stdOut); return vcsFullySynchronousExec(workingDir, args, &stdOut);
} }
bool VCSBaseClient::synchronousAdd(const QString &workingDir, const QString &filename) bool VCSBaseClient::synchronousAdd(const QString &workingDir, const QString &filename,
const QStringList &extraOptions)
{ {
QStringList args; QStringList args;
args << vcsCommandString(AddCommand) << filename; args << vcsCommandString(AddCommand) << extraOptions << filename;
QByteArray stdOut; QByteArray stdOut;
return vcsFullySynchronousExec(workingDir, args, &stdOut); return vcsFullySynchronousExec(workingDir, args, &stdOut);
} }
bool VCSBaseClient::synchronousRemove(const QString &workingDir, const QString &filename) bool VCSBaseClient::synchronousRemove(const QString &workingDir, const QString &filename,
const QStringList &extraOptions)
{ {
QStringList args; QStringList args;
args << vcsCommandString(RemoveCommand) << filename; args << vcsCommandString(RemoveCommand) << extraOptions << filename;
QByteArray stdOut; QByteArray stdOut;
return vcsFullySynchronousExec(workingDir, args, &stdOut); return vcsFullySynchronousExec(workingDir, args, &stdOut);
} }
bool VCSBaseClient::synchronousMove(const QString &workingDir, bool VCSBaseClient::synchronousMove(const QString &workingDir,
const QString &from, const QString &to) const QString &from, const QString &to,
const QStringList &extraOptions)
{ {
QStringList args; QStringList args;
args << vcsCommandString(MoveCommand) << from << to; args << vcsCommandString(MoveCommand) << extraOptions << from << to;
QByteArray stdOut; QByteArray stdOut;
return vcsFullySynchronousExec(workingDir, args, &stdOut); return vcsFullySynchronousExec(workingDir, args, &stdOut);
} }
@@ -209,7 +214,7 @@ bool VCSBaseClient::synchronousPull(const QString &workingDir,
const QStringList &extraOptions) const QStringList &extraOptions)
{ {
QStringList args; QStringList args;
args << vcsCommandString(PullCommand) << pullArguments(srcLocation, extraOptions); args << vcsCommandString(PullCommand) << extraOptions << srcLocation;
// Disable UNIX terminals to suppress SSH prompting // Disable UNIX terminals to suppress SSH prompting
const unsigned flags = const unsigned flags =
VCSBase::VCSBasePlugin::SshPasswordPrompt VCSBase::VCSBasePlugin::SshPasswordPrompt
@@ -227,7 +232,7 @@ bool VCSBaseClient::synchronousPush(const QString &workingDir,
const QStringList &extraOptions) const QStringList &extraOptions)
{ {
QStringList args; QStringList args;
args << vcsCommandString(PushCommand) << pushArguments(dstLocation, extraOptions); args << vcsCommandString(PushCommand) << extraOptions << dstLocation;
// Disable UNIX terminals to suppress SSH prompting // Disable UNIX terminals to suppress SSH prompting
const unsigned flags = const unsigned flags =
VCSBase::VCSBasePlugin::SshPasswordPrompt VCSBase::VCSBasePlugin::SshPasswordPrompt
@@ -289,12 +294,13 @@ Utils::SynchronousProcessResponse VCSBaseClient::vcsSynchronousExec(
void VCSBaseClient::annotate(const QString &workingDir, const QString &file, void VCSBaseClient::annotate(const QString &workingDir, const QString &file,
const QString revision /* = QString() */, const QString revision /* = QString() */,
int lineNumber /* = -1 */) int lineNumber /* = -1 */,
const QStringList &extraOptions)
{ {
Q_UNUSED(lineNumber) Q_UNUSED(lineNumber)
const QString vcsCmdString = vcsCommandString(AnnotateCommand); const QString vcsCmdString = vcsCommandString(AnnotateCommand);
QStringList args; QStringList args;
args << vcsCmdString << annotateArguments(file, revision, lineNumber); args << vcsCmdString << revisionSpec(revision) << extraOptions << file;
const QString kind = vcsEditorKind(AnnotateCommand); const QString kind = vcsEditorKind(AnnotateCommand);
const QString id = VCSBase::VCSBaseEditorWidget::getSource(workingDir, QStringList(file)); const QString id = VCSBase::VCSBaseEditorWidget::getSource(workingDir, QStringList(file));
const QString title = vcsEditorTitle(vcsCmdString, id); const QString title = vcsEditorTitle(vcsCmdString, id);
@@ -329,7 +335,7 @@ void VCSBaseClient::diff(const QString &workingDir, const QStringList &files,
QStringList args; QStringList args;
const QStringList paramArgs = paramWidget != 0 ? paramWidget->arguments() : QStringList(); const QStringList paramArgs = paramWidget != 0 ? paramWidget->arguments() : QStringList();
args << vcsCmdString << diffArguments(files, extraOptions + paramArgs); args << vcsCmdString << extraOptions << paramArgs << files;
QSharedPointer<VCSJob> job(new VCSJob(workingDir, args, editor)); QSharedPointer<VCSJob> job(new VCSJob(workingDir, args, editor));
enqueueJob(job); enqueueJob(job);
} }
@@ -354,17 +360,18 @@ void VCSBaseClient::log(const QString &workingDir, const QStringList &files,
QStringList args; QStringList args;
const QStringList paramArgs = paramWidget != 0 ? paramWidget->arguments() : QStringList(); const QStringList paramArgs = paramWidget != 0 ? paramWidget->arguments() : QStringList();
args << vcsCmdString << logArguments(files, extraOptions + paramArgs); args << vcsCmdString << extraOptions << paramArgs << files;
QSharedPointer<VCSJob> job(new VCSJob(workingDir, args, editor)); QSharedPointer<VCSJob> job(new VCSJob(workingDir, args, editor));
enqueueJob(job); enqueueJob(job);
} }
void VCSBaseClient::revertFile(const QString &workingDir, void VCSBaseClient::revertFile(const QString &workingDir,
const QString &file, const QString &file,
const QString &revision) const QString &revision,
const QStringList &extraOptions)
{ {
QStringList args(vcsCommandString(RevertCommand)); QStringList args(vcsCommandString(RevertCommand));
args << revertArguments(file, revision); args << revisionSpec(revision) << extraOptions << file;
// Indicate repository change or file list // Indicate repository change or file list
QSharedPointer<VCSJob> job(new VCSJob(workingDir, args)); QSharedPointer<VCSJob> job(new VCSJob(workingDir, args));
job->setCookie(QStringList(workingDir + QLatin1Char('/') + file)); job->setCookie(QStringList(workingDir + QLatin1Char('/') + file));
@@ -373,10 +380,11 @@ void VCSBaseClient::revertFile(const QString &workingDir,
enqueueJob(job); enqueueJob(job);
} }
void VCSBaseClient::revertAll(const QString &workingDir, const QString &revision) void VCSBaseClient::revertAll(const QString &workingDir, const QString &revision,
const QStringList &extraOptions)
{ {
QStringList args(vcsCommandString(RevertCommand)); QStringList args(vcsCommandString(RevertCommand));
args << revertAllArguments(revision); args << revisionSpec(revision) << extraOptions;
// Indicate repository change or file list // Indicate repository change or file list
QSharedPointer<VCSJob> job(new VCSJob(workingDir, args)); QSharedPointer<VCSJob> job(new VCSJob(workingDir, args));
connect(job.data(), SIGNAL(succeeded(QVariant)), connect(job.data(), SIGNAL(succeeded(QVariant)),
@@ -384,10 +392,11 @@ void VCSBaseClient::revertAll(const QString &workingDir, const QString &revision
enqueueJob(job); enqueueJob(job);
} }
void VCSBaseClient::status(const QString &workingDir, const QString &file) void VCSBaseClient::status(const QString &workingDir, const QString &file,
const QStringList &extraOptions)
{ {
QStringList args(vcsCommandString(StatusCommand)); QStringList args(vcsCommandString(StatusCommand));
args << statusArguments(file); args << extraOptions << file;
VCSBase::VCSBaseOutputWindow *outwin = VCSBase::VCSBaseOutputWindow::instance(); VCSBase::VCSBaseOutputWindow *outwin = VCSBase::VCSBaseOutputWindow::instance();
outwin->setRepository(workingDir); outwin->setRepository(workingDir);
QSharedPointer<VCSJob> job(new VCSJob(workingDir, args)); QSharedPointer<VCSJob> job(new VCSJob(workingDir, args));
@@ -427,17 +436,20 @@ QString VCSBaseClient::vcsCommandString(VCSCommand cmd) const
return QString(); return QString();
} }
void VCSBaseClient::import(const QString &repositoryRoot, const QStringList &files) void VCSBaseClient::import(const QString &repositoryRoot, const QStringList &files,
const QStringList &extraOptions)
{ {
QStringList args(vcsCommandString(ImportCommand)); QStringList args(vcsCommandString(ImportCommand));
args << importArguments(files); args << extraOptions << files;
QSharedPointer<VCSJob> job(new VCSJob(repositoryRoot, args)); QSharedPointer<VCSJob> job(new VCSJob(repositoryRoot, args));
enqueueJob(job); enqueueJob(job);
} }
void VCSBaseClient::view(const QString &source, const QString &id) void VCSBaseClient::view(const QString &source, const QString &id,
const QStringList &extraOptions)
{ {
QStringList args(viewArguments(id)); QStringList args;
args << extraOptions << revisionSpec(id);
const QString kind = vcsEditorKind(DiffCommand); const QString kind = vcsEditorKind(DiffCommand);
const QString title = vcsEditorTitle(vcsCommandString(LogCommand), id); const QString title = vcsEditorTitle(vcsCommandString(LogCommand), id);
@@ -450,11 +462,11 @@ void VCSBaseClient::view(const QString &source, const QString &id)
enqueueJob(job); enqueueJob(job);
} }
void VCSBaseClient::update(const QString &repositoryRoot, const QString &revision) void VCSBaseClient::update(const QString &repositoryRoot, const QString &revision,
const QStringList &extraOptions)
{ {
QStringList args(vcsCommandString(UpdateCommand)); QStringList args(vcsCommandString(UpdateCommand));
args.append(updateArguments(revision)); args << revisionSpec(revision) << extraOptions;
QSharedPointer<VCSJob> job(new VCSJob(repositoryRoot, args)); QSharedPointer<VCSJob> job(new VCSJob(repositoryRoot, args));
job->setCookie(repositoryRoot); job->setCookie(repositoryRoot);
// Suppress SSH prompting // Suppress SSH prompting
@@ -468,8 +480,17 @@ void VCSBaseClient::commit(const QString &repositoryRoot,
const QString &commitMessageFile, const QString &commitMessageFile,
const QStringList &extraOptions) const QStringList &extraOptions)
{ {
// Handling of commitMessageFile is a bit tricky :
// VCSBaseClient cannot do something with it because it doesn't know which
// option to use (-F ? but sub VCS clients might require a different option
// name like -l for hg ...)
//
// So descendants of VCSBaseClient *must* redefine commit() and extend
// extraOptions with the usage for commitMessageFile (see BazaarClient::commit()
// for example)
Q_UNUSED(commitMessageFile);
QStringList args(vcsCommandString(CommitCommand)); QStringList args(vcsCommandString(CommitCommand));
args.append(commitArguments(files, commitMessageFile, extraOptions)); args << extraOptions << files;
QSharedPointer<VCSJob> job(new VCSJob(repositoryRoot, args)); QSharedPointer<VCSJob> job(new VCSJob(repositoryRoot, args));
enqueueJob(job); enqueueJob(job);
} }

View File

@@ -47,10 +47,6 @@ class QFileInfo;
class QVariant; class QVariant;
QT_END_NAMESPACE QT_END_NAMESPACE
namespace Core {
class ICore;
}
namespace Utils { namespace Utils {
struct SynchronousProcessResponse; struct SynchronousProcessResponse;
} }
@@ -77,37 +73,47 @@ public:
explicit VCSBaseClient(VCSBaseClientSettings *settings); explicit VCSBaseClient(VCSBaseClientSettings *settings);
~VCSBaseClient(); ~VCSBaseClient();
virtual bool synchronousCreateRepository(const QString &workingDir); virtual bool synchronousCreateRepository(const QString &workingDir,
const QStringList &extraOptions = QStringList());
virtual bool synchronousClone(const QString &workingDir, virtual bool synchronousClone(const QString &workingDir,
const QString &srcLocation, const QString &srcLocation,
const QString &dstLocation, const QString &dstLocation,
const QStringList &extraOptions = QStringList()); const QStringList &extraOptions = QStringList());
virtual bool synchronousAdd(const QString &workingDir, const QString &fileName); virtual bool synchronousAdd(const QString &workingDir, const QString &fileName,
virtual bool synchronousRemove(const QString &workingDir, const QString &fileName); const QStringList &extraOptions = QStringList());
virtual bool synchronousRemove(const QString &workingDir, const QString &fileName,
const QStringList &extraOptions = QStringList());
virtual bool synchronousMove(const QString &workingDir, virtual bool synchronousMove(const QString &workingDir,
const QString &from, const QString &to); const QString &from, const QString &to,
const QStringList &extraOptions = QStringList());
virtual bool synchronousPull(const QString &workingDir, virtual bool synchronousPull(const QString &workingDir,
const QString &srcLocation, const QString &srcLocation,
const QStringList &extraOptions = QStringList()); const QStringList &extraOptions = QStringList());
virtual bool synchronousPush(const QString &workingDir, virtual bool synchronousPush(const QString &workingDir,
const QString &dstLocation, const QString &dstLocation,
const QStringList &extraOptions = QStringList()); const QStringList &extraOptions = QStringList());
void annotate(const QString &workingDir, const QString &file, virtual void annotate(const QString &workingDir, const QString &file,
const QString revision = QString(), int lineNumber = -1); const QString revision = QString(), int lineNumber = -1,
void diff(const QString &workingDir, const QStringList &files = QStringList(),
const QStringList &extraOptions = QStringList()); const QStringList &extraOptions = QStringList());
void log(const QString &workingDir, const QStringList &files = QStringList(), virtual void diff(const QString &workingDir, const QStringList &files = QStringList(),
const QStringList &extraOptions = QStringList());
virtual void log(const QString &workingDir, const QStringList &files = QStringList(),
const QStringList &extraOptions = QStringList(), const QStringList &extraOptions = QStringList(),
bool enableAnnotationContextMenu = false); bool enableAnnotationContextMenu = false);
void status(const QString &workingDir, const QString &file = QString()); virtual void status(const QString &workingDir, const QString &file = QString(),
const QStringList &extraOptions = QStringList());
virtual void emitParsedStatus(const QString &repository, virtual void emitParsedStatus(const QString &repository,
const QStringList &extraOptions = QStringList()); const QStringList &extraOptions = QStringList());
void revertFile(const QString &workingDir, const QString &file, const QString &revision = QString()); virtual void revertFile(const QString &workingDir, const QString &file,
void revertAll(const QString &workingDir, const QString &revision = QString()); const QString &revision = QString(),
void import(const QString &repositoryRoot, const QStringList &files); const QStringList &extraOptions = QStringList());
void update(const QString &repositoryRoot, const QString &revision = QString()); virtual void revertAll(const QString &workingDir, const QString &revision = QString(),
void commit(const QString &repositoryRoot, const QStringList &extraOptions = QStringList());
const QStringList &files, virtual void import(const QString &repositoryRoot, const QStringList &files,
const QStringList &extraOptions = QStringList());
virtual void update(const QString &repositoryRoot, const QString &revision = QString(),
const QStringList &extraOptions = QStringList());
virtual void commit(const QString &repositoryRoot, const QStringList &files,
const QString &commitMessageFile, const QString &commitMessageFile,
const QStringList &extraOptions = QStringList()); const QStringList &extraOptions = QStringList());
@@ -121,7 +127,8 @@ signals:
void changed(const QVariant &v); void changed(const QVariant &v);
public slots: public slots:
void view(const QString &source, const QString &id); virtual void view(const QString &source, const QString &id,
const QStringList &extraOptions = QStringList());
void handleSettingsChanged(); void handleSettingsChanged();
protected: protected:
@@ -146,35 +153,13 @@ protected:
virtual QString vcsCommandString(VCSCommand cmd) const; virtual QString vcsCommandString(VCSCommand cmd) const;
virtual QString vcsEditorKind(VCSCommand cmd) const = 0; virtual QString vcsEditorKind(VCSCommand cmd) const = 0;
virtual QStringList cloneArguments(const QString &srcLocation, virtual QStringList revisionSpec(const QString &revision) const = 0;
const QString &dstLocation,
const QStringList &extraOptions) const = 0;
virtual QStringList pullArguments(const QString &srcLocation,
const QStringList &extraOptions) const = 0;
virtual QStringList pushArguments(const QString &dstLocation,
const QStringList &extraOptions) const = 0;
virtual QStringList commitArguments(const QStringList &files,
const QString &commitMessageFile,
const QStringList &extraOptions) const = 0;
virtual QStringList importArguments(const QStringList &files) const = 0;
virtual QStringList updateArguments(const QString &revision) const = 0;
virtual QStringList revertArguments(const QString &file, const QString &revision) const = 0;
virtual QStringList revertAllArguments(const QString &revision) const = 0;
virtual QStringList annotateArguments(const QString &file,
const QString &revision, int lineNumber) const = 0;
virtual QStringList diffArguments(const QStringList &files,
const QStringList &extraOptions) const = 0;
virtual VCSBaseEditorParameterWidget *createDiffEditor(const QString &workingDir, virtual VCSBaseEditorParameterWidget *createDiffEditor(const QString &workingDir,
const QStringList &files, const QStringList &files,
const QStringList &extraOptions); const QStringList &extraOptions);
virtual QStringList logArguments(const QStringList &files,
const QStringList &extraOptions) const = 0;
virtual VCSBaseEditorParameterWidget *createLogEditor(const QString &workingDir, virtual VCSBaseEditorParameterWidget *createLogEditor(const QString &workingDir,
const QStringList &files, const QStringList &files,
const QStringList &extraOptions); const QStringList &extraOptions);
virtual QStringList statusArguments(const QString &file) const = 0;
virtual QStringList viewArguments(const QString &revision) const = 0;
virtual StatusItem parseStatusLine(const QString &line) const = 0; virtual StatusItem parseStatusLine(const QString &line) const = 0;
QString vcsEditorTitle(const QString &vcsCmd, const QString &sourceId) const; QString vcsEditorTitle(const QString &vcsCmd, const QString &sourceId) const;