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 > 3.8.1.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...
Cheers,
--
Jacques Vidrine / nectar at celabo.org / jvidrine at verio.net / nectar at freebsd.org