forked from qt-creator/qt-creator
GitBaseDiffEditorController: Simplify internals
Remove initialize() method and do it inside reloader method.
When reloader is being executed the workingDirectory is already
set.
Amends bfcd1149eb
Change-Id: I600daaff8d15f3bdb822789623947b31df0b7edd
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
@@ -29,7 +29,6 @@
|
|||||||
#include <utils/mimeutils.h>
|
#include <utils/mimeutils.h>
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
#include <utils/qtcprocess.h>
|
#include <utils/qtcprocess.h>
|
||||||
#include <utils/stringutils.h>
|
|
||||||
#include <utils/temporaryfile.h>
|
#include <utils/temporaryfile.h>
|
||||||
#include <utils/theme/theme.h>
|
#include <utils/theme/theme.h>
|
||||||
|
|
||||||
@@ -50,15 +49,12 @@
|
|||||||
#include <QAction>
|
#include <QAction>
|
||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QFileDialog>
|
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
#include <QHash>
|
#include <QHash>
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
#include <QRegularExpression>
|
#include <QRegularExpression>
|
||||||
#include <QTextBlock>
|
|
||||||
#include <QToolButton>
|
|
||||||
#include <QTextCodec>
|
#include <QTextCodec>
|
||||||
|
|
||||||
const char GIT_DIRECTORY[] = ".git";
|
const char GIT_DIRECTORY[] = ".git";
|
||||||
@@ -126,21 +122,10 @@ class GitBaseDiffEditorController : public VcsBaseDiffEditorController
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
explicit GitBaseDiffEditorController(IDocument *document,
|
explicit GitBaseDiffEditorController(IDocument *document);
|
||||||
const QString &leftCommit,
|
|
||||||
const QString &rightCommit);
|
|
||||||
|
|
||||||
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;
|
||||||
QStringList baseArguments() const;
|
|
||||||
|
|
||||||
public:
|
|
||||||
void initialize();
|
|
||||||
|
|
||||||
private:
|
|
||||||
QString m_leftCommit;
|
|
||||||
QString m_rightCommit;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class GitDiffEditorController : public GitBaseDiffEditorController
|
class GitDiffEditorController : public GitBaseDiffEditorController
|
||||||
@@ -150,36 +135,44 @@ public:
|
|||||||
const QString &leftCommit,
|
const QString &leftCommit,
|
||||||
const QString &rightCommit,
|
const QString &rightCommit,
|
||||||
const QStringList &extraArgs)
|
const QStringList &extraArgs)
|
||||||
: GitBaseDiffEditorController(document, leftCommit, rightCommit)
|
: GitBaseDiffEditorController(document)
|
||||||
{
|
{
|
||||||
setReloader([this, extraArgs] {
|
setReloader([=] {
|
||||||
runCommand({addConfigurationArguments(baseArguments() << extraArgs)},
|
runCommand({addConfigurationArguments(diffArgs(leftCommit, rightCommit, extraArgs))},
|
||||||
VcsBaseEditor::getCodec(workingDirectory(), {}));
|
VcsBaseEditor::getCodec(workingDirectory(), {}));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
private:
|
||||||
|
QStringList diffArgs(const QString &leftCommit, const QString &rightCommit,
|
||||||
GitBaseDiffEditorController::GitBaseDiffEditorController(IDocument *document,
|
const QStringList &extraArgs) const
|
||||||
const QString &leftCommit,
|
|
||||||
const QString &rightCommit) :
|
|
||||||
VcsBaseDiffEditorController(document),
|
|
||||||
m_leftCommit(leftCommit),
|
|
||||||
m_rightCommit(rightCommit)
|
|
||||||
{
|
{
|
||||||
setDisplayName("Git Diff");
|
QStringList res = {"diff"};
|
||||||
}
|
if (!leftCommit.isEmpty())
|
||||||
|
res << leftCommit;
|
||||||
|
|
||||||
void GitBaseDiffEditorController::initialize()
|
|
||||||
{
|
|
||||||
if (m_rightCommit.isEmpty()) {
|
|
||||||
// This is workaround for lack of support for merge commits and resolving conflicts,
|
// This is workaround for lack of support for merge commits and resolving conflicts,
|
||||||
// we compare the current state of working tree to the HEAD of current branch
|
// we compare the current state of working tree to the HEAD of current branch
|
||||||
// instead of showing unsupported combined diff format.
|
// instead of showing unsupported combined diff format.
|
||||||
GitClient::CommandInProgress commandInProgress =
|
auto fixRightCommit = [this](const QString &commit) {
|
||||||
m_instance->checkCommandInProgress(workingDirectory());
|
if (!commit.isEmpty())
|
||||||
if (commandInProgress != GitClient::NoCommand)
|
return commit;
|
||||||
m_rightCommit = HEAD;
|
if (m_instance->checkCommandInProgress(workingDirectory()) == GitClient::NoCommand)
|
||||||
|
return QString();
|
||||||
|
return QString(HEAD);
|
||||||
|
};
|
||||||
|
const QString fixedRightCommit = fixRightCommit(rightCommit);
|
||||||
|
if (!fixedRightCommit.isEmpty())
|
||||||
|
res << fixedRightCommit;
|
||||||
|
|
||||||
|
res << extraArgs;
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
GitBaseDiffEditorController::GitBaseDiffEditorController(IDocument *document)
|
||||||
|
: VcsBaseDiffEditorController(document)
|
||||||
|
{
|
||||||
|
setDisplayName("Git Diff");
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////
|
///////////////////////////////
|
||||||
@@ -209,26 +202,15 @@ QStringList GitBaseDiffEditorController::addConfigurationArguments(const QString
|
|||||||
return realArgs;
|
return realArgs;
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList GitBaseDiffEditorController::baseArguments() const
|
|
||||||
{
|
|
||||||
QStringList res = {"diff"};
|
|
||||||
if (!m_leftCommit.isEmpty())
|
|
||||||
res << m_leftCommit;
|
|
||||||
if (!m_rightCommit.isEmpty())
|
|
||||||
res << m_rightCommit;
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
class FileListDiffController : public GitBaseDiffEditorController
|
class FileListDiffController : public GitBaseDiffEditorController
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
FileListDiffController(IDocument *document,
|
FileListDiffController(IDocument *document, const QStringList &stagedFiles,
|
||||||
const QStringList &stagedFiles, const QStringList &unstagedFiles)
|
const QStringList &unstagedFiles)
|
||||||
: GitBaseDiffEditorController(document, {}, {})
|
: GitBaseDiffEditorController(document)
|
||||||
, m_stagedFiles(stagedFiles)
|
, m_stagedFiles(stagedFiles)
|
||||||
, m_unstagedFiles(unstagedFiles)
|
, m_unstagedFiles(unstagedFiles) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
private:
|
private:
|
||||||
Tasking::Group reloadRecipe() final
|
Tasking::Group reloadRecipe() final
|
||||||
{
|
{
|
||||||
@@ -304,7 +286,7 @@ class ShowController : public GitBaseDiffEditorController
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
ShowController(IDocument *document, const QString &id)
|
ShowController(IDocument *document, const QString &id)
|
||||||
: GitBaseDiffEditorController(document, {}, {})
|
: GitBaseDiffEditorController(document)
|
||||||
, m_id(id)
|
, m_id(id)
|
||||||
{
|
{
|
||||||
setDisplayName("Git Show");
|
setDisplayName("Git Show");
|
||||||
@@ -976,7 +958,6 @@ void GitClient::requestReload(const QString &documentId, const QString &source,
|
|||||||
controller->setVcsTimeoutS(settings().timeout.value());
|
controller->setVcsTimeoutS(settings().timeout.value());
|
||||||
controller->setProcessEnvironment(processEnvironment());
|
controller->setProcessEnvironment(processEnvironment());
|
||||||
controller->setWorkingDirectory(workingDirectory);
|
controller->setWorkingDirectory(workingDirectory);
|
||||||
controller->initialize();
|
|
||||||
|
|
||||||
using namespace std::placeholders;
|
using namespace std::placeholders;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user