Le 09/10/2019 à 03:26, Gregory Szorc a écrit :
Our new versioning scheme will be YYYY.[M]M.N. e.g. 2020.5.0 or 2020.10.1. This scheme consists of the 4 digit year, a 1-2 digit month, and a monotonically increasing point release, starting at 0. This scheme is compatible with our existing versioning scheme, has a major version that is greater than 5, and doesn't have a leading 0 in the month field (which could confuse version parsers).

Please don't

Dates are not an appropriate versioning scheme. The only sane versioning scheme is Semantic Versioning [0] which guarantees API compatibility in:

1. Mercurial internal API. Just look how many developers hated with passion that Mercurial breaks its API making external extensions very painful to write ; 2. User change. We currently have a strong backward compatibility that we keep like a ball and chain since decades because we explicitly say that we don't want to break existing tooling. But this refrain ourselves of going ahead and change things, cleanup them and make better things. The example of hg grep is a good candidate for this ; 3. Stable releases in distributions. Many distributions fail to deliver Mercurial + TortoiseHg together because they are mostly tied in their versions and often TortoiseHg is being broken because Mercurial is no longer API compatible with.

All theses issues are no longer existing with proper Semantic Versioning. Also, imagine the following scenario using dates:

In February, you release the hypothetical Mercurial 5.2 named 2020.02.dd. Fine.

In March, we realized there is a bug important to be fixed, we need to release a simple bugfix version with absolutely no user visible change. You release it as 2020.03.dd. Not fine.

In June, we implement a new feature that is still API compatible however it may provide more power to the user and start deprecating things. You release it as 2020.05.dd. Absolutely not fine.

So during 2020, you'll have 2020.02.dd, 2020.03.dd, 2020.05.dd without any information on which version is supposed to still be compatible or being a simple bugfix release. Having to search the changelog in details to see if you can upgrade or not in your distribution.

Dates are simply not the correct way to mark a version. Especially since features, bugs, incompatibilities are not fixed at specific time points.

And I personally would like to see a Mercurial 6.y.z version where we could remove all deprecated things for a good time. I also don't understand why we keep creating releases at specific dates while not just release “once it's ready”.

To be honest, the only area where dates are appropriates is about providing pure data. Example: SSL certificates, timezones information. And that's also almost the only package on my Linux distributions that are versioned with dates.

Succinctly, we decided to adopt calendar versioning because Mercurial's version numbers don't have much semantic meaning and may confuse users who think the major version number changes imply breaking changes. Furthermore, calendar versions may help users better understand how old their Mercurial version is.

And yes, this is exactly because it confuse users that we should follow semantic versioning now. Dates are even worse. It's because dates are not appropriate that almost no software use them.

[0]: https://semver.org

--
David
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to