From c5668952aedd9680aee17208a904696f67f923b8 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Tue, 13 Dec 2022 20:24:57 +0100 Subject: [PATCH] GitBaseDiffEditorController: Simplify internals Remove initialize() method and do it inside reloader method. When reloader is being executed the workingDirectory is already set. Amends bfcd1149eb688707a5495ce63f39e93bcf0c0a54 Change-Id: I600daaff8d15f3bdb822789623947b31df0b7edd Reviewed-by: Orgad Shaneh Reviewed-by: --- src/plugins/git/gitclient.cpp | 91 ++++++++++++++--------------------- 1 file changed, 36 insertions(+), 55 deletions(-) diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index bacd7a8e3c9..393186a7f2f 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -29,7 +29,6 @@ #include #include #include -#include #include #include @@ -50,15 +49,12 @@ #include #include #include -#include #include #include #include #include #include #include -#include -#include #include const char GIT_DIRECTORY[] = ".git"; @@ -126,21 +122,10 @@ class GitBaseDiffEditorController : public VcsBaseDiffEditorController Q_OBJECT protected: - explicit GitBaseDiffEditorController(IDocument *document, - const QString &leftCommit, - const QString &rightCommit); + explicit GitBaseDiffEditorController(IDocument *document); void runCommand(const QList &args, QTextCodec *codec = nullptr); - QStringList addConfigurationArguments(const QStringList &args) const; - QStringList baseArguments() const; - -public: - void initialize(); - -private: - QString m_leftCommit; - QString m_rightCommit; }; class GitDiffEditorController : public GitBaseDiffEditorController @@ -150,36 +135,44 @@ public: const QString &leftCommit, const QString &rightCommit, const QStringList &extraArgs) - : GitBaseDiffEditorController(document, leftCommit, rightCommit) + : GitBaseDiffEditorController(document) { - setReloader([this, extraArgs] { - runCommand({addConfigurationArguments(baseArguments() << extraArgs)}, + setReloader([=] { + runCommand({addConfigurationArguments(diffArgs(leftCommit, rightCommit, extraArgs))}, VcsBaseEditor::getCodec(workingDirectory(), {})); }); } -}; +private: + QStringList diffArgs(const QString &leftCommit, const QString &rightCommit, + const QStringList &extraArgs) const + { + QStringList res = {"diff"}; + if (!leftCommit.isEmpty()) + res << leftCommit; -GitBaseDiffEditorController::GitBaseDiffEditorController(IDocument *document, - const QString &leftCommit, - const QString &rightCommit) : - VcsBaseDiffEditorController(document), - m_leftCommit(leftCommit), - m_rightCommit(rightCommit) -{ - setDisplayName("Git Diff"); -} - -void GitBaseDiffEditorController::initialize() -{ - if (m_rightCommit.isEmpty()) { // 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 // instead of showing unsupported combined diff format. - GitClient::CommandInProgress commandInProgress = - m_instance->checkCommandInProgress(workingDirectory()); - if (commandInProgress != GitClient::NoCommand) - m_rightCommit = HEAD; + auto fixRightCommit = [this](const QString &commit) { + if (!commit.isEmpty()) + return commit; + 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; } -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 { public: - FileListDiffController(IDocument *document, - const QStringList &stagedFiles, const QStringList &unstagedFiles) - : GitBaseDiffEditorController(document, {}, {}) + FileListDiffController(IDocument *document, const QStringList &stagedFiles, + const QStringList &unstagedFiles) + : GitBaseDiffEditorController(document) , m_stagedFiles(stagedFiles) - , m_unstagedFiles(unstagedFiles) - { - } + , m_unstagedFiles(unstagedFiles) {} + private: Tasking::Group reloadRecipe() final { @@ -304,7 +286,7 @@ class ShowController : public GitBaseDiffEditorController Q_OBJECT public: ShowController(IDocument *document, const QString &id) - : GitBaseDiffEditorController(document, {}, {}) + : GitBaseDiffEditorController(document) , m_id(id) { setDisplayName("Git Show"); @@ -976,7 +958,6 @@ void GitClient::requestReload(const QString &documentId, const QString &source, controller->setVcsTimeoutS(settings().timeout.value()); controller->setProcessEnvironment(processEnvironment()); controller->setWorkingDirectory(workingDirectory); - controller->initialize(); using namespace std::placeholders;