diff --git a/release-tools/src/main/java/org/springframework/data/release/issues/IssueTrackerCommands.java b/release-tools/src/main/java/org/springframework/data/release/issues/IssueTrackerCommands.java index 012c5c6..d6476ae 100644 --- a/release-tools/src/main/java/org/springframework/data/release/issues/IssueTrackerCommands.java +++ b/release-tools/src/main/java/org/springframework/data/release/issues/IssueTrackerCommands.java @@ -23,6 +23,7 @@ import lombok.RequiredArgsConstructor; import lombok.experimental.FieldDefaults; import java.util.concurrent.Executor; +import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.StreamSupport; @@ -141,28 +142,46 @@ class IssueTrackerCommands extends TimedCommand { @CliOption(key = "module") String moduleName, @CliOption(key = "filter-release-tickets") Boolean filterReleaseTickets) { + return getTickets(iteration, moduleName, + it -> !it.isResolved() && ((filterReleaseTickets == null && !it.isReleaseTicket()) + || (filterReleaseTickets != null && filterReleaseTickets && !it.isReleaseTicket()))); + } + + @CliCommand("tracker all-tickets") + public String allTickets(@CliOption(key = "", mandatory = true) TrainIteration iteration, // + @CliOption(key = "module") String moduleName, + @CliOption(key = "filter-release-tickets") Boolean filterReleaseTickets) { + + return getTickets(iteration, moduleName, it -> (filterReleaseTickets == null && !it.isReleaseTicket()) + || (filterReleaseTickets != null && filterReleaseTickets && !it.isReleaseTicket())); + } + + private String getTickets(TrainIteration iteration, String moduleName, Predicate ticketPredicate) { + if (StringUtils.hasText(moduleName)) { - - Project project = Projects.requiredByName(moduleName); - - ModuleIteration module = iteration.getModule(project); - - return getTrackerFor(module).getTicketsFor(module) // - .stream() // - .filter(it -> !it.isResolved() - && ((filterReleaseTickets == null || !filterReleaseTickets) || !it.isReleaseTicket())) // - .collect(Tickets.toTicketsCollector()) // - .toString(false); + return getTicketsForProject(iteration, Projects.requiredByName(moduleName), ticketPredicate); } return ExecutionUtils.runAndReturn(executor, iteration, - moduleIteration -> openTickets(iteration, moduleIteration.getModule().getProject().getName(), - filterReleaseTickets)) + moduleIteration -> { + return getTicketsForProject(iteration, moduleIteration.getModule().getProject(), ticketPredicate); + }) .stream() // .filter(StringUtils::hasText) // .collect(Collectors.joining("\n")); } + private String getTicketsForProject(TrainIteration iteration, Project project, Predicate ticketPredicate) { + + ModuleIteration module = iteration.getModule(project); + + return getTrackerFor(module).getTicketsFor(module) // + .stream() // + .filter(ticketPredicate) // + .collect(Tickets.toTicketsCollector()) // + .toString(false); + } + @CliCommand("tracker close") public void closeIteration(@CliOption(key = "", mandatory = true) TrainIteration iteration) { run(executor, iteration, module -> getTrackerFor(module).closeIteration(module)); @@ -173,14 +192,6 @@ class IssueTrackerCommands extends TimedCommand { run(executor, iteration, module -> getTrackerFor(module).archiveReleaseVersion(module)); } - private Changelog getChangelog(ModuleIteration module) { - return getTrackerFor(module).getChangelogFor(module); - } - - private void createReleaseVersion(ModuleIteration moduleIteration) { - getTrackerFor(moduleIteration).createReleaseVersion(moduleIteration); - } - private IssueTracker getTrackerFor(ModuleIteration moduleIteration) { return tracker.getRequiredPluginFor(moduleIteration.getProject(), diff --git a/release-tools/src/main/java/org/springframework/data/release/issues/jira/Jira.java b/release-tools/src/main/java/org/springframework/data/release/issues/jira/Jira.java index 7864036..1927f9b 100644 --- a/release-tools/src/main/java/org/springframework/data/release/issues/jira/Jira.java +++ b/release-tools/src/main/java/org/springframework/data/release/issues/jira/Jira.java @@ -200,6 +200,10 @@ class Jira implements JiraConnector { @Cacheable("tickets") public Tickets getTicketsFor(TrainIteration trainIteration, boolean forCurrentUser) { + if (!trainIteration.stream().anyMatch(it -> supports(it.getProject()))) { + return new Tickets(Collections.emptyList()); + } + JqlQuery query = JqlQuery .from(trainIteration.stream().filter(moduleIteration -> supports(moduleIteration.getProject())));