SMAPI - Stardew Modding API

SMAPI - Stardew Modding API

971k Downloads

Correct semantic version tag precedence

Pathoschild opened this issue · 1 comments

commented

SMAPI applies the semantic versioning standard for mod versions, but the way it compares versions isn't fully compliant.

Here's an overview of our compliance with the spec:

  • Precedence MUST be calculated by separating the version into major, minor, patch and pre-release identifiers in that order (Build metadata does not figure into precedence).

    ✓ OK!

  • Precedence is determined by the first difference when comparing each of these identifiers from left to right as follows: Major, minor, and patch versions are always compared numerically. Example: 1.0.0 < 2.0.0 < 2.1.0 < 2.1.1.

    ✓ OK!

  • When major, minor, and patch are equal, a pre-release version has lower precedence than a normal version. Example: 1.0.0-alpha < 1.0.0.

    ✓ OK!

  • Precedence for two pre-release versions with the same major, minor, and patch version MUST be determined by comparing each dot separated identifier from left to right until a difference is found as follows: identifiers consisting of only digits are compared numerically and identifiers with letters or hyphens are compared lexically in ASCII sort order. Numeric identifiers always have lower precedence than non-numeric identifiers. A larger set of pre-release fields has a higher precedence than a smaller set, if all of the preceding identifiers are equal. Example: 1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0.

    ✘ Non-compliant. Pre-release tags are always compared lexically as one identifier.

commented

Fixed in the develop branch for the upcoming 1.5 release.