forked from qt-creator/qt-creator
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:
@@ -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)
|
||||||
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
@@ -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"
|
||||||
|
@@ -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;
|
||||||
|
Reference in New Issue
Block a user