From c8a115a37352ec2537e2575e1468b2469e451425 Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Fri, 13 Dec 2019 08:20:26 +0100 Subject: [PATCH] Mark files aborted recursively --- .../scm/repository/spi/GitBrowseCommand.java | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBrowseCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBrowseCommand.java index 75c8631975..c95fa13d95 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBrowseCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBrowseCommand.java @@ -185,7 +185,7 @@ public class GitBrowseCommand extends AbstractGitCommand file.setPartialResult(true); executor.execute( new CompleteFileInformation(path, revId, repo, treeWalk, file, loader, request), - new AbortFileInformation(file, request) + new AbortFileInformation(request) ); } } @@ -422,27 +422,32 @@ public class GitBrowseCommand extends AbstractGitCommand } private class AbortFileInformation implements Runnable { - private final FileObject file; private final BrowseCommandRequest request; - public AbortFileInformation(FileObject file, BrowseCommandRequest request) { - this.file = file; + public AbortFileInformation(BrowseCommandRequest request) { this.request = request; } @Override public void run() { synchronized (asyncMonitor) { - if (browserResult.getFile().getChildren().stream().anyMatch(FileObject::isPartialResult)) { - browserResult.getFile().getChildren().stream().filter(FileObject::isPartialResult).forEach( - f -> { - f.setPartialResult(false); - f.setComputationAborted(true); - } - ); + if (markPartialAsAborted(browserResult.getFile())) { updateCache(request); } } } + + private boolean markPartialAsAborted(FileObject file) { + boolean changed = false; + if (file.isPartialResult()) { + file.setPartialResult(false); + file.setComputationAborted(true); + changed = true; + } + for (FileObject child : file.getChildren()) { + changed |= markPartialAsAborted(child); + } + return changed; + } } }