diff --git a/release-tools/src/main/java/org/springframework/data/release/dependency/DependencyCommands.java b/release-tools/src/main/java/org/springframework/data/release/dependency/DependencyCommands.java index aaa65c1..2b0b0d0 100644 --- a/release-tools/src/main/java/org/springframework/data/release/dependency/DependencyCommands.java +++ b/release-tools/src/main/java/org/springframework/data/release/dependency/DependencyCommands.java @@ -108,15 +108,15 @@ public class DependencyCommands extends TimedCommand { public void upgrade(@CliOption(key = "", mandatory = true) TrainIteration iteration) throws IOException, InterruptedException { - git.checkout(iteration.getTrain(), false); logger.log(iteration, "Applying dependency upgrades to Spring Data Build"); ModuleIteration module = iteration.getModule(Projects.BUILD); - DependencyVersions dependencyVersions = loadDependencyUpgrades(module); - operations.createUpgradeTickets(module, dependencyVersions); - Tickets tickets = operations.upgradeDependencies(module, dependencyVersions); + git.checkout(iteration.getTrain(), false); + + Tickets tickets = operations.createUpgradeTickets(module, dependencyVersions); + operations.upgradeDependencies(tickets, module, dependencyVersions); git.push(module); diff --git a/release-tools/src/main/java/org/springframework/data/release/dependency/DependencyOperations.java b/release-tools/src/main/java/org/springframework/data/release/dependency/DependencyOperations.java index a75cf97..1454ee1 100644 --- a/release-tools/src/main/java/org/springframework/data/release/dependency/DependencyOperations.java +++ b/release-tools/src/main/java/org/springframework/data/release/dependency/DependencyOperations.java @@ -34,6 +34,7 @@ import java.util.function.Function; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; +import java.util.stream.Stream; import org.springframework.data.release.CliComponent; import org.springframework.data.release.build.Pom; @@ -112,8 +113,9 @@ public class DependencyOperations { * * @param module * @param dependencyVersions + * @return */ - public void createUpgradeTickets(ModuleIteration module, DependencyVersions dependencyVersions) { + public Tickets createUpgradeTickets(ModuleIteration module, DependencyVersions dependencyVersions) { Project project = module.getProject(); DependencyVersions upgrades = getDependencyUpgradesToApply(project, dependencyVersions); @@ -121,6 +123,8 @@ public class DependencyOperations { IssueTracker tracker = this.tracker.getRequiredPluginFor(project); Tickets tickets = tracker.getTicketsFor(module); + List upgradeTickets = new ArrayList<>(); + upgrades.forEach((dependency, dependencyVersion) -> { String upgradeTicketSummary = getUpgradeTicketSummary(dependency, dependencyVersion); @@ -128,24 +132,33 @@ public class DependencyOperations { if (upgradeTicket.isPresent()) { logger.log(project, "Found upgrade ticket %s", upgradeTicket.get()); + upgradeTicket.ifPresent(it -> { + tracker.assignTicketToMe(project, it); + upgradeTickets.add(it); + }); } else { logger.log(module, "Creating upgrade ticket for %s", upgradeTicketSummary); - tracker.createTicket(module, upgradeTicketSummary, IssueTracker.TicketType.DependencyUpgrade); + Ticket ticket = tracker.createTicket(module, upgradeTicketSummary, IssueTracker.TicketType.DependencyUpgrade, + true); + upgradeTickets.add(ticket); } }); // flush cache tracker.reset(); + + return new Tickets(upgradeTickets); } /** * Verifies dependencies to upgrade, applies the upgrade, creates a commit. * + * @param tickets * @param module * @param dependencyVersions */ - public Tickets upgradeDependencies(ModuleIteration module, DependencyVersions dependencyVersions) { + public Tickets upgradeDependencies(Tickets tickets, ModuleIteration module, DependencyVersions dependencyVersions) { Project project = module.getProject(); DependencyVersions upgrades = getDependencyUpgradesToApply(project, dependencyVersions); @@ -155,15 +168,12 @@ public class DependencyOperations { logger.log(module, "No dependency upgrades to apply"); } - IssueTracker tracker = this.tracker.getRequiredPluginFor(project); - Tickets tickets = tracker.getTicketsFor(module); List ticketsToClose = new ArrayList<>(); upgrades.forEach((dependency, dependencyVersion) -> { String upgradeTicketSummary = getUpgradeTicketSummary(dependency, dependencyVersion); Ticket upgradeTicket = getDependencyUpgradeTicket(tickets, upgradeTicketSummary).get(); - tracker.assignTicketToMe(project, upgradeTicket); String versionProperty = dependencies.getVersionPropertyFor(dependency); File pom = getPomFile(project); @@ -340,7 +350,15 @@ public class DependencyOperations { MavenMetadata metadata = io.read(MavenMetadata.class); - return metadata.getVersions().stream().filter(dependency::shouldInclude).map(DependencyVersion::of).map(it -> { + return metadata.getVersions().stream().filter(dependency::shouldInclude).flatMap(s -> { + + try { + return Stream.of(DependencyVersion.of(s)); + } catch (Exception e) { + logger.log(dependency.toString(), "Cannot parse dependency version " + s); + return Stream.empty(); + } + }).map(it -> { if (creationDates.containsKey(it.getIdentifier())) { return it.withCreatedAt(creationDates.get(it.getIdentifier())); @@ -351,7 +369,7 @@ public class DependencyOperations { }).collect(Collectors.toList()); } catch (Exception o_O) { - throw new RuntimeException(o_O); + throw new RuntimeException(String.format("Cannot determine available versions for %s", dependency), o_O); } } diff --git a/release-tools/src/main/java/org/springframework/data/release/dependency/DependencyVersion.java b/release-tools/src/main/java/org/springframework/data/release/dependency/DependencyVersion.java index 5a80b47..597cc31 100644 --- a/release-tools/src/main/java/org/springframework/data/release/dependency/DependencyVersion.java +++ b/release-tools/src/main/java/org/springframework/data/release/dependency/DependencyVersion.java @@ -90,10 +90,11 @@ class DependencyVersion implements Comparable { Version version = null; String modifier; String counter; + String versionString = versionMatcher.group(1); try { - version = Version.parse(versionMatcher.group(1)); - } catch (NumberFormatException e) { - + version = Version.parse(versionString); + } catch (RuntimeException e) { + throw new IllegalArgumentException(String.format("Cannot parse version number %s", versionString), e); } modifier = versionMatcher.group(2);