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:
parent
fa0ac43828
commit
d605ac1242
17 changed files with 169 additions and 60 deletions
|
@ -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.");
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
|
||||
|
|
|
@ -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(),
|
||||
|
|
|
@ -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.
|
||||
*
|
||||
|
|
|
@ -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--) {
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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>();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue