VcsBaseDiffEditorController: Make post processing reusable

Move creating the post process task into vcs base class
and reuse it in subclasses.

Change-Id: Ibd81d1640524980c0554a5d0ddc41b96ecd7f73f
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
Jarek Kobus
2022-12-15 10:27:23 +01:00
parent 6de2b0cbb3
commit 36fd9cb9d5
3 changed files with 48 additions and 38 deletions

View File

@@ -51,6 +51,8 @@ public:
int m_vscTimeoutS;
QPointer<VcsCommand> m_command;
QFutureWatcher<QList<FileData>> *m_processWatcher = nullptr;
const Tasking::TreeStorage<QString> m_inputStorage;
};
VcsBaseDiffEditorControllerPrivate::~VcsBaseDiffEditorControllerPrivate()
@@ -134,6 +136,32 @@ VcsBaseDiffEditorController::~VcsBaseDiffEditorController()
delete d;
}
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);
}
void VcsBaseDiffEditorController::setupCommand(QtcProcess &process, const QStringList &args) const
{
process.setEnvironment(d->m_processEnvironment);
@@ -141,13 +169,6 @@ void VcsBaseDiffEditorController::setupCommand(QtcProcess &process, const QStrin
process.setCommand({d->m_vcsBinary, args});
}
void VcsBaseDiffEditorController::setupDiffProcessor(AsyncTask<QList<FileData>> &processor,
const QString &patch) const
{
processor.setAsyncCallData(readPatch, patch);
processor.setFutureSynchronizer(Internal::VcsPlugin::futureSynchronizer());
}
void VcsBaseDiffEditorController::runCommand(const QList<QStringList> &args, RunFlags flags, QTextCodec *codec)
{
// Cancel the possible ongoing reload without the commandFinished() nor