summaryrefslogtreecommitdiff
path: root/src/plugins/diffeditor/diffeditorplugin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/diffeditor/diffeditorplugin.cpp')
-rw-r--r--src/plugins/diffeditor/diffeditorplugin.cpp17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/plugins/diffeditor/diffeditorplugin.cpp b/src/plugins/diffeditor/diffeditorplugin.cpp
index e18a0e2797..2a81320665 100644
--- a/src/plugins/diffeditor/diffeditorplugin.cpp
+++ b/src/plugins/diffeditor/diffeditorplugin.cpp
@@ -109,24 +109,25 @@ DiffFilesController::DiffFilesController(IDocument *document)
setDisplayName(Tr::tr("Diff"));
using namespace Tasking;
- const TreeStorage<QList<FileData>> storage;
+ const TreeStorage<QList<std::optional<FileData>>> storage;
const auto setupTree = [this, storage](TaskTree &taskTree) {
- QList<FileData> *outputList = storage.activeStorage();
+ QList<std::optional<FileData>> *outputList = storage.activeStorage();
const auto setupDiff = [this](AsyncTask<FileData> &async, const ReloadInput &reloadInput) {
async.setAsyncCallData(DiffFile(ignoreWhitespace(), contextLineCount()), reloadInput);
async.setFutureSynchronizer(Internal::DiffEditorPlugin::futureSynchronizer());
};
const auto onDiffDone = [outputList](const AsyncTask<FileData> &async, int i) {
- (*outputList)[i] = async.result();
+ if (async.isResultAvailable())
+ (*outputList)[i] = async.result();
};
const QList<ReloadInput> inputList = reloadInputList();
outputList->resize(inputList.size());
using namespace std::placeholders;
- QList<TaskItem> tasks {parallel, continueOnDone};
+ QList<TaskItem> tasks {parallel, optional};
for (int i = 0; i < inputList.size(); ++i) {
tasks.append(Async<FileData>(std::bind(setupDiff, _1, inputList.at(i)),
std::bind(onDiffDone, _1, i)));
@@ -134,7 +135,13 @@ DiffFilesController::DiffFilesController(IDocument *document)
taskTree.setupRoot(tasks);
};
const auto onTreeDone = [this, storage] {
- setDiffFiles(*storage.activeStorage());
+ const QList<std::optional<FileData>> &results = *storage.activeStorage();
+ QList<FileData> finalList;
+ for (const std::optional<FileData> &result : results) {
+ if (result.has_value())
+ finalList.append(*result);
+ }
+ setDiffFiles(finalList);
};
const auto onTreeError = [this, storage] {
setDiffFiles({});