[ 
https://issues.apache.org/jira/browse/JCRVLT-672?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17648031#comment-17648031
 ] 

Hans-Peter Stoerr commented on JCRVLT-672:
------------------------------------------

[~kwin] :

Ouch! It seems I've unknowingly opened a can of worms there. The maven 
versioning oder specification 
https://maven.apache.org/pom.html#Version_Order_Specification
is amazingly complex when it comes to parsing and comparing the stuff after the 
first dash. There are also other 
differences: maven treats 1.0.0 and 1.0 and 1 as the same, Version.compareTo 
doesn't so far.

For a start: maven segments versions differently: in addition to - and . it 
separates digit sequences from non-digit 
sequences: 1-1.foo-bar1baz would be split into 1 1 foo bar 1 baz . Moreover the 
ordering depends on whether the 
separators are - or . (digit vs. non-digit separation is treated as -). We 
could change Version.getNormalizedSegments
() to also split on digit / non-digit sequences, but it wouldn't be enough to 
determine the ordering, anyway, and 
that also would have a risk of breaking something.

I guess the only way to be 100% compatible to maven would be to copy e.g. 
[ComparableVersion.java|https://github.com/apache/maven/blob/maven-3.8.6/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java]
 as 
a package private class into org.apache.jackrabbit.vault.packaging and use that 
for comparisons.
That is, obviously, also the easiest way to solve the problem. One problem with 
this is that the segmentation that is done to compare the versions is not quite 
compatible with Version.getNormalizedSegments(), which might be confusing at 
times.

Or we could make some kind of compromise that behaves the same for more common 
things.

Do you have any opinions on that which help narrow down the solution space?

> Provide a Version comparison function for "is newer" checks
> -----------------------------------------------------------
>
>                 Key: JCRVLT-672
>                 URL: https://issues.apache.org/jira/browse/JCRVLT-672
>             Project: Jackrabbit FileVault
>          Issue Type: Improvement
>    Affects Versions: 3.6.6
>            Reporter: Hans-Peter Stoerr
>            Priority: Minor
>
> I suggest to add a function to org.apache.jackrabbit.vault.packaging.Version 
> that provides a sensible partial ordering for checking whether one package is 
> newer than another.
> Background:
> [org.apache.jackrabbit.vault.packaging.Version#compareTo|https://github.com/apache/jackrabbit-filevault/blob/jackrabbit-filevault-3.6.6/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/Version.java#L157]
>  provides a nice function to sort package versions e.g. for the purpose of 
> displaying them in a predictable order that is close to the probable 
> timeline. But sometimes you want an "is newer than" relationship - e.g. for a 
> sanity check during package installation that you don't install an older over 
> a newer package. As far as I know, Adobe AEM is actually (ab-)using that 
> compareTo function for that purpose. That is a problem, because if you deploy 
> e.g. 1.2.3-SNAPSHOT for a while on a server and then create a release 1.2.3, 
> it'll refuse automatic installation because it wrongly thinks 1.2.3-SNAPSHOT 
> is newer than 1.2.3.
> Now, obviously you cannot fix that AEM problem here, but you could provide a 
> function at Version for future use, that would be a nicely useable "is newer 
> than" relationship for that purpose, and add a comment warning people not to 
> use Version.compareTo for such a sanity check. That'd be nice for AEM usage, 
> but also for other package managers, like our [Composum package 
> manager|https://www.composum.com/home/nodes/pckgmgr.html?pages.locale=de].
> While the ordering of the numerical prefix (which is also implemented by 
> Version.compareTo) is pretty widely used, there is no widely used ordering 
> for the suffixes - they could be anything like -SNAPSHOT, -SNAPSHOT-12, -rc1, 
> -alpha, -testing and whatnot. So it's not possible to give a full order for 
> that purpose. My suggestion is to provide a partial ordering based on the 
> numerical prefix, but to ignore the suffix completely. Perhaps provide a 
> function Version.compareNumericPrefix ?



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to