Maven Version Order Spec: Implicit Initial Separator and Trimming

Ron Desmond <[email protected]>
Newsgroups gmane.comp.jakarta.turbine.maven.user
Message-ID <CAEtb+aNf5u+EbkEQz5xWEgcT_hcpO4SVqBrxdp7pwzi89ccdew@mail.gmail.com>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.