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:
Jarek Kobus
2022-12-13 20:24:57 +01:00
parent cbcfc0242e
commit c5668952ae

View File

@@ -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;