[ https://issues.apache.org/jira/browse/MNG-7700?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
David M. Lloyd updated MNG-7700: -------------------------------- Description: The canonicalization logic for versions is incorrect. Using the method {{ComparableVersion#getCanonical}} as in {{new ComparableVersion(input).getCanonical()}}, the following results can be observed: ||Input||3.8.6 Output||3.8.6 OK?||3.9.0 Output||3.9.0 OK?|| |{{1}}|{{1}}|yes|{{1}}|yes| |{{0.1}}|{{0.1}}|yes|{{0.1}}|yes| |{{0-1}}|{{1}}|no|{{1}}|no| |{{1.x}}|{{1.x}}|yes|{{1-x}}|maybe*| |{{1-x}}|{{1-x}}|yes|{{1-x}}|yes| |{{0.x}}|{{0.x}}|yes|{{x}}|no| |{{0-x}}|{{x}}|no|{{x}}|no| |{{x}}|{{x}}|yes|{{x}}|yes| |{{0.rc}}|{{0.rc}}|yes|{{rc}}|no| The "OK?" columns indicate whether parsing the canonical version string will yield a {{ComparableVersion}} instance that is {{equal}} to one constructed from the original input, i.e. it's internally consistent. The "maybe*" item indicates that starting with 3.9.0, version `1.x` is now considered to be equal to `1-x`. I'm not sure if this is a bug or not, or was intentional or not, but it is definitely a change. These canonicalizations seem to have gotten less consistent in the move to 3.9.0. was: The canonicalization logic for versions is incorrect. Using the method {{ComparableVersion#getCanonical}} as in {{new ComparableVersion(input).getCanonical()}}, the following results can be observed: ||Input||3.8.6 Output||3.8.6 OK?||3.9.0 Output||3.9.0 OK?|| |{{1}}|{{1}}|yes|{{1}}|yes| |{{0.1}}|{{0.1}}|yes|{{0.1}}|yes| |{{0-1}}|{{1}}|no|{{1}}|no| |{{1.x}}|{{1.x}}|yes|{{1-x}}|maybe*| |{{1-x}}|{{1-x}}|yes|{{1-x}}|yes| |{{0.x}}|{{0.x}}|yes|{{x}}|no| |{{0-x}}|{{x}}|no|{{x}}|no| |{{x}}|{{x}}|yes|{{x}}|yes| The "OK?" columns indicate whether parsing the canonical version string will yield a {{ComparableVersion}} instance that is {{equal}} to one constructed from the original input, i.e. it's internally consistent. The "maybe*" item indicates that starting with 3.9.0, version `1.x` is now considered to be equal to `1-x`. I'm not sure if this is a bug or not, or was intentional or not, but it is definitely a change. These canonicalizations seem to have gotten less consistent in the move to 3.9.0. > Improper canonicalization of versions > ------------------------------------- > > Key: MNG-7700 > URL: https://issues.apache.org/jira/browse/MNG-7700 > Project: Maven > Issue Type: Bug > Components: Core > Affects Versions: 3.8.7, 3.9.0 > Reporter: David M. Lloyd > Priority: Major > > The canonicalization logic for versions is incorrect. > Using the method {{ComparableVersion#getCanonical}} as in {{new > ComparableVersion(input).getCanonical()}}, the following results can be > observed: > ||Input||3.8.6 Output||3.8.6 OK?||3.9.0 Output||3.9.0 OK?|| > |{{1}}|{{1}}|yes|{{1}}|yes| > |{{0.1}}|{{0.1}}|yes|{{0.1}}|yes| > |{{0-1}}|{{1}}|no|{{1}}|no| > |{{1.x}}|{{1.x}}|yes|{{1-x}}|maybe*| > |{{1-x}}|{{1-x}}|yes|{{1-x}}|yes| > |{{0.x}}|{{0.x}}|yes|{{x}}|no| > |{{0-x}}|{{x}}|no|{{x}}|no| > |{{x}}|{{x}}|yes|{{x}}|yes| > |{{0.rc}}|{{0.rc}}|yes|{{rc}}|no| > The "OK?" columns indicate whether parsing the canonical version string will > yield a {{ComparableVersion}} instance that is {{equal}} to one constructed > from the original input, i.e. it's internally consistent. > The "maybe*" item indicates that starting with 3.9.0, version `1.x` is now > considered to be equal to `1-x`. I'm not sure if this is a bug or not, or was > intentional or not, but it is definitely a change. > These canonicalizations seem to have gotten less consistent in the move to > 3.9.0. -- This message was sent by Atlassian Jira (v8.20.10#820010)