Vcs: Use setters to set up DiffController parameters

Plan is to avoid client use down there, so extract the actually
used data first and pass it down.

Change-Id: I088fc9cc3086e8f6e1e0c3c9d3a35445f752e6f0
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
hjk
2020-02-04 08:11:50 +01:00
parent 8f88b89d81
commit c17767c78e
7 changed files with 120 additions and 128 deletions

View File

@@ -268,7 +268,7 @@ class GitDiffEditorController : public VcsBaseDiffEditorController
Q_OBJECT Q_OBJECT
public: public:
GitDiffEditorController(IDocument *document, const QString &workingDirectory); explicit GitDiffEditorController(IDocument *document);
protected: protected:
void runCommand(const QList<QStringList> &args, QTextCodec *codec = nullptr); void runCommand(const QList<QStringList> &args, QTextCodec *codec = nullptr);
@@ -283,8 +283,8 @@ private:
DescriptionWidgetDecorator m_decorator; DescriptionWidgetDecorator m_decorator;
}; };
GitDiffEditorController::GitDiffEditorController(IDocument *document, const QString &workingDirectory) : GitDiffEditorController::GitDiffEditorController(IDocument *document) :
VcsBaseDiffEditorController(document, GitPluginPrivate::client(), workingDirectory), VcsBaseDiffEditorController(document),
m_watcher(this), m_watcher(this),
m_decorator(&m_watcher) m_decorator(&m_watcher)
{ {
@@ -385,8 +385,8 @@ class RepositoryDiffController : public GitDiffEditorController
{ {
Q_OBJECT Q_OBJECT
public: public:
RepositoryDiffController(IDocument *document, const QString &dir) : explicit RepositoryDiffController(IDocument *document) :
GitDiffEditorController(document, dir) GitDiffEditorController(document)
{ } { }
void reload() override; void reload() override;
@@ -403,8 +403,8 @@ class FileDiffController : public GitDiffEditorController
{ {
Q_OBJECT Q_OBJECT
public: public:
FileDiffController(IDocument *document, const QString &dir, const QString &fileName) : FileDiffController(IDocument *document, const QString &fileName) :
GitDiffEditorController(document, dir), GitDiffEditorController(document),
m_fileName(fileName) m_fileName(fileName)
{ } { }
@@ -427,9 +427,9 @@ class FileListDiffController : public GitDiffEditorController
{ {
Q_OBJECT Q_OBJECT
public: public:
FileListDiffController(IDocument *document, const QString &dir, FileListDiffController(IDocument *document,
const QStringList &stagedFiles, const QStringList &unstagedFiles) : const QStringList &stagedFiles, const QStringList &unstagedFiles) :
GitDiffEditorController(document, dir), GitDiffEditorController(document),
m_stagedFiles(stagedFiles), m_stagedFiles(stagedFiles),
m_unstagedFiles(unstagedFiles) m_unstagedFiles(unstagedFiles)
{ } { }
@@ -464,9 +464,8 @@ class ProjectDiffController : public GitDiffEditorController
{ {
Q_OBJECT Q_OBJECT
public: public:
ProjectDiffController(IDocument *document, const QString &dir, ProjectDiffController(IDocument *document, const QStringList &projectPaths) :
const QStringList &projectPaths) : GitDiffEditorController(document),
GitDiffEditorController(document, dir),
m_projectPaths(projectPaths) m_projectPaths(projectPaths)
{ } { }
@@ -487,9 +486,8 @@ class BranchDiffController : public GitDiffEditorController
{ {
Q_OBJECT Q_OBJECT
public: public:
BranchDiffController(IDocument *document, const QString &dir, BranchDiffController(IDocument *document, const QString &branch) :
const QString &branch) : GitDiffEditorController(document),
GitDiffEditorController(document, dir),
m_branch(branch) m_branch(branch)
{ } { }
@@ -510,8 +508,8 @@ class ShowController : public GitDiffEditorController
{ {
Q_OBJECT Q_OBJECT
public: public:
ShowController(IDocument *document, const QString &dir, const QString &id) : ShowController(IDocument *document, const QString &id) :
GitDiffEditorController(document, dir), GitDiffEditorController(document),
m_id(id), m_id(id),
m_state(Idle) m_state(Idle)
{ {
@@ -940,16 +938,20 @@ void GitClient::stage(DiffEditor::DiffEditorController *diffController,
} }
void GitClient::requestReload(const QString &documentId, const QString &source, void GitClient::requestReload(const QString &documentId, const QString &source,
const QString &title, const QString &title, const QString &workingDirectory,
std::function<DiffEditorController *(IDocument *)> factory) const std::function<VcsBaseDiffEditorController *(IDocument *)> factory) const
{ {
// Creating document might change the referenced source. Store a copy and use it. // Creating document might change the referenced source. Store a copy and use it.
const QString sourceCopy = source; const QString sourceCopy = source;
IDocument *document = DiffEditorController::findOrCreateDocument(documentId, title); IDocument *document = DiffEditorController::findOrCreateDocument(documentId, title);
QTC_ASSERT(document, return); QTC_ASSERT(document, return);
DiffEditorController *controller = factory(document); VcsBaseDiffEditorController *controller = factory(document);
QTC_ASSERT(controller, return); QTC_ASSERT(controller, return);
controller->setVcsBinary(settings().binaryPath());
controller->setVcsTimeoutS(settings().vcsTimeoutS());
controller->setProcessEnvironment(processEnvironment());
controller->setWorkingDirectory(workingDirectory);
connect(controller, &DiffEditorController::chunkActionsRequested, connect(controller, &DiffEditorController::chunkActionsRequested,
this, &GitClient::chunkActionsRequested, Qt::DirectConnection); this, &GitClient::chunkActionsRequested, Qt::DirectConnection);
@@ -966,11 +968,9 @@ void GitClient::diffFiles(const QString &workingDirectory,
const QString documentId = QLatin1String(Constants::GIT_PLUGIN) const QString documentId = QLatin1String(Constants::GIT_PLUGIN)
+ QLatin1String(".DiffFiles.") + workingDirectory; + QLatin1String(".DiffFiles.") + workingDirectory;
requestReload(documentId, requestReload(documentId,
workingDirectory, tr("Git Diff Files"), workingDirectory, tr("Git Diff Files"), workingDirectory,
[workingDirectory, stagedFileNames, unstagedFileNames] [stagedFileNames, unstagedFileNames](IDocument *doc) {
(IDocument *doc) -> DiffEditorController* { return new FileListDiffController(doc, stagedFileNames, unstagedFileNames);
return new FileListDiffController(doc, workingDirectory,
stagedFileNames, unstagedFileNames);
}); });
} }
@@ -979,10 +979,9 @@ void GitClient::diffProject(const QString &workingDirectory, const QString &proj
const QString documentId = QLatin1String(Constants::GIT_PLUGIN) const QString documentId = QLatin1String(Constants::GIT_PLUGIN)
+ QLatin1String(".DiffProject.") + workingDirectory; + QLatin1String(".DiffProject.") + workingDirectory;
requestReload(documentId, requestReload(documentId,
workingDirectory, tr("Git Diff Project"), workingDirectory, tr("Git Diff Project"), workingDirectory,
[workingDirectory, projectDirectory] [projectDirectory](IDocument *doc){
(IDocument *doc) -> DiffEditorController* { return new ProjectDiffController(doc, {projectDirectory});
return new ProjectDiffController(doc, workingDirectory, {projectDirectory});
}); });
} }
@@ -991,10 +990,8 @@ void GitClient::diffRepository(const QString &workingDirectory)
const QString documentId = QLatin1String(Constants::GIT_PLUGIN) const QString documentId = QLatin1String(Constants::GIT_PLUGIN)
+ QLatin1String(".DiffRepository.") + workingDirectory; + QLatin1String(".DiffRepository.") + workingDirectory;
requestReload(documentId, requestReload(documentId,
workingDirectory, tr("Git Diff Repository"), workingDirectory, tr("Git Diff Repository"), workingDirectory,
[workingDirectory](IDocument *doc) -> DiffEditorController* { [](IDocument *doc) { return new RepositoryDiffController(doc); });
return new RepositoryDiffController(doc, workingDirectory);
});
} }
void GitClient::diffFile(const QString &workingDirectory, const QString &fileName) const void GitClient::diffFile(const QString &workingDirectory, const QString &fileName) const
@@ -1003,24 +1000,17 @@ void GitClient::diffFile(const QString &workingDirectory, const QString &fileNam
const QString sourceFile = VcsBaseEditor::getSource(workingDirectory, fileName); const QString sourceFile = VcsBaseEditor::getSource(workingDirectory, fileName);
const QString documentId = QLatin1String(Constants::GIT_PLUGIN) const QString documentId = QLatin1String(Constants::GIT_PLUGIN)
+ QLatin1String(".DifFile.") + sourceFile; + QLatin1String(".DifFile.") + sourceFile;
requestReload(documentId, sourceFile, title, requestReload(documentId, sourceFile, title, workingDirectory,
[workingDirectory, fileName] [fileName](IDocument *doc) { return new FileDiffController(doc, fileName); });
(IDocument *doc) -> DiffEditorController* {
return new FileDiffController(doc, workingDirectory, fileName);
});
} }
void GitClient::diffBranch(const QString &workingDirectory, void GitClient::diffBranch(const QString &workingDirectory, const QString &branchName) const
const QString &branchName) const
{ {
const QString title = tr("Git Diff Branch \"%1\"").arg(branchName); const QString title = tr("Git Diff Branch \"%1\"").arg(branchName);
const QString documentId = QLatin1String(Constants::GIT_PLUGIN) const QString documentId = QLatin1String(Constants::GIT_PLUGIN)
+ QLatin1String(".DiffBranch.") + branchName; + QLatin1String(".DiffBranch.") + branchName;
requestReload(documentId, workingDirectory, title, requestReload(documentId, workingDirectory, title, workingDirectory,
[workingDirectory, branchName] [branchName](IDocument *doc) { return new BranchDiffController(doc, branchName); });
(IDocument *doc) -> DiffEditorController* {
return new BranchDiffController(doc, workingDirectory, branchName);
});
} }
void GitClient::merge(const QString &workingDirectory, void GitClient::merge(const QString &workingDirectory,
@@ -1123,11 +1113,8 @@ void GitClient::show(const QString &source, const QString &id, const QString &na
workingDirectory = repoDirectory; workingDirectory = repoDirectory;
const QString documentId = QLatin1String(Constants::GIT_PLUGIN) const QString documentId = QLatin1String(Constants::GIT_PLUGIN)
+ QLatin1String(".Show.") + id; + QLatin1String(".Show.") + id;
requestReload(documentId, source, title, requestReload(documentId, source, title, workingDirectory,
[workingDirectory, id] [id](IDocument *doc) { return new ShowController(doc, id); });
(IDocument *doc) -> DiffEditorController* {
return new ShowController(doc, workingDirectory, id);
});
} }
void GitClient::archive(const QString &workingDirectory, QString commit) void GitClient::archive(const QString &workingDirectory, QString commit)

View File

@@ -50,6 +50,7 @@ namespace Core { class ICore; }
namespace VcsBase { namespace VcsBase {
class VcsCommand; class VcsCommand;
class SubmitFileModel; class SubmitFileModel;
class VcsBaseDiffEditorController;
class VcsBaseEditorWidget; class VcsBaseEditorWidget;
} }
@@ -361,8 +362,8 @@ private:
enum CodecType { CodecSource, CodecLogOutput, CodecNone }; enum CodecType { CodecSource, CodecLogOutput, CodecNone };
QTextCodec *codecFor(CodecType codecType, const QString &source = QString()) const; QTextCodec *codecFor(CodecType codecType, const QString &source = QString()) const;
void requestReload(const QString &documentId, const QString &source, const QString &title, void requestReload(const QString &documentId, const QString &source, const QString &title, const QString &workingDirectory,
std::function<DiffEditor::DiffEditorController *(Core::IDocument *)> factory) const; std::function<VcsBase::VcsBaseDiffEditorController *(Core::IDocument *)> factory) const;
// determine version as '(major << 16) + (minor << 8) + patch' or 0. // determine version as '(major << 16) + (minor << 8) + patch' or 0.
unsigned synchronousGitVersion(QString *errorMessage = nullptr) const; unsigned synchronousGitVersion(QString *errorMessage = nullptr) const;

View File

@@ -58,19 +58,17 @@ namespace Internal {
class MercurialDiffEditorController : public VcsBaseDiffEditorController class MercurialDiffEditorController : public VcsBaseDiffEditorController
{ {
public: public:
MercurialDiffEditorController(IDocument *document, VcsBaseClientImpl *client, const QString &workingDirectory); MercurialDiffEditorController(IDocument *document)
: VcsBaseDiffEditorController(document)
{
setDisplayName("Hg Diff");
}
protected: protected:
void runCommand(const QList<QStringList> &args, QTextCodec *codec = nullptr); void runCommand(const QList<QStringList> &args, QTextCodec *codec = nullptr);
QStringList addConfigurationArguments(const QStringList &args) const; QStringList addConfigurationArguments(const QStringList &args) const;
}; };
MercurialDiffEditorController::MercurialDiffEditorController(IDocument *document, VcsBaseClientImpl *client, const QString &workingDirectory):
VcsBaseDiffEditorController(document, client, workingDirectory)
{
setDisplayName("Hg Diff");
}
void MercurialDiffEditorController::runCommand(const QList<QStringList> &args, QTextCodec *codec) void MercurialDiffEditorController::runCommand(const QList<QStringList> &args, QTextCodec *codec)
{ {
// at this moment, don't ignore any errors // at this moment, don't ignore any errors
@@ -90,8 +88,8 @@ QStringList MercurialDiffEditorController::addConfigurationArguments(const QStri
class FileDiffController : public MercurialDiffEditorController class FileDiffController : public MercurialDiffEditorController
{ {
public: public:
FileDiffController(IDocument *document, VcsBaseClient *client, const QString &dir, const QString &fileName) : FileDiffController(IDocument *document, const QString &fileName) :
MercurialDiffEditorController(document, client, dir), MercurialDiffEditorController(document),
m_fileName(fileName) m_fileName(fileName)
{ } { }
@@ -108,8 +106,8 @@ private:
class FileListDiffController : public MercurialDiffEditorController class FileListDiffController : public MercurialDiffEditorController
{ {
public: public:
FileListDiffController(IDocument *document, VcsBaseClient *client, const QString &dir, const QStringList &fileNames) : FileListDiffController(IDocument *document, const QStringList &fileNames) :
MercurialDiffEditorController(document, client, dir), MercurialDiffEditorController(document),
m_fileNames(fileNames) m_fileNames(fileNames)
{ } { }
@@ -128,8 +126,8 @@ private:
class RepositoryDiffController : public MercurialDiffEditorController class RepositoryDiffController : public MercurialDiffEditorController
{ {
public: public:
RepositoryDiffController(IDocument *document, VcsBaseClient *client, const QString &dir) : RepositoryDiffController(IDocument *document) :
MercurialDiffEditorController(document, client, dir) MercurialDiffEditorController(document)
{ } { }
void reload() override void reload() override
@@ -400,29 +398,23 @@ void MercurialClient::diff(const QString &workingDir, const QStringList &files,
const QString sourceFile = VcsBaseEditor::getSource(workingDir, fileName); const QString sourceFile = VcsBaseEditor::getSource(workingDir, fileName);
const QString documentId = QString(Constants::MERCURIAL_PLUGIN) const QString documentId = QString(Constants::MERCURIAL_PLUGIN)
+ ".DiffRepo." + sourceFile; + ".DiffRepo." + sourceFile;
requestReload(documentId, sourceFile, title, requestReload(documentId, sourceFile, title, workingDir,
[this, workingDir](IDocument *doc) { [](IDocument *doc) { return new RepositoryDiffController(doc); });
return new RepositoryDiffController(doc, this, workingDir);
});
} else if (files.size() == 1) { } else if (files.size() == 1) {
fileName = files.at(0); fileName = files.at(0);
const QString title = tr("Mercurial Diff \"%1\"").arg(fileName); const QString title = tr("Mercurial Diff \"%1\"").arg(fileName);
const QString sourceFile = VcsBaseEditor::getSource(workingDir, fileName); const QString sourceFile = VcsBaseEditor::getSource(workingDir, fileName);
const QString documentId = QString(Constants::MERCURIAL_PLUGIN) const QString documentId = QString(Constants::MERCURIAL_PLUGIN)
+ ".DiffFile." + sourceFile; + ".DiffFile." + sourceFile;
requestReload(documentId, sourceFile, title, requestReload(documentId, sourceFile, title, workingDir,
[this, workingDir, fileName](IDocument *doc) { [fileName](IDocument *doc) { return new FileDiffController(doc, fileName); });
return new FileDiffController(doc, this, workingDir, fileName);
});
} else { } else {
const QString title = tr("Mercurial Diff \"%1\"").arg(workingDir); const QString title = tr("Mercurial Diff \"%1\"").arg(workingDir);
const QString sourceFile = VcsBaseEditor::getSource(workingDir, fileName); const QString sourceFile = VcsBaseEditor::getSource(workingDir, fileName);
const QString documentId = QString(Constants::MERCURIAL_PLUGIN) const QString documentId = QString(Constants::MERCURIAL_PLUGIN)
+ ".DiffFile." + workingDir; + ".DiffFile." + workingDir;
requestReload(documentId, sourceFile, title, requestReload(documentId, sourceFile, title, workingDir,
[this, workingDir, files](IDocument *doc) { [files](IDocument *doc) { return new FileListDiffController(doc, files); });
return new FileListDiffController(doc, this, workingDir, files);
});
} }
} }
@@ -511,15 +503,20 @@ MercurialClient::StatusItem MercurialClient::parseStatusLine(const QString &line
} }
void MercurialClient::requestReload(const QString &documentId, const QString &source, const QString &title, void MercurialClient::requestReload(const QString &documentId, const QString &source, const QString &title,
std::function<DiffEditor::DiffEditorController *(Core::IDocument *)> factory) const const QString &workingDirectory,
std::function<VcsBaseDiffEditorController *(Core::IDocument *)> factory)
{ {
// Creating document might change the referenced source. Store a copy and use it. // Creating document might change the referenced source. Store a copy and use it.
const QString sourceCopy = source; const QString sourceCopy = source;
IDocument *document = DiffEditorController::findOrCreateDocument(documentId, title); IDocument *document = DiffEditorController::findOrCreateDocument(documentId, title);
QTC_ASSERT(document, return); QTC_ASSERT(document, return);
DiffEditorController *controller = factory(document); VcsBaseDiffEditorController *controller = factory(document);
QTC_ASSERT(controller, return); QTC_ASSERT(controller, return);
controller->setVcsBinary(settings().binaryPath());
controller->setVcsTimeoutS(settings().vcsTimeoutS());
controller->setProcessEnvironment(processEnvironment());
controller->setWorkingDirectory(workingDirectory);
VcsBase::setSource(document, sourceCopy); VcsBase::setSource(document, sourceCopy);
EditorManager::activateEditorForDocument(document); EditorManager::activateEditorForDocument(document);

View File

@@ -29,9 +29,7 @@
#include <coreplugin/editormanager/ieditor.h> #include <coreplugin/editormanager/ieditor.h>
#include <vcsbase/vcsbaseclient.h> #include <vcsbase/vcsbaseclient.h>
namespace DiffEditor { namespace VcsBase { class VcsBaseDiffEditorController; }
class DiffEditorController;
}
namespace Mercurial { namespace Mercurial {
namespace Internal { namespace Internal {
@@ -90,8 +88,8 @@ signals:
void needMerge(); void needMerge();
private: private:
void requestReload(const QString &documentId, const QString &source, const QString &title, void requestReload(const QString &documentId, const QString &source, const QString &title, const QString &workingDirectory,
std::function<DiffEditor::DiffEditorController *(Core::IDocument *)> factory) const; std::function<VcsBase::VcsBaseDiffEditorController *(Core::IDocument *)> factory);
void parsePullOutput(const QString &output); void parsePullOutput(const QString &output);
}; };

View File

@@ -171,10 +171,8 @@ class SubversionDiffEditorController : public VcsBaseDiffEditorController
{ {
Q_OBJECT Q_OBJECT
public: public:
SubversionDiffEditorController(IDocument *document, SubversionDiffEditorController(IDocument *document, const QStringList &authOptions)
VcsBaseClient *client, : VcsBaseDiffEditorController(document), m_authenticationOptions(authOptions)
const QString &workingDirectory)
: VcsBaseDiffEditorController(document, client, workingDirectory)
{ {
forceContextLineCount(3); // SVN cannot change that when using internal diff forceContextLineCount(3); // SVN cannot change that when using internal diff
} }
@@ -194,6 +192,7 @@ private:
State m_state = Idle; State m_state = Idle;
QStringList m_filesList; QStringList m_filesList;
int m_changeNumber = 0; int m_changeNumber = 0;
QStringList m_authenticationOptions;
}; };
@@ -218,7 +217,7 @@ void SubversionDiffEditorController::requestDescription()
m_state = GettingDescription; m_state = GettingDescription;
QStringList args(QLatin1String("log")); QStringList args(QLatin1String("log"));
args << SubversionClient::addAuthenticationOptions(settings()); args << m_authenticationOptions;
args << QLatin1String("-r"); args << QLatin1String("-r");
args << QString::number(m_changeNumber); args << QString::number(m_changeNumber);
runCommand(QList<QStringList>() << args, VcsCommand::SshPasswordPrompt); runCommand(QList<QStringList>() << args, VcsCommand::SshPasswordPrompt);
@@ -230,7 +229,7 @@ void SubversionDiffEditorController::requestDiff()
QStringList args; QStringList args;
args << QLatin1String("diff"); args << QLatin1String("diff");
args << SubversionClient::addAuthenticationOptions(settings()); args << m_authenticationOptions;
args << QLatin1String("--internal-diff"); args << QLatin1String("--internal-diff");
if (ignoreWhitespace()) if (ignoreWhitespace())
args << QLatin1String("-x") << QLatin1String("-uw"); args << QLatin1String("-x") << QLatin1String("-uw");
@@ -273,8 +272,13 @@ SubversionDiffEditorController *SubversionClient::findOrCreateDiffEditor(const Q
IDocument *document = DiffEditorController::findOrCreateDocument(documentId, title); IDocument *document = DiffEditorController::findOrCreateDocument(documentId, title);
auto controller = qobject_cast<SubversionDiffEditorController *>( auto controller = qobject_cast<SubversionDiffEditorController *>(
DiffEditorController::controller(document)); DiffEditorController::controller(document));
if (!controller) if (!controller) {
controller = new SubversionDiffEditorController(document, this, workingDirectory); controller = new SubversionDiffEditorController(document, addAuthenticationOptions(settings()));
controller->setVcsBinary(settings().binaryPath());
controller->setVcsTimeoutS(settings().vcsTimeoutS());
controller->setProcessEnvironment(processEnvironment());
controller->setWorkingDirectory(workingDirectory);
}
VcsBase::setSource(document, source); VcsBase::setSource(document, source);
EditorManager::activateEditorForDocument(document); EditorManager::activateEditorForDocument(document);
return controller; return controller;

View File

@@ -24,7 +24,6 @@
****************************************************************************/ ****************************************************************************/
#include "vcsbasediffeditorcontroller.h" #include "vcsbasediffeditorcontroller.h"
#include "vcsbaseclient.h"
#include "vcscommand.h" #include "vcscommand.h"
#include "vcsbaseclientsettings.h" #include "vcsbaseclientsettings.h"
@@ -83,9 +82,7 @@ private:
class VcsBaseDiffEditorControllerPrivate class VcsBaseDiffEditorControllerPrivate
{ {
public: public:
VcsBaseDiffEditorControllerPrivate(VcsBaseDiffEditorController *controller, VcsBaseDiffEditorControllerPrivate(VcsBaseDiffEditorController *q) : q(q) {}
VcsBaseClientImpl *client,
const QString &workingDirectory);
~VcsBaseDiffEditorControllerPrivate(); ~VcsBaseDiffEditorControllerPrivate();
void processingFinished(); void processingFinished();
@@ -95,8 +92,10 @@ public:
void commandFinished(bool success); void commandFinished(bool success);
VcsBaseDiffEditorController *q; VcsBaseDiffEditorController *q;
VcsBaseClientImpl *m_client; QString m_directory;
const QString m_directory; QProcessEnvironment m_processEnvironment;
Utils::FilePath m_vcsBinary;
int m_vscTimeoutS;
QString m_startupFile; QString m_startupFile;
QString m_output; QString m_output;
QString m_displayName; QString m_displayName;
@@ -130,16 +129,6 @@ void VcsCommandResultProxy::commandFinished(bool success)
m_target->commandFinished(success); m_target->commandFinished(success);
} }
VcsBaseDiffEditorControllerPrivate::VcsBaseDiffEditorControllerPrivate(
VcsBaseDiffEditorController *controller,
VcsBaseClientImpl *client,
const QString &workingDirectory)
: q(controller)
, m_client(client)
, m_directory(workingDirectory)
{
}
VcsBaseDiffEditorControllerPrivate::~VcsBaseDiffEditorControllerPrivate() VcsBaseDiffEditorControllerPrivate::~VcsBaseDiffEditorControllerPrivate()
{ {
cancelReload(); cancelReload();
@@ -231,14 +220,10 @@ void VcsBaseDiffEditorControllerPrivate::commandFinished(bool success)
///////////////////// /////////////////////
VcsBaseDiffEditorController::VcsBaseDiffEditorController(IDocument *document, VcsBaseDiffEditorController::VcsBaseDiffEditorController(Core::IDocument *document)
VcsBaseClientImpl *client,
const QString &workingDirectory)
: DiffEditorController(document) : DiffEditorController(document)
, d(new VcsBaseDiffEditorControllerPrivate(this, client, workingDirectory)) , d(new VcsBaseDiffEditorControllerPrivate(this))
{ {}
setBaseDirectory(workingDirectory);
}
VcsBaseDiffEditorController::~VcsBaseDiffEditorController() VcsBaseDiffEditorController::~VcsBaseDiffEditorController()
{ {
@@ -253,7 +238,7 @@ void VcsBaseDiffEditorController::runCommand(const QList<QStringList> &args, uns
// and "Waiting for data..." will be shown. // and "Waiting for data..." will be shown.
d->cancelReload(); d->cancelReload();
d->m_command = new VcsCommand(workingDirectory(), d->m_client->processEnvironment()); d->m_command = new VcsCommand(workingDirectory(), d->m_processEnvironment);
d->m_command->setDisplayName(d->m_displayName); d->m_command->setDisplayName(d->m_displayName);
d->m_command->setCodec(codec ? codec : EditorManager::defaultTextCodec()); d->m_command->setCodec(codec ? codec : EditorManager::defaultTextCodec());
d->m_commandResultProxy = new VcsCommandResultProxy(d->m_command.data(), d); d->m_commandResultProxy = new VcsCommandResultProxy(d->m_command.data(), d);
@@ -262,7 +247,7 @@ void VcsBaseDiffEditorController::runCommand(const QList<QStringList> &args, uns
for (const QStringList &arg : args) { for (const QStringList &arg : args) {
QTC_ASSERT(!arg.isEmpty(), continue); QTC_ASSERT(!arg.isEmpty(), continue);
d->m_command->addJob({d->m_client->vcsBinary(), arg}, d->m_client->vcsTimeoutS()); d->m_command->addJob({d->m_vcsBinary, arg}, d->m_vscTimeoutS);
} }
d->m_command->execute(); d->m_command->execute();
@@ -273,11 +258,6 @@ void VcsBaseDiffEditorController::processCommandOutput(const QString &output)
d->processDiff(output); d->processDiff(output);
} }
const VcsBaseClientSettings &VcsBaseDiffEditorController::settings() const
{
return d->m_client->settings();
}
QString VcsBaseDiffEditorController::workingDirectory() const QString VcsBaseDiffEditorController::workingDirectory() const
{ {
return d->m_directory; return d->m_directory;
@@ -298,6 +278,27 @@ void VcsBaseDiffEditorController::setDisplayName(const QString &displayName)
d->m_displayName = displayName; d->m_displayName = displayName;
} }
void VcsBase::VcsBaseDiffEditorController::setWorkingDirectory(const QString &workingDir)
{
d->m_directory = workingDir;
setBaseDirectory(workingDir);
}
void VcsBaseDiffEditorController::setVcsTimeoutS(int value)
{
d->m_vscTimeoutS = value;
}
void VcsBaseDiffEditorController::setVcsBinary(const Utils::FilePath &path)
{
d->m_vcsBinary = path;
}
void VcsBaseDiffEditorController::setProcessEnvironment(const QProcessEnvironment &value)
{
d->m_processEnvironment = value;
}
} // namespace VcsBase } // namespace VcsBase
#include "vcsbasediffeditorcontroller.moc" #include "vcsbasediffeditorcontroller.moc"

View File

@@ -26,14 +26,16 @@
#pragma once #pragma once
#include "vcsbase_global.h" #include "vcsbase_global.h"
#include <diffeditor/diffeditorcontroller.h> #include <diffeditor/diffeditorcontroller.h>
#include <QProcessEnvironment>
namespace Core { class IDocument; } namespace Core { class IDocument; }
namespace Utils { class FilePath; }
namespace VcsBase { namespace VcsBase {
class VcsBaseClientImpl;
class VcsBaseClientSettings;
class VcsBaseDiffEditorControllerPrivate; class VcsBaseDiffEditorControllerPrivate;
class VCSBASE_EXPORT VcsBaseDiffEditorController : public DiffEditor::DiffEditorController class VCSBASE_EXPORT VcsBaseDiffEditorController : public DiffEditor::DiffEditorController
@@ -41,16 +43,18 @@ class VCSBASE_EXPORT VcsBaseDiffEditorController : public DiffEditor::DiffEditor
Q_OBJECT Q_OBJECT
public: public:
VcsBaseDiffEditorController(Core::IDocument *document, explicit VcsBaseDiffEditorController(Core::IDocument *document);
VcsBaseClientImpl *client,
const QString &workingDirectory);
~VcsBaseDiffEditorController() override; ~VcsBaseDiffEditorController() override;
void setProcessEnvironment(const QProcessEnvironment &value);
void setVcsBinary(const Utils::FilePath &path);
void setVcsTimeoutS(int value);
void setWorkingDirectory(const QString &workingDir);
protected: protected:
void runCommand(const QList<QStringList> &args, unsigned flags, QTextCodec *codec = nullptr); void runCommand(const QList<QStringList> &args, unsigned flags, QTextCodec *codec = nullptr);
virtual void processCommandOutput(const QString &output); virtual void processCommandOutput(const QString &output);
const VcsBaseClientSettings &settings() const;
QString workingDirectory() const; QString workingDirectory() const;
void setStartupFile(const QString &startupFile); void setStartupFile(const QString &startupFile);
QString startupFile() const; QString startupFile() const;