2022-08-19 15:59:36 +02:00
|
|
|
// Copyright (C) 2017 The Qt Company Ltd.
|
2022-12-21 10:12:09 +01:00
|
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
2017-06-30 14:50:28 +02:00
|
|
|
|
|
|
|
|
#include "vcsbasediffeditorcontroller.h"
|
2022-12-12 14:40:56 +01:00
|
|
|
#include "vcsplugin.h"
|
2017-06-30 14:50:28 +02:00
|
|
|
|
2022-12-12 14:40:56 +01:00
|
|
|
#include <utils/asynctask.h>
|
2021-05-04 05:54:54 +02:00
|
|
|
#include <utils/environment.h>
|
2022-12-12 14:40:56 +01:00
|
|
|
#include <utils/futuresynchronizer.h>
|
2017-06-30 14:50:28 +02:00
|
|
|
#include <utils/qtcassert.h>
|
2022-12-12 14:40:56 +01:00
|
|
|
#include <utils/qtcprocess.h>
|
2017-06-30 14:50:28 +02:00
|
|
|
|
|
|
|
|
using namespace DiffEditor;
|
2021-05-04 05:54:54 +02:00
|
|
|
using namespace Utils;
|
2017-06-30 14:50:28 +02:00
|
|
|
|
|
|
|
|
namespace VcsBase {
|
|
|
|
|
|
2022-12-12 14:40:56 +01:00
|
|
|
static void readPatch(QFutureInterface<QList<FileData>> &futureInterface, const QString &patch)
|
2017-06-30 14:50:28 +02:00
|
|
|
{
|
|
|
|
|
bool ok;
|
2017-06-30 16:06:36 +02:00
|
|
|
const QList<FileData> &fileDataList = DiffUtils::readPatch(patch, &ok, &futureInterface);
|
2017-06-30 14:50:28 +02:00
|
|
|
futureInterface.reportResult(fileDataList);
|
|
|
|
|
}
|
|
|
|
|
|
2017-07-05 16:22:10 +02:00
|
|
|
/////////////////////
|
|
|
|
|
|
2017-06-30 14:50:28 +02:00
|
|
|
class VcsBaseDiffEditorControllerPrivate
|
|
|
|
|
{
|
|
|
|
|
public:
|
2020-02-04 08:11:50 +01:00
|
|
|
VcsBaseDiffEditorControllerPrivate(VcsBaseDiffEditorController *q) : q(q) {}
|
2017-06-30 14:50:28 +02:00
|
|
|
|
|
|
|
|
VcsBaseDiffEditorController *q;
|
2021-05-04 05:54:54 +02:00
|
|
|
Environment m_processEnvironment;
|
2021-08-17 12:26:10 +02:00
|
|
|
FilePath m_vcsBinary;
|
2022-12-15 10:27:23 +01:00
|
|
|
const Tasking::TreeStorage<QString> m_inputStorage;
|
2017-06-30 14:50:28 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/////////////////////
|
|
|
|
|
|
2020-02-04 08:11:50 +01:00
|
|
|
VcsBaseDiffEditorController::VcsBaseDiffEditorController(Core::IDocument *document)
|
2017-06-30 14:50:28 +02:00
|
|
|
: DiffEditorController(document)
|
2020-02-04 08:11:50 +01:00
|
|
|
, d(new VcsBaseDiffEditorControllerPrivate(this))
|
|
|
|
|
{}
|
2017-06-30 14:50:28 +02:00
|
|
|
|
|
|
|
|
VcsBaseDiffEditorController::~VcsBaseDiffEditorController()
|
|
|
|
|
{
|
|
|
|
|
delete d;
|
|
|
|
|
}
|
|
|
|
|
|
2022-12-15 10:27:23 +01:00
|
|
|
Tasking::TreeStorage<QString> VcsBaseDiffEditorController::inputStorage() const
|
|
|
|
|
{
|
|
|
|
|
return d->m_inputStorage;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Tasking::TaskItem VcsBaseDiffEditorController::postProcessTask()
|
|
|
|
|
{
|
|
|
|
|
using namespace Tasking;
|
|
|
|
|
|
|
|
|
|
const auto setupDiffProcessor = [this](AsyncTask<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());
|
|
|
|
|
};
|
|
|
|
|
const auto onDiffProcessorDone = [this](const AsyncTask<QList<FileData>> &async) {
|
|
|
|
|
setDiffFiles(async.result());
|
|
|
|
|
};
|
|
|
|
|
const auto onDiffProcessorError = [this](const AsyncTask<QList<FileData>> &) {
|
|
|
|
|
setDiffFiles({});
|
|
|
|
|
};
|
|
|
|
|
return Async<QList<FileData>>(setupDiffProcessor, onDiffProcessorDone, onDiffProcessorError);
|
|
|
|
|
}
|
|
|
|
|
|
2022-12-12 14:40:56 +01:00
|
|
|
void VcsBaseDiffEditorController::setupCommand(QtcProcess &process, const QStringList &args) const
|
|
|
|
|
{
|
|
|
|
|
process.setEnvironment(d->m_processEnvironment);
|
|
|
|
|
process.setWorkingDirectory(workingDirectory());
|
|
|
|
|
process.setCommand({d->m_vcsBinary, args});
|
2022-12-15 21:59:28 +01:00
|
|
|
process.setUseCtrlCStub(true);
|
2022-12-12 14:40:56 +01:00
|
|
|
}
|
|
|
|
|
|
2022-07-12 17:23:56 +02:00
|
|
|
void VcsBaseDiffEditorController::setVcsBinary(const FilePath &path)
|
2020-02-04 08:11:50 +01:00
|
|
|
{
|
|
|
|
|
d->m_vcsBinary = path;
|
|
|
|
|
}
|
|
|
|
|
|
2021-05-04 05:54:54 +02:00
|
|
|
void VcsBaseDiffEditorController::setProcessEnvironment(const Environment &value)
|
2020-02-04 08:11:50 +01:00
|
|
|
{
|
|
|
|
|
d->m_processEnvironment = value;
|
|
|
|
|
}
|
|
|
|
|
|
2017-06-30 14:50:28 +02:00
|
|
|
} // namespace VcsBase
|