xsc / lein-ancient

Check your Projects for outdated Dependencies
MIT License
561 stars 33 forks source link

Any good way to exclude weird versions? #109

Closed gfredericks closed 3 years ago

gfredericks commented 5 years ago

I ran into the fact that org.clojure/tools.logging has a 0.5.0-alpha.1 release that is not being recognized as "qualified", presumably because it has the uncommon . near the end.

This could be "fixed" in version-clj, but I'm not sure it's a good idea, since it would be just adding special logic for a particular variant of arbitrarily weird release strings.

Is there some other feature that could be added to lein-ancient that would allow dealing with this? I'm adding :upgrade false for now, but that's unfortunate since I'd like to find out when a real release comes out.

gfredericks commented 5 years ago

For the record, version 0.5.0 was just released, which solves that particular instance of the problem.

xsc commented 3 years ago

Hello! For the simple case, I was able to fix this in version-clj (but there are surely others that break it again). If you're still interested in this, could you verify the behaviour using [lein-ancient "1.0.0-RC1"]?

gfredericks commented 3 years ago

This would be difficult to verify given the 0.5.0 release mentioned above, right?

I think we'd need a library to intentionally release an analogously weird version that otherwise looks like the latest.

It's also true that I'm not personally exposed to this issue anymore, but thanks for working on it.

xsc commented 3 years ago

I've found this one, as a treasure trove of weird versions: https://mvnrepository.com/artifact/sh.ory.kratos/kratos-client

Unfortunately, as mentioned, my fix was only for subset of versions, and this artifact still causes problems:

$ lein ancient show-versions sh.ory.kratos/kratos-client
retrieving versions for sh.ory.kratos/kratos-client from 2 repositories ...

  * 27 version(s) found.
  * latest release:          "0.5.3-alpha.1.pre.0"
  * latest qualified:        "0.5.4-alpha.1"
  * all releases:            [ "0.5.3-alpha.1.pre.0" "0.5.0-alpha.1.pre.1" "0.0.3-alpha.8+oryOS.15" ]
  * all qualified versions:  [ "0.5.4-alpha.1" "0.5.3-alpha.1" "0.5.2-alpha.1" "0.5.1-alpha.1" "0.5.0-alpha.1"
                               "0.4.6-alpha.1" "0.3.0-alpha.1" "0.2.1-alpha.1" "0.2.0-alpha.2" "0.1.1-alpha.1"
                               "0.1.0-alpha.6" "0.1.0-alpha.5" "0.1.0-alpha.4" "0.1.0-alpha.1" "0.0.3-alpha.15"
                               "0.0.3-alpha.14" "0.0.3-alpha.11" "0.0.3-alpha.10" "0.0.3-alpha.7" "0.0.3-alpha.5"
                               "0.0.3-alpha.4" "0.0.3-alpha.3" "0.0.3-alpha.2" "0.0.3-alpha.1" ]

We correctly have 0.5.4-alpha.1 marked as qualified, but 0.0.3-alpha.8+oryOS.15 is treated as a release version.

It seems to be a decision which versions we have to consider unsupported by version-clj. There are, for example, some interestingpostgres ones, e.g. 9.1-901-1.jdbc4, 9.4-1205-jdbc41, 42.1.3.jre6. Madness, really.

xsc commented 3 years ago

Version 1.0.0-RC3 gets it right now:

$ lein ancient show-versions sh.ory.kratos/kratos-client
retrieving versions for sh.ory.kratos/kratos-client from 2 repositories ...

  * 27 version(s) found.
  * latest qualified:        "0.5.4-alpha.1"
  * all qualified versions:  [ "0.5.4-alpha.1" "0.5.3-alpha.1" "0.5.3-alpha.1.pre.0" "0.5.2-alpha.1" "0.5.1-alpha.1"
                               "0.5.0-alpha.1" "0.5.0-alpha.1.pre.1" "0.4.6-alpha.1" "0.3.0-alpha.1" "0.2.1-alpha.1"
                               "0.2.0-alpha.2" "0.1.1-alpha.1" "0.1.0-alpha.6" "0.1.0-alpha.5" "0.1.0-alpha.4"
                               "0.1.0-alpha.1" "0.0.3-alpha.15" "0.0.3-alpha.14" "0.0.3-alpha.11" "0.0.3-alpha.10"
                               "0.0.3-alpha.8+oryOS.15" "0.0.3-alpha.7" "0.0.3-alpha.5" "0.0.3-alpha.4" "0.0.3-alpha.3"
                               "0.0.3-alpha.2" "0.0.3-alpha.1" ]