diff options
Diffstat (limited to 'src/plugins/vcsbase/vcsbasediffeditorcontroller.cpp')
-rw-r--r-- | src/plugins/vcsbase/vcsbasediffeditorcontroller.cpp | 42 |
1 files changed, 17 insertions, 25 deletions
diff --git a/src/plugins/vcsbase/vcsbasediffeditorcontroller.cpp b/src/plugins/vcsbase/vcsbasediffeditorcontroller.cpp index c0d31775af9..696e96b2916 100644 --- a/src/plugins/vcsbase/vcsbasediffeditorcontroller.cpp +++ b/src/plugins/vcsbase/vcsbasediffeditorcontroller.cpp @@ -2,28 +2,21 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include "vcsbasediffeditorcontroller.h" -#include "vcsplugin.h" -#include <utils/asynctask.h> +#include <extensionsystem/pluginmanager.h> + +#include <utils/async.h> #include <utils/environment.h> #include <utils/futuresynchronizer.h> +#include <utils/process.h> #include <utils/qtcassert.h> -#include <utils/qtcprocess.h> using namespace DiffEditor; +using namespace Tasking; using namespace Utils; namespace VcsBase { -static void readPatch(QFutureInterface<QList<FileData>> &futureInterface, const QString &patch) -{ - bool ok; - const QList<FileData> &fileDataList = DiffUtils::readPatch(patch, &ok, &futureInterface); - futureInterface.reportResult(fileDataList); -} - -///////////////////// - class VcsBaseDiffEditorControllerPrivate { public: @@ -32,7 +25,7 @@ public: VcsBaseDiffEditorController *q; Environment m_processEnvironment; FilePath m_vcsBinary; - const Tasking::TreeStorage<QString> m_inputStorage; + const TreeStorage<QString> m_inputStorage; }; ///////////////////// @@ -47,33 +40,32 @@ VcsBaseDiffEditorController::~VcsBaseDiffEditorController() delete d; } -Tasking::TreeStorage<QString> VcsBaseDiffEditorController::inputStorage() const +TreeStorage<QString> VcsBaseDiffEditorController::inputStorage() const { return d->m_inputStorage; } -Tasking::TaskItem VcsBaseDiffEditorController::postProcessTask() +TaskItem VcsBaseDiffEditorController::postProcessTask() { - using namespace Tasking; - - const auto setupDiffProcessor = [this](AsyncTask<QList<FileData>> &async) { + const auto setupDiffProcessor = [this](Async<QList<FileData>> &async) { const QString *storage = inputStorage().activeStorage(); QTC_ASSERT(storage, qWarning("Using postProcessTask() requires putting inputStorage() " "into task tree's root group.")); const QString inputData = storage ? *storage : QString(); - async.setAsyncCallData(readPatch, inputData); - async.setFutureSynchronizer(Internal::VcsPlugin::futureSynchronizer()); + async.setFutureSynchronizer(ExtensionSystem::PluginManager::futureSynchronizer()); + async.setConcurrentCallData(&DiffUtils::readPatchWithPromise, inputData); }; - const auto onDiffProcessorDone = [this](const AsyncTask<QList<FileData>> &async) { - setDiffFiles(async.result()); + const auto onDiffProcessorDone = [this](const Async<QList<FileData>> &async) { + setDiffFiles(async.isResultAvailable() ? async.result() : QList<FileData>()); + // TODO: We should set the right starting line here }; - const auto onDiffProcessorError = [this](const AsyncTask<QList<FileData>> &) { + const auto onDiffProcessorError = [this](const Async<QList<FileData>> &) { setDiffFiles({}); }; - return Async<QList<FileData>>(setupDiffProcessor, onDiffProcessorDone, onDiffProcessorError); + return AsyncTask<QList<FileData>>(setupDiffProcessor, onDiffProcessorDone, onDiffProcessorError); } -void VcsBaseDiffEditorController::setupCommand(QtcProcess &process, const QStringList &args) const +void VcsBaseDiffEditorController::setupCommand(Process &process, const QStringList &args) const { process.setEnvironment(d->m_processEnvironment); process.setWorkingDirectory(workingDirectory()); |