On Sun, Jan 31, 2021 at 12:21:11PM +0100, Geert Stappers wrote:
> De : Simon Kelley <si...@thekelleys.org.uk>
> Envoyé : samedi 30 janvier 2021 00:19
> > On 26/01/2021 16:55, M. Buecher wrote:
> > > On 2021-01-26 17:41, M. Buecher wrote:
> > >> On 2021-01-26 00:43, Lonnie Abelbeck wrote:
> > >>> On Jan 25, 2021, at 5:21 PM, Lonnie Abelbeck wrote:
> > >>>>
> > >>>> The version string generated is "2.84rc2"
> > >>>>
> > >>>> $ cat dnsmasq-2.84/VERSION
> > >>>> (HEAD -> master, tag: v2.84rc2, tag: v2.84, origin/master, origin/HEAD)
> > >>>
> > >>> This patch solves the problem:
>            ...
> > >>>
> > >>
> > >> Actually sort is not good at sorting semantic versions [1].
> > >> In some cases '-r' will work (2.84, 2.83-post1, 2.83) and in others it
> > >> won't (2.84-rc1, 2.84, 2.83). Same applies for sort without '-r'.
> > >>
> > >> [1] https://semver.org/
> > >>
> > >> Just my two cents
> > >> Maddes
> > >
> > > Forgot to reference the details for sort's -V|--version-sort option at
> > > https://www.gnu.org/software/coreutils/manual/coreutils.html#Implementation-Details
> 
> Thanks for providing that good information.
> 
> 
> > > Other wrote scripts in other languages like php, Python, etc., e.g.
> > > https://gist.github.com/andkirby/54204328823febad9d34422427b1937b
> > >
> > >
> > 
> > Lonnie's patch exactly reverses f4f400776b3c1aa303d1a0fcd500f0ab5bc970f2
> > from 2015, which I guess was to address a problem with a different set
> > of version strings.
> > 
> > After a certain amount of trial and error, I've managed to coax sort
> > into doing the right thing for version strings which dnsmasq uses.
> > 
> > v2.84 sorts before v2.83, but v2.83 sorts before v2.83rc1 and 2.83rc1
> > sorts before v2.83test1
> > 
> > 
> > It's not pretty:
> > 
> >  sort -k1.2,1.5r -k 1.6,1.6 -k1.8,1.9r -k1.10,1.11r
>  
> 
> Besides not pretty,  it is also not readable.
> Plus '-k 1.6,1.6' looks very odd in that line. 
> 
> |  sort -k1.2,1.5r -k1.6,1.7r -k1.8,1.9r -k1.10,1.11r
> looks more "having a pattern"
> 
> 
> Frankly I think we are repairing at the wrong place.
> Instead of handcrafting a sort algoritme, we should repair our
> versioning name convention.  Tilde to the  rescue   :-)
> 
> $ cat << HERE > old_convention
> v2.83
> v2.84test1
> v2.84test2
> v2.84rc1
> v2.84rc2
> v2.84
> HERE
> $ cat << HERE > new_convention
> v2.83
> v2.84~~test1
> v2.84~~test2
> v2.84~rc1
> v2.84~rc2
> v2.84
> HERE
> $ sort --version-sort old_convention 
> v2.83
> v2.84
> v2.84rc1
> v2.84rc2
> v2.84test1
> v2.84test2
> $ sort --version-sort new_convention 
> v2.83
> v2.84~~test1
> v2.84~~test2
> v2.84~rc1
> v2.84~rc2
> v2.84
> $ 
> 
> --- a/bld/get-version
> +++ b/bld/get-version
> @@ -9,9 +9,14 @@
>  # If we can find one which matches $v[0-9].* then we assume it's
>  # a version-number tag, else we just use the whole string.
>  # If there is more than one v[0-9].* tag, sort them and use the
> -# first. The insane arguments to the sort command are to ensure
> -# that, eg v2.64 comes before v2.63, but v2.63 comes before v2.63rc1
> -# and v2.63rc1 comes before v2.63test1
> +# last. This needs tilde character in the version, e.g.
> +#
> +#   v2.83
> +#   v2.84~~test1
> +#   v2.84~~test2
> +#   v2.84~rc1
> +#   v2.84~rc2
> +#   v2.84
>  
>  
>  # Change directory to the toplevel source directory.
> @@ -31,7 +36,7 @@ else
>       vers=`cat $1/VERSION | sed 's/[(), ]/,/ g' | tr ',' '\n' | grep ^v[0-9]`
>  
>       if [ $? -eq 0 ]; then
> -         echo "${vers}" | sort -k1.2,1.5r -k 1.6,1.6 -k1.8,1.9r -k1.10,1.11r 
> | head -n 1 | sed 's/^v//'
> +         echo "${vers}" | sort --version-sort | tail -n 1 | sed 's/^v//'
>       else
>           cat $1/VERSION
>       fi
> 
> 
> 
> > I'm assuming that people don't want yet another release just to fix
> > this, but if I've assumed wrong, let me know.
> 
> Lonnie Abelbeck's hint on another release was indeed very humble
> and very polite. And yes, he is right with expressing
>   We do ourself and the rest of mankind a favour by avoiding
>   version string "2.84rc2" for verion "2.84"
> 

Meanwhile I learnt they are the same. Both git tags are
on the same git commit.

commit 20295012b8815d0989332516c6ac51018746e92e (tag: v2.84rc2, tag: v2.84)



Groeten
Geert Stappers
-- 
Silence is hard to parse

_______________________________________________
Dnsmasq-discuss mailing list
Dnsmasq-discuss@lists.thekelleys.org.uk
http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss

Reply via email to