discussion on package-version numbers... (PR 56961)

Jacques A. Vidrine nectar at FreeBSD.org
Thu May 6 15:08:59 PDT 2004

On Thu, May 06, 2004 at 02:36:41PM -0700, Kris Kennaway wrote:
> On Thu, May 06, 2004 at 04:24:42PM -0500, Jacques A. Vidrine wrote:
> > Another sticky area is e.g. openssh 3.8p2 versus 3.8.1p2.  Under
> > current rules, 3.8p2 > 3.8.1p2, which is obviously not intended by
> > the ports committer.  A workaround would have been to use 3.8.p2 <
> > 3.8.1.p2.  I don't particularly like that, because 3.8 > 3.8.p2 --- it
> > wouldn't be a problem in practice, since all openssh portable versions
> > have the `p', but it is ugly.
> > 
> > This is really very similar to the previous thing... there is an
> > inadvertant attempt to use `p' to add another level of structure to
> > the version name.  The problem is again clearer when it is viewed like
> > so: 3.8.2 >
> > 
> > Hmm, I guess this might be part of why Oliver wanted to introduce a
> > special behavior for `pl' ?
> Some ports use "p1" for "patchlevel 1", some use it for "prerelease
> version 1".  Since we can't have it both ways, committers need to
> remember to use pkg_version -t and some careful foresight to avoid
> running version numbers backwards.  However ultimately there will be
> continue to be mistakes made, even if version monotonicity is somehow
> enforced at commit-time.

That's true, mistakes will happen.  But simpler conventions could make
the mistakes more obvious.

Strawman version grammar

  <version>  ::= <major> (<letter> (<minor>)? )?  '_' <revision> ',' <epoch>
  <major>    ::= <dotted>
  <minor>    ::= <dotted>
  <dotted>   ::= <integer> ('.' <dotted>)?
  <revision> ::= <integer>
  <epoch>    ::= <integer>
  <letter>   ::= 'a'..'z'
  <integer>  ::= 32-bit integer

The components are compared in this order:
  { epoch, major, letter, minor, revision }
with this exception:
  - Certain combinations represent `prereleases'.  These are
    versions with a <letter> component, but no <minor> component.
    All prerelease versions are less than all non-prerelease versions
    with the same <epoch> and <major> components.

The troublesome ports we discussed are now tame.

   3.8.1p2 > 3.8p2 > 3.8 > 3.8b > 3.8a
   1.0.1x2003.09.16 > 1.0x2003.09.16

Perhaps we want '+' to be a `letter' :-)

Obviously, things like 1.0rc1, 1.0rc2,... (where RC is release
candidate) would need to become 1.0a, 1.0b...  But one exception sure
seems like a win.  Now, what have I left out ? :-)

You might even be able to kill the exception if you allow
<uppercase-letter> and <lowercase-letter> to have different meanings...

Jacques Vidrine / nectar at celabo.org / jvidrine at verio.net / nectar at freebsd.org

More information about the cvs-ports mailing list