Hi,
I'm ironing out my understanding of the Maven Version Order Spec
<https://maven.apache.org/pom.html#Version_Order_Specification> and had
three questions: one was related to an implicit separator before the
beginning of versions, and the next two were related to trimming.
------------
*Implicit Separator*
>From my (limited) understanding, the maven-artifact-3.9.11 tool seems to
use hyphens to create a ListItem, and an initial hyphen would suggest the
creation of the tokens list. So if the version begins with a '-', there's
a nested list because the tokens are an empty non-numeric segment (the
implicit initial hyphen) followed by the hyphen-separator numeric token
"-1". The maven-artifact jar confirms this for versions "1" and "-1",
which results in 1 > -1:
tokens(1) = [1]
tokens(-1) = [[1]]
1 > -1
----
I did run into one seeming inconsistency for this idea when the tool
compares "sp" and "ga-1"
tokens(sp) = -sp = [sp]
tokens(ga-1) = -1 = [[1]] // trimming removes "ga"
*sp < ga-1 // maven-artifact output is unexpected because sp > "" *
----
The argument may be made that the *initial implicit separator is a period*,
and that all versions are enclosed by a list. This would explain the
nested list of "-1":
tokens(sp) = .sp = [sp] // all versions are a ListItem
tokens(ga-1) = .ga-1
= -1 // trimming starting from the last hyphen
= [[1]] // ListItem "-1" is enclosed within the initial list
sp < [-1] // special qualifier "sp" is less than hyphen-numeric token [1]
----
The implicit period separator still holds for "-1" due to normalization and
trimming:
tokens(-1) = .-1
= 0.0-1 // normalization adds zeroes
= -1 // trimming removes zeroes
= [[1]] // initial list holds a hyphen-numeric token
------------
*Trimming*
The remaining confusion I had was related to trimming: consider "--1--" and
"--1-"
My understanding of the spec would be the following (excluding the initial
separator idea above):
tokens(--1--)
= -0-1-0-0 // normalization: "Empty tokens are replaced with "0" "
= -1 // trimming: "the trailing "null" values...are
trimmed. This process is repeated at each remaining hyphen "
= [[1]] // initial list (or implicit hyphen) enclosing
hyphen-numeric token
tokens(--1-)
= -0-1-0
= -1
= [[1]]
However, the maven-artifact output is different:
*1. -1-- -> 1; tokens: [[1]] -1-- > --1-2. --1- -> 1; tokens: [[[1]]]*
It seems like trimming is not happening after the "-1" token.
----
ABC vs. -ABC Problem
I'm having trouble reconciling the following case of "abc" vs. "-abc". Via
the trimming logic, I'd expect
tokens(-abc) = "0-abc" (empty tokens replace with "0")
= "abc" (trimming)
= tokens(abc)
but the output of the tool is below:
*1. abc -> abc; tokens: [abc] abc < -abc2. -abc -> abc; tokens: [[abc]]*
------------
So to recap, had three questions:
1) should versions be treated as if there's an implicit separator?
2) how should trimming/tokenization work for "--1--" and "--1-"?
3) how should trimming/tokenization work for "abc" and "-abc"?
Hope this isn't too confusing and/or lengthy. Thanks for your time and
have a good day!
Best,
Ron