Skip to content

Commit

Permalink
Remove unused version alignment support from Bomr
Browse files Browse the repository at this point in the history
Closes gh-34333
  • Loading branch information
wilkinsona committed Feb 22, 2023
1 parent 891ce3b commit 510c781
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 295 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -58,15 +58,11 @@
import org.w3c.dom.NodeList;

import org.springframework.boot.build.DeployedPlugin;
import org.springframework.boot.build.bom.Library.DependencyConstraintsDependencyVersions;
import org.springframework.boot.build.bom.Library.DependencyLockDependencyVersions;
import org.springframework.boot.build.bom.Library.DependencyVersions;
import org.springframework.boot.build.bom.Library.Exclusion;
import org.springframework.boot.build.bom.Library.Group;
import org.springframework.boot.build.bom.Library.LibraryVersion;
import org.springframework.boot.build.bom.Library.Module;
import org.springframework.boot.build.bom.Library.ProhibitedVersion;
import org.springframework.boot.build.bom.Library.VersionAlignment;
import org.springframework.boot.build.bom.bomr.version.DependencyVersion;
import org.springframework.boot.build.mavenplugin.MavenExec;
import org.springframework.util.FileCopyUtils;
Expand Down Expand Up @@ -115,13 +111,10 @@ public void library(String name, Action<LibraryHandler> action) {

public void library(String name, String version, Action<LibraryHandler> action) {
ObjectFactory objects = this.project.getObjects();
LibraryHandler libraryHandler = objects.newInstance(LibraryHandler.class, (version != null) ? version : "",
objects);
LibraryHandler libraryHandler = objects.newInstance(LibraryHandler.class, (version != null) ? version : "");
action.execute(libraryHandler);
LibraryVersion libraryVersion = new LibraryVersion(DependencyVersion.parse(libraryHandler.version),
libraryHandler.versionAlignment);
addLibrary(new Library(name, libraryVersion, libraryHandler.groups, libraryHandler.prohibitedVersions,
libraryHandler.dependencyVersions));
LibraryVersion libraryVersion = new LibraryVersion(DependencyVersion.parse(libraryHandler.version));
addLibrary(new Library(name, libraryVersion, libraryHandler.groups, libraryHandler.prohibitedVersions));
}

public void effectiveBomArtifact() {
Expand Down Expand Up @@ -221,25 +214,15 @@ public static class LibraryHandler {

private final List<ProhibitedVersion> prohibitedVersions = new ArrayList<>();

private final ObjectFactory objectFactory;

private String version;

private VersionAlignment versionAlignment;

private DependencyVersions dependencyVersions;

@Inject
public LibraryHandler(String version, ObjectFactory objectFactory) {
public LibraryHandler(String version) {
this.version = version;
this.objectFactory = objectFactory;
}

public void version(String version, Action<VersionHandler> action) {
public void version(String version) {
this.version = version;
VersionHandler versionHandler = new VersionHandler();
action.execute(versionHandler);
this.versionAlignment = new VersionAlignment(versionHandler.libraryName);
}

public void group(String id, Action<GroupHandler> action) {
Expand All @@ -256,23 +239,6 @@ public void prohibit(Action<ProhibitedHandler> action) {
handler.endsWith, handler.contains, handler.reason));
}

public void dependencyVersions(Action<DependencyVersionsHandler> action) {
DependencyVersionsHandler dependencyVersionsHandler = this.objectFactory
.newInstance(DependencyVersionsHandler.class, this.version);
action.execute(dependencyVersionsHandler);
this.dependencyVersions = dependencyVersionsHandler.dependencyVersions;
}

public static class VersionHandler {

private String libraryName;

public void shouldAlignWithVersionFrom(String libraryName) {
this.libraryName = libraryName;
}

}

public static class ProhibitedHandler {

private String reason;
Expand Down Expand Up @@ -391,37 +357,6 @@ public void setClassifier(String classifier) {

}

public static class DependencyVersionsHandler {

private final String libraryVersion;

private DependencyVersions dependencyVersions;

@Inject
public DependencyVersionsHandler(String libraryVersion) {
this.libraryVersion = libraryVersion;
}

public void extractFrom(Action<ExtractFromHandler> action) {
action.execute(new ExtractFromHandler());
}

public class ExtractFromHandler {

public void dependencyLock(String location) {
DependencyVersionsHandler.this.dependencyVersions = new DependencyLockDependencyVersions(location,
DependencyVersionsHandler.this.libraryVersion);
}

public void dependencyConstraints(String location) {
DependencyVersionsHandler.this.dependencyVersions = new DependencyConstraintsDependencyVersions(
location, DependencyVersionsHandler.this.libraryVersion);
}

}

}

}

public static class UpgradeHandler {
Expand Down
154 changes: 3 additions & 151 deletions buildSrc/src/main/java/org/springframework/boot/build/bom/Library.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,11 @@

package org.springframework.boot.build.bom;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.maven.artifact.versioning.VersionRange;
import org.gradle.api.GradleException;

import org.springframework.boot.build.bom.bomr.version.DependencyVersion;

Expand All @@ -51,26 +42,22 @@ public class Library {

private final List<ProhibitedVersion> prohibitedVersions;

private final DependencyVersions dependencyVersions;

/**
* Create a new {@code Library} with the given {@code name}, {@code version}, and
* {@code groups}.
* @param name name of the library
* @param version version of the library
* @param groups groups in the library
* @param prohibitedVersions version of the library that are prohibited
* @param dependencyVersions the library's dependency versions
*/
public Library(String name, LibraryVersion version, List<Group> groups, List<ProhibitedVersion> prohibitedVersions,
DependencyVersions dependencyVersions) {
public Library(String name, LibraryVersion version, List<Group> groups,
List<ProhibitedVersion> prohibitedVersions) {
this.name = name;
this.version = version;
this.groups = groups;
this.versionProperty = "Spring Boot".equals(name) ? null
: name.toLowerCase(Locale.ENGLISH).replace(' ', '-') + ".version";
this.prohibitedVersions = prohibitedVersions;
this.dependencyVersions = dependencyVersions;
}

public String getName() {
Expand All @@ -93,10 +80,6 @@ public List<ProhibitedVersion> getProhibitedVersions() {
return this.prohibitedVersions;
}

public DependencyVersions getDependencyVersions() {
return this.dependencyVersions;
}

/**
* A version or range of versions that are prohibited from being used in a bom.
*/
Expand Down Expand Up @@ -147,21 +130,14 @@ public static class LibraryVersion {

private final DependencyVersion version;

private final VersionAlignment versionAlignment;

public LibraryVersion(DependencyVersion version, VersionAlignment versionAlignment) {
public LibraryVersion(DependencyVersion version) {
this.version = version;
this.versionAlignment = versionAlignment;
}

public DependencyVersion getVersion() {
return this.version;
}

public VersionAlignment getVersionAlignment() {
return this.versionAlignment;
}

}

/**
Expand Down Expand Up @@ -276,128 +252,4 @@ public String getArtifactId() {

}

public interface DependencyVersions {

String getVersion(String groupId, String artifactId);

default boolean available() {
return true;
}

}

public static class DependencyLockDependencyVersions implements DependencyVersions {

private final Map<String, Map<String, String>> dependencyVersions = new HashMap<>();

private final String sourceTemplate;

private final String libraryVersion;

public DependencyLockDependencyVersions(String sourceTemplate, String libraryVersion) {
this.sourceTemplate = sourceTemplate;
this.libraryVersion = libraryVersion;
}

@Override
public boolean available() {
return !this.libraryVersion.contains("-SNAPSHOT");
}

@Override
public String getVersion(String groupId, String artifactId) {
if (this.dependencyVersions.isEmpty()) {
loadVersions();
}
return this.dependencyVersions.computeIfAbsent(groupId, (key) -> Collections.emptyMap()).get(artifactId);
}

private void loadVersions() {
String source = this.sourceTemplate.replace("<libraryVersion>", this.libraryVersion);
try {
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(URI.create(source).toURL().openStream()))) {
String line;
while ((line = reader.readLine()) != null) {
if (!line.startsWith("#")) {
String[] components = line.split(":");
Map<String, String> groupDependencies = this.dependencyVersions
.computeIfAbsent(components[0], (key) -> new HashMap<>());
groupDependencies.put(components[1], components[2]);
}
}
}
}
catch (IOException ex) {
throw new GradleException("Failed to load versions from dependency lock file '" + source + "'", ex);
}
}

}

public static class DependencyConstraintsDependencyVersions implements DependencyVersions {

private static final Pattern CONSTRAINT_PATTERN = Pattern.compile("api \"(.+):(.+):(.+)\"");

private final Map<String, Map<String, String>> dependencyVersions = new HashMap<>();

private final String sourceTemplate;

private final String libraryVersion;

public DependencyConstraintsDependencyVersions(String sourceTemplate, String libraryVersion) {
this.sourceTemplate = sourceTemplate;
this.libraryVersion = libraryVersion;
}

@Override
public String getVersion(String groupId, String artifactId) {
if (this.dependencyVersions.isEmpty()) {
loadVersions();
}
return this.dependencyVersions.computeIfAbsent(groupId, (key) -> Collections.emptyMap()).get(artifactId);
}

private void loadVersions() {
String version = this.libraryVersion;
if (version.endsWith("-SNAPSHOT")) {
version = version.substring(0, version.lastIndexOf('.')) + ".x";
}
String source = this.sourceTemplate.replace("<libraryVersion>", version);
try {
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(URI.create(source).toURL().openStream()))) {
String line;
while ((line = reader.readLine()) != null) {
Matcher matcher = CONSTRAINT_PATTERN.matcher(line.trim());
if (matcher.matches()) {
Map<String, String> groupDependencies = this.dependencyVersions
.computeIfAbsent(matcher.group(1), (key) -> new HashMap<>());
groupDependencies.put(matcher.group(2), matcher.group(3));
}
}
}
}
catch (IOException ex) {
throw new GradleException(
"Failed to load versions from dependency constraints declared in '" + source + "'", ex);
}
}

}

public static class VersionAlignment {

private final String libraryName;

public VersionAlignment(String libraryName) {
this.libraryName = libraryName;
}

public String getLibraryName() {
return this.libraryName;
}

}

}

0 comments on commit 510c781

Please sign in to comment.