2
0
Fork 0
mirror of https://github.com/ethauvin/bld.git synced 2025-04-26 00:37:10 -07:00

Preserve the project's version as a semantic version number. Created two version of parsing version string, one falls back to generic version, the other returns VersionNumber.UNKNOWN when parsing fails like in previous bld versions.

This commit is contained in:
Geert Bevin 2024-07-20 02:44:51 -04:00
parent fa0ac43828
commit d605ac1242
17 changed files with 169 additions and 60 deletions

View file

@ -52,7 +52,7 @@ public class BaseProject extends BuildExecutor {
* @see #version()
* @since 1.5
*/
protected Version version = null;
protected VersionNumber version = null;
/**
* The project's main class.
*
@ -684,7 +684,7 @@ public class BaseProject extends BuildExecutor {
* @since 1.5
*/
public Version version(String description) {
return VersionNumber.parse(description);
return Version.parse(description);
}
/**
@ -1198,7 +1198,7 @@ public class BaseProject extends BuildExecutor {
*
* @since 1.5
*/
public Version version() {
public VersionNumber version() {
if (version == null) {
throw new IllegalStateException("The version variable has to be set.");
}

View file

@ -80,7 +80,7 @@ public record Dependency(String groupId, String artifactId, Version version, Str
var groupId = matcher.group("groupId");
var artifactId = matcher.group("artifactId");
var version = VersionNumber.parse(matcher.group("version"));
var version = Version.parse(matcher.group("version"));
var classifier = matcher.group("classifier");
var type = matcher.group("type");

View file

@ -34,7 +34,7 @@ public record PomDependency(String groupId, String artifactId, String version, S
return new Dependency(
groupId(),
artifactId(),
VersionNumber.parse(version()),
Version.parse(version()),
classifier(),
type(),
exclusions(),

View file

@ -4,12 +4,42 @@
*/
package rife.bld.dependencies;
import static rife.bld.dependencies.VersionNumber.parseOrNull;
/**
* Represents the basic functionality of a dependency version.
*
* @since 2.0
*/
public interface Version extends Comparable<Version> {
/**
* Parses a version from a string representation.
* <p>
* If the string can't be successfully parsed as a semantic {@link VersionNumber},
* it will be parsed as a {@link VersionGeneric}.
*
* @param version the version string to parse
* @return the parsed version instance
* @since 2.0
*/
static Version parse(String version) {
if (version == null || version.isEmpty()) {
return VersionNumber.UNKNOWN;
}
var result = parseOrNull(version);
if (result != null) {
return result;
}
// bld doesn't support version ranges at this time
if (version.startsWith("[") || version.startsWith("(")) {
return VersionNumber.UNKNOWN;
}
return new VersionGeneric(version);
}
/**
* Retrieves the qualifier of the version.
*

View file

@ -48,11 +48,9 @@ public class VersionGeneric implements Version {
}
/**
* Returns this instance tokenized representation as unmodifiable list.
*
* @since 2.0
* Visible for testing.
*/
public List<Item> asItems() {
List<Item> asItems() {
return items_;
}
@ -72,7 +70,7 @@ public class VersionGeneric implements Version {
/**
* Visible for testing.
*/
public static void trimPadding(List<Item> items) {
static void trimPadding(List<Item> items) {
Boolean number = null;
var end = items.size() - 1;
for (var i = end; i > 0; i--) {

View file

@ -37,25 +37,35 @@ public record VersionNumber(Integer major, Integer minor, Integer revision, Stri
/**
* Parses a version number from a string representation.
* <p>
* If the string can't be successfully parsed, {@link VersionNumber#UNKNOWN} will be returned.
* If the string can't be successfully parsed as a semantic version,
* {@link VersionNumber#UNKNOWN} will be returned.
*
* @param version the version string to parse
* @return a parsed instance of {@code VersionNumber}; or
* {@link VersionNumber#UNKNOWN} when the string couldn't be parsed
* @since 1.5
*/
public static Version parse(String version) {
public static VersionNumber parse(String version) {
if (version == null || version.isEmpty()) {
return UNKNOWN;
}
var result = parseOrNull(version);
if (result == null) {
result = UNKNOWN;
}
return result;
}
static VersionNumber parseOrNull(String version) {
if (version == null) {
return null;
}
var matcher = VERSION_PATTERN.matcher(version);
if (!matcher.matches()) {
// bld doesn't support version ranges at this time
if (version.startsWith("[") || version.startsWith("(")) {
return UNKNOWN;
}
return new VersionGeneric(version);
return null;
}
var major = matcher.group("major");

View file

@ -63,9 +63,9 @@ public class Xml2MavenMetadata extends Xml2Data implements MavenMetadata {
public void endElement(String uri, String localName, String qName) {
switch (qName) {
case "latest" -> latest_ = VersionNumber.parse(characterData_.toString());
case "release" -> release_ = VersionNumber.parse(characterData_.toString());
case "version" -> versions_.add(VersionNumber.parse(characterData_.toString()));
case "latest" -> latest_ = Version.parse(characterData_.toString());
case "release" -> release_ = Version.parse(characterData_.toString());
case "version" -> versions_.add(Version.parse(characterData_.toString()));
case "timestamp" -> snapshotTimestamp_ = characterData_.toString();
case "buildNumber" -> snapshotBuildNumber_ = Integer.parseInt(characterData_.toString());
case "snapshot" -> isSnapshot_ = true;

View file

@ -197,7 +197,7 @@ class Xml2MavenPom extends Xml2Data {
switch (qName) {
case "parent" -> {
if (isChildOfProject()) {
var parent_dependency = new Dependency(resolveMavenProperties(lastGroupId_), resolveMavenProperties(lastArtifactId_), VersionNumber.parse(resolveMavenProperties(lastVersion_)));
var parent_dependency = new Dependency(resolveMavenProperties(lastGroupId_), resolveMavenProperties(lastArtifactId_), Version.parse(resolveMavenProperties(lastVersion_)));
var parent = new DependencyResolver(resolution_, retriever_, repositories_, parent_dependency).getMavenPom(parent_);
parent.mavenProperties_.keySet().removeAll(mavenProperties_.keySet());
@ -224,7 +224,7 @@ class Xml2MavenPom extends Xml2Data {
var dependency = new PomDependency(lastGroupId_, lastArtifactId_, lastVersion_, lastClassifier_, lastType_, lastScope_, lastOptional_, exclusions_, parent_);
if (collectDependencyManagement_) {
if (dependency.isPomImport()) {
var import_dependency = new Dependency(resolveMavenProperties(lastGroupId_), resolveMavenProperties(lastArtifactId_), VersionNumber.parse(resolveMavenProperties(lastVersion_)));
var import_dependency = new Dependency(resolveMavenProperties(lastGroupId_), resolveMavenProperties(lastArtifactId_), Version.parse(resolveMavenProperties(lastVersion_)));
var imported_pom = new DependencyResolver(resolution_, retriever_, repositories_, import_dependency).getMavenPom(parent_);
imported_pom.dependencyManagement_.keySet().removeAll(dependencyManagement_.keySet());
var resolved_dependencies = new LinkedHashSet<PomDependency>();