Versioning

Robert Goldman rpgoldman at sift.info
Wed Nov 17 22:42:21 UTC 2021


That sounds like a great solution.

On 17 Nov 2021, at 16:33, Eric Timmons wrote:

> On 11/17/21 4:55 PM, Robert Goldman wrote:
>> On 17 Nov 2021, at 15:12, Eric Timmons wrote:
>>
>>     On 11/17/21 2:38 PM, Robert Goldman wrote:
>>
>>         On 17 Nov 2021, at 13:31, Robert Dodier wrote:
>>
>>         On Wed, Nov 17, 2021 at 10:45 AM Robert Goldman 
>> rpgoldman at sift.info
>>         <mailto:rpgoldman at sift.info <mailto:rpgoldman at sift.info>> 
>> wrote:
>>
>>         I favor something like this because it would be nice to have
>>         prerelease versions of ASDF that perform version checks 
>> properly.
>>
>>         What I mean is, if we are going to add a feature in version 
>> 3.4,
>>         right now that would be in a prerelease version with a 
>> version
>>         number of something like 3.3.5.22
>>
>>         It would be a lot better for realistic testing if we could
>>         instead use 3.4.0-alpha1 or 3.4.0-1 and have ASDF know that
>>         3.4.0-1 comes before 3.4.0, not after.
>>
>>         Hi Robert, hi everyone. I haven't been following closely, but 
>> while
>>         you are working out details, let me just mention that I 
>> recommend
>>         against version numbers that require special interpretation 
>> to
>>         discover their ordering, e.g. 3.4.0-1 < 3.4.0.
>>
>>         Mostly I'm just thinking that somebody's not going to get the 
>> memo
>>         (it's usually me).
>>
>>         For what it's worth, and all the best.
>>
>>         I guess that would be an argument for using something more
>>         obvious than |-|, like the string |alpha| so |3.4.0-alpha1| 
>> or
>>         |3.4.0alpha1| instead of |3.4.0-1| since there the meaning
>>         should be relatively obvious.
>>
>>         My feeling is that if a user misinterprets |3.4.0-1|, then 
>> shame
>>         on me. But if a user misinterprets |3.4.0alpha1| then shame 
>> on them.
>>
>>         I'm not sure how that would align with semver...
>>
>>     Erik already sent out some examples of ordering with semver. But 
>> it
>>     is worth noting that 3.4.0-1 *is* valid semver and the ordering
>>     would be 3.4.0-1 < 3.4.0-alpha
>>
>>     So to prevent misinterpretation of 3.4.0-1, ASDF could either
>>     promise to always use something like alpha/beta/etc, use 
>> something
>>     else like PEP440 (I believe that grammar always requires an
>>     alphabetic character for pre-releases), or bake its own grammar.
>>
>>     One thing that's nice about the semver grammar is its 
>> flexibility. I
>>     have some scripts that can generate a version string from a git 
>> repo
>>     that lets you easily order versions based on things like when 
>> they
>>     branched off the default branch. But if we want ASDF to disallow
>>     things like 3.4.0-1, I'm happy to build my own system that uses 
>> the
>>     new API to allow the use of semver strings.
>>
>>     Another option is to choose something compatible with Debian's
>>     version strings. I'm having a little trouble grokking it at the
>>     moment, but it seems to be even more freeform than semver and 
>> adds
>>     an optional epoch prefix.
>>
>> What might be nice would be to support a /subset/ of semver by 
>> default -- not allowing the numerical prerelease flagged with |-| -- 
>> but do so in a way that is extensible.
>>
>> Here's my rationale: I would like to provide a relatively simple 
>> semantic versioning that is also compatible with automatically 
>> detecting and rejecting ill-formed version strings.
>>
>> So, for example, we could (by default!) split the version strings by 
>> |#\.| and |#\-| and /reject/ any string bounded by |#\.| that is not 
>> numerical.
>>
>> We could demand, again by default, that the substring following the 
>> |#\-| be of some constrained form: e.g., Greek letter name followed 
>> by optional numeral. For that matter, we could just say "hey, alpha 
>> and beta are enough" and reject anything but those two. That would be 
>> a nice alternative to having a big table of Greek letter names in 
>> ASDF!
>>
>> Finally, for those who want to really go for it, we could add a 
>> |:version-scheme| keyword to |defsystem|, which would initially 
>> default to |:unconstrained|, but then through the standard process of 
>> warning and then erroring, migrate to |:standard| (or perhaps 
>> |:asdf|) as the default, but let anyone who wants to make up their 
>> own versioning scheme. |semver| would be an obvious extension.
>>
>> Hm. That's a bit more complex than I had hoped, but it would mean 
>> ASDF systems would initially continue to work, it provides for some 
>> error checking, and a path to extension.
>>
>
> I see what you're getting at. I already have the full semver parsing 
> and ordering functionality implemented as part of !169. So I'd lean 
> toward shipping :semver and :standard/:asdf out of the box.
>
> :standard/:asdf would signal an error if the version string is not of 
> the form X[-Y[.Z]]. Where X is a series of dot separated integers 
> (what we have currently), Y is in [alpha, beta, rc], and Z is a single 
> integer.
>
> That would make :standard versioning a strict subset of :semver, with 
> the same ordering relations. It also establishes clearly that we think 
> alpha, beta, and rc are all that you need a vast majority of the time.
>
> -Eric



More information about the asdf-devel mailing list