Add tracker all-tickets command.

Closes #176.
This commit is contained in:
Mark Paluch
2021-03-16 15:40:59 +01:00
parent 686ae0b0bc
commit 272545aac8
2 changed files with 36 additions and 21 deletions

View File

@@ -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<Ticket> 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<Ticket> 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(),

View File

@@ -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())));