Re: 2.10.0: multiple versionsort.prereleasesuffix buggy?
- From
SZEDER Gábor <szeder@ira.uka.de>
- Date
- Sep 6, 2016, 01:07 UTC
- Message-ID
- <20160906010759.14883-1-szeder@ira.uka.de>
- In-Reply-To
- <20160905232145.fr46rgfb66eeymwp@sigill.intra.peff.net>
Show 40 quoted lines
> On Tue, Sep 06, 2016 at 01:42:28AM +0300, Leho Kraav (Conversion Ready) wrote:
>
> > Here's the testing tree https://github.com/woothemes/woocommerce
> >
> > .git/config has:
> >
> > [versionsort]
> >
> >
> > prereleasesuffix = -beta
> > prereleasesuffix = -RC
> >
> > $ git tag -l --sort=version:refname
> > [...]
> > 2.6.0-RC1
> > 2.6.0-RC2
> > 2.6.0-beta-1
> > 2.6.0-beta-2
> > 2.6.0-beta-3
> > 2.6.0-beta-4
>
> So that seems wrong. Even weirder, if I set _only_ "-beta", I get:
>
> $ git tag -l --sort=version:refname | grep -v ^2.6.0
> 2.6.0-beta-2
> 2.6.0-beta-3
> 2.6.0-beta-4
> 2.6.0
> 2.6.0-RC1
> 2.6.0-RC2
> 2.6.0-beta-1
>
> Umm...what? beta-1 is sorted away from its companions? That's weird.
>
> I wondered if the presence of "-" after the suffix ("beta-1" rather than
> "beta1") would matter. It looks like that shouldn't matter, though; it's
> purely doing a prefix match on "do these names differ at a prerelease
> suffix".
>
> But something certainly seems wrong.Some of the weirdness is caused by the '-' at the _beginning_ of the suffixes, because versioncmp() gets confused by suffixes starting with the same character(s).
versioncmp() consumes two tagnames up to the first different character and then calls swap_prereleases() to try to match prerelease suffixes starting at those characters. This works fine when comparing a release with a prerelease, e.g. "2.6.0" and "2.6.0-RC1", because swap_prereleases() gets "" and "-RC1" and the latter does match one of the configured suffixes. However, when comparing two prereleases, e.g. "2.6.0-beta1" and "2.6.0-RC1", then the '-' is consumed from both tagnames because the first differing characters are 'b' and 'R', thus swap_prereleases() gets "beta1" and "RC1", which, of course, don't match any of the configured suffixes without the leading '-'.
It's way past my bedtime, so for the time being I can only come up with a hacky configuration workaround that seems to deliver the expected results:
[versionsort] prereleasesuffix = beta prereleasesuffix = -beta prereleasesuffix = RC prereleasesuffix = -RC
Best, Gábor