diff --git a/bots/hgbridge/src/test/java/org/openjdk/skara/bots/hgbridge/BridgeBotTests.java b/bots/hgbridge/src/test/java/org/openjdk/skara/bots/hgbridge/BridgeBotTests.java index 370c50850..98b20ff9a 100644 --- a/bots/hgbridge/src/test/java/org/openjdk/skara/bots/hgbridge/BridgeBotTests.java +++ b/bots/hgbridge/src/test/java/org/openjdk/skara/bots/hgbridge/BridgeBotTests.java @@ -116,9 +116,11 @@ private Set getTagNames(Repository repo) throws IOException { } private Set getCommitHashes(Repository repo) throws IOException { - return repo.commits().stream() - .map(c -> c.hash().hex()) - .collect(Collectors.toSet()); + try (var commits = repo.commits()) { + return commits.stream() + .map(c -> c.hash().hex()) + .collect(Collectors.toSet()); + } } private TemporaryDirectory sourceFolder; diff --git a/bots/mlbridge/src/main/java/org/openjdk/skara/bots/mlbridge/PullRequestInstance.java b/bots/mlbridge/src/main/java/org/openjdk/skara/bots/mlbridge/PullRequestInstance.java index b688c020a..72401c24e 100644 --- a/bots/mlbridge/src/main/java/org/openjdk/skara/bots/mlbridge/PullRequestInstance.java +++ b/bots/mlbridge/src/main/java/org/openjdk/skara/bots/mlbridge/PullRequestInstance.java @@ -78,8 +78,7 @@ interface CommitFormatter { } String formatCommitMessages(Hash first, Hash last, CommitFormatter formatter) { - try { - var commits = localRepo().commits(first.hex() + ".." + last.hex()); + try (var commits = localRepo().commits(first.hex() + ".." + last.hex())) { return commits.stream() .map(formatter::format) .collect(Collectors.joining("\n")); diff --git a/bots/notify/src/main/java/org/openjdk/skara/bots/notify/JNotifyBot.java b/bots/notify/src/main/java/org/openjdk/skara/bots/notify/JNotifyBot.java index 5a2e786ff..e372f8802 100644 --- a/bots/notify/src/main/java/org/openjdk/skara/bots/notify/JNotifyBot.java +++ b/bots/notify/src/main/java/org/openjdk/skara/bots/notify/JNotifyBot.java @@ -76,8 +76,7 @@ private void handleBranch(Repository localRepo, UpdateHistory history, Branch br return; } - var newCommits = localRepo.commits(lastRef.get() + ".." + curHead).stream() - .collect(Collectors.toList()); + var newCommits = localRepo.commits(lastRef.get() + ".." + curHead).asList(); if (newCommits.size() == 0) { return; } @@ -118,8 +117,7 @@ private void handleTags(Repository localRepo, UpdateHistory history) throws IOEx log.warning("No previous tag found for '" + tag.tag() + "' - ignoring"); continue; } - var commits = localRepo.commits(previous.get().tag() + ".." + tag.tag()).stream() - .collect(Collectors.toList()); + var commits = localRepo.commits(previous.get().tag() + ".." + tag.tag()).asList(); if (commits.size() == 0) { continue; } diff --git a/bots/pr/src/test/java/org/openjdk/skara/bots/pr/MergeTests.java b/bots/pr/src/test/java/org/openjdk/skara/bots/pr/MergeTests.java index 10885dcb2..fb7a27b76 100644 --- a/bots/pr/src/test/java/org/openjdk/skara/bots/pr/MergeTests.java +++ b/bots/pr/src/test/java/org/openjdk/skara/bots/pr/MergeTests.java @@ -32,6 +32,7 @@ import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.*; +import java.util.Set; import java.util.stream.Collectors; import static org.junit.jupiter.api.Assertions.*; @@ -101,9 +102,12 @@ void branchMerge(TestInfo testInfo) throws IOException { // The commits from the "other" branch should be preserved and not squashed (but not the merge commit) var headHash = pushedRepo.resolve("HEAD").orElseThrow(); - var commits = pushedRepo.commits(masterHash.hex() + ".." + headHash.hex()).stream() - .map(Commit::hash) - .collect(Collectors.toSet()); + Set commits; + try (var tempCommits = pushedRepo.commits(masterHash.hex() + ".." + headHash.hex())) { + commits = tempCommits.stream() + .map(Commit::hash) + .collect(Collectors.toSet()); + } assertTrue(commits.contains(otherHash1)); assertTrue(commits.contains(otherHash2)); assertFalse(commits.contains(mergeHash)); @@ -190,9 +194,12 @@ void branchMergeRebase(TestInfo testInfo) throws IOException { // The commits from the "other" branch should be preserved and not squashed (but not the merge commit) var headHash = pushedRepo.resolve("HEAD").orElseThrow(); - var commits = pushedRepo.commits(masterHash.hex() + ".." + headHash.hex()).stream() - .map(Commit::hash) - .collect(Collectors.toSet()); + Set commits; + try (var tempCommits = pushedRepo.commits(masterHash.hex() + ".." + headHash.hex())) { + commits = tempCommits.stream() + .map(Commit::hash) + .collect(Collectors.toSet()); + } assertTrue(commits.contains(otherHash1)); assertTrue(commits.contains(otherHash2)); assertFalse(commits.contains(mergeHash)); diff --git a/jcheck/src/main/java/org/openjdk/skara/jcheck/JCheck.java b/jcheck/src/main/java/org/openjdk/skara/jcheck/JCheck.java index 7ee92f481..b918e4762 100644 --- a/jcheck/src/main/java/org/openjdk/skara/jcheck/JCheck.java +++ b/jcheck/src/main/java/org/openjdk/skara/jcheck/JCheck.java @@ -146,10 +146,11 @@ private Set checksForCommit(Commit c) { } private Set checksForCommits() throws IOException { - var commits = repository.commits(revisionRange); - return commits.stream() - .flatMap(commit -> checksForCommit(commit).stream()) - .collect(Collectors.toSet()); + try (var commits = repository.commits(revisionRange)) { + return commits.stream() + .flatMap(commit -> checksForCommit(commit).stream()) + .collect(Collectors.toSet()); + } } public static class Issues implements Iterable, AutoCloseable { diff --git a/vcs/src/main/java/org/openjdk/skara/vcs/Commits.java b/vcs/src/main/java/org/openjdk/skara/vcs/Commits.java index 4f571c02c..ebe8b90f2 100644 --- a/vcs/src/main/java/org/openjdk/skara/vcs/Commits.java +++ b/vcs/src/main/java/org/openjdk/skara/vcs/Commits.java @@ -24,6 +24,7 @@ import java.io.*; import java.util.*; +import java.util.function.Consumer; import java.util.stream.*; public interface Commits extends Closeable, Iterable { @@ -39,6 +40,22 @@ default List asList() throws IOException { } default Stream stream() { - return StreamSupport.stream(spliterator(), false); + return StreamSupport.stream(spliterator(), false).onClose(() -> { + try { + close(); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + }); + } + + @Override + default void forEach(Consumer action) { + Iterable.super.forEach(action); + try { + close(); + } catch (IOException e) { + throw new UncheckedIOException(e); + } } }