From c06c6be4ab6bba7efa4ef6c37181bc65871bfd6d Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Thu, 15 Dec 2022 13:34:59 +0100 Subject: [PATCH] GitDiffEditorController: Reuse task tree Change-Id: I6f89a6865ee45eea66a0307c273ef8d76976da3b Reviewed-by: Reviewed-by: Qt CI Bot Reviewed-by: Orgad Shaneh --- src/plugins/git/gitclient.cpp | 36 +++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index d45cebf43c2..c8d1e2a7c45 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -134,14 +134,7 @@ public: explicit GitDiffEditorController(IDocument *document, const QString &leftCommit, const QString &rightCommit, - const QStringList &extraArgs) - : GitBaseDiffEditorController(document) - { - setReloader([=] { - runCommand({addConfigurationArguments(diffArgs(leftCommit, rightCommit, extraArgs))}, - VcsBaseEditor::getCodec(workingDirectory(), {})); - }); - } + const QStringList &extraArgs); private: QStringList diffArgs(const QString &leftCommit, const QString &rightCommit, const QStringList &extraArgs) const @@ -169,6 +162,33 @@ private: } }; +GitDiffEditorController::GitDiffEditorController(IDocument *document, + const QString &leftCommit, + const QString &rightCommit, + const QStringList &extraArgs) + : GitBaseDiffEditorController(document) +{ + using namespace Tasking; + + const TreeStorage diffInputStorage = inputStorage(); + + const auto setupDiff = [=](QtcProcess &process) { + process.setCodec(VcsBaseEditor::getCodec(workingDirectory(), {})); + setupCommand(process, {addConfigurationArguments(diffArgs(leftCommit, rightCommit, extraArgs))}); + VcsOutputWindow::appendCommand(process.workingDirectory(), process.commandLine()); + }; + const auto onDiffDone = [diffInputStorage](const QtcProcess &process) { + *diffInputStorage.activeStorage() = process.cleanedStdOut(); + }; + + const Group root { + Storage(diffInputStorage), + Process(setupDiff, onDiffDone), + postProcessTask() + }; + setReloadRecipe(root); +} + GitBaseDiffEditorController::GitBaseDiffEditorController(IDocument *document) : VcsBaseDiffEditorController(document) {