Skip gracefully dependency versions that cannot be parsed.

See #159
This commit is contained in:
Mark Paluch
2021-01-12 13:50:27 +01:00
parent fdde67d4ae
commit 19c10e053a
3 changed files with 34 additions and 15 deletions

View File

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

View File

@@ -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<Ticket> 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<Ticket> 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);
}
}

View File

@@ -90,10 +90,11 @@ class DependencyVersion implements Comparable<DependencyVersion> {
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);