[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 2/2] mkconfig: use distro sorts when available
From: |
Glenn Washburn |
Subject: |
Re: [PATCH v2 2/2] mkconfig: use distro sorts when available |
Date: |
Thu, 20 Jan 2022 22:05:16 -0600 |
On Thu, 20 Jan 2022 23:07:10 +0100
Didier Spaier <didier@slint.fr> wrote:
> Hi Robbie and All,
>
> Do i understand correctly that this will not change anything for distributions
> (like Slint, based on Slackware, that I maintain) that are neither
> Debian-likes
> nor Fedora-likes?
It shouldn't change anything in the sense that you as a maintainer need
to do anything. At worst, it should fall back to the current bahavior
with a slight improvement. If Slint/Slack has dpkg or rpmdev-vercmp
installed, those will be used to do the version comparison. This should
be better than the current case, unless the Slint/Slack versioning
scheme is radically different than what those packages expect.
Glenn
>
> Cheers,
> Didier
>
> Le 20/01/2022 à 17:45, Robbie Harwood a écrit :
> > For Debian-likes and Fedora-likes, use the distribution's sorting tools
> > to determine the latest package before falling back to sort(1). While
> > Fedora's rpmdev-vercmp(1) is likely unavailable, Debian's is built into
> > dpkg itself, and hence likely present.
> >
> > Refactor to remove unused code and make it easy to add other package
> > managers as needed.
> >
> > Signed-off-by: Robbie Harwood <rharwood@redhat.com>
> > ---
> > util/grub-mkconfig_lib.in | 90 +++++++++++++++++++++------------------
> > 1 file changed, 49 insertions(+), 41 deletions(-)
> >
> > diff --git a/util/grub-mkconfig_lib.in b/util/grub-mkconfig_lib.in
> > index 23d41475f..cc0ab790e 100644
> > --- a/util/grub-mkconfig_lib.in
> > +++ b/util/grub-mkconfig_lib.in
> > @@ -200,62 +200,70 @@ grub_file_is_not_garbage ()
> > return 0
> > }
> >
> > -version_sort ()
> > +# A $SORT function returns 0 if $1 is newer than $2, and 1 otherwise.
> > Other
> > +# package managers can be plugged in here as needed with their own
> > functions.
> > +sort_dpkg ()
> > {
> > - case $version_sort_sort_has_v in
> > - yes)
> > - LC_ALL=C sort -V;;
> > - no)
> > - LC_ALL=C sort -n;;
> > - *)
> > - if sort -V </dev/null > /dev/null 2>&1; then
> > - version_sort_sort_has_v=yes
> > - LC_ALL=C sort -V
> > - else
> > - version_sort_sort_has_v=no
> > - LC_ALL=C sort -n
> > - fi;;
> > - esac
> > + left="`echo "$1" | sed -e "s/^[^0-9]*//"`"
> > + right="`echo "$2" | sed -e "s/^[^0-9]*//"`"
> > + dpkg --compare-versions "$left" gt "$right"
> > }
> >
> > -version_test_numeric ()
> > +sort_rpm ()
> > {
> > - version_test_numeric_a="$1"
> > - version_test_numeric_cmp="$2"
> > - version_test_numeric_b="$3"
> > - if [ "$version_test_numeric_a" = "$version_test_numeric_b" ] ; then
> > - case "$version_test_numeric_cmp" in
> > - ge|eq|le) return 0 ;;
> > - gt|lt) return 1 ;;
> > - esac
> > - fi
> > - if [ "$version_test_numeric_cmp" = "lt" ] ; then
> > - version_test_numeric_c="$version_test_numeric_a"
> > - version_test_numeric_a="$version_test_numeric_b"
> > - version_test_numeric_b="$version_test_numeric_c"
> > - fi
> > - if (echo "$version_test_numeric_a" ; echo "$version_test_numeric_b") |
> > version_sort | head -n 1 | grep -qx "$version_test_numeric_b" ; then
> > - return 0
> > - else
> > - return 1
> > + left="`echo "$1" | sed -e "s/^[^0-9]*//"`"
> > + right="`echo "$2" | sed -e "s/^[^0-9]*//"`"
> > + rpmdev-vercmp "$left" "$right" >/dev/null
> > + if [ $? -eq 12 ]; then
> > + return 0;
> > fi
> > + return 1;
> > +}
> > +
> > +sort_V ()
> > +{
> > + left="`echo "$1" | sed -e "s/[^-]*-//" -e "s/_/-/g"`"
> > + right="`echo "$2" | sed -e "s/[^-]*-//" -e "s/_/-/g"`"
> > + printf "$left\n$right\n" | LC_ALL=C sort -V | head -n1 | grep -qx
> > "$right"
> > +}
> > +
> > +sort_n ()
> > +{
> > + left="`echo "$1" | sed -e "s/[^-]*-//" -e "s/_/-/g"`"
> > + right="`echo "$2" | sed -e "s/[^-]*-//" -e "s/_/-/g"`"
> > + printf "$left\n$right\n" | LC_ALL=C sort -n | head -n1 | grep -qx
> > "$right"
> > }
> >
> > version_test_gt ()
> > {
> > - version_test_gt_a="`echo "$1" | sed -e "s/[^-]*-//" -e "s/_/-/g"`"
> > - version_test_gt_b="`echo "$2" | sed -e "s/[^-]*-//" -e "s/_/-/g"`"
> > - version_test_gt_cmp=gt
> > + version_test_gt_a="$1"
> > + version_test_gt_b="$2"
> > +
> > if [ "x$version_test_gt_b" = "x" ] ; then
> > return 0
> > fi
> > case "$version_test_gt_a:$version_test_gt_b" in
> > *.old:*.old) ;;
> > - *.old:*) version_test_gt_a="`echo "$version_test_gt_a" | sed -e
> > 's/\.old$//'`" ; version_test_gt_cmp=gt ;;
> > - *:*.old) version_test_gt_b="`echo "$version_test_gt_b" | sed -e
> > 's/\.old$//'`" ; version_test_gt_cmp=ge ;;
> > + *.old:*) version_test_gt_a="`echo "$version_test_gt_a" | sed -e
> > 's/\.old$//'`" ;;
> > + *:*.old) version_test_gt_b="`echo "$version_test_gt_b" | sed -e
> > 's/\.old$//'`" ;;
> > esac
> > - version_test_numeric "$version_test_gt_a" "$version_test_gt_cmp"
> > "$version_test_gt_b"
> > - return "$?"
> > +
> > + if [ "$version_test_gt_a" = "$version_test_gt_b" ]; then
> > + return 1;
> > + fi
> > +
> > + if [ x"$SORT" = x ]; then
> > + if command -v rpmdev-vercmp >/dev/null; then
> > + SORT=sort_rpm
> > + elif command -v dpkg >/dev/null; then
> > + SORT=sort_dpkg
> > + elif sort -V </dev/null > /dev/null 2>&1; then
> > + SORT=sort_V
> > + else
> > + SORT=sort_n
> > + fi
> > + fi
> > + $SORT "$version_test_gt_a" "$version_test_gt_b"
> > }
> >
> > version_find_latest ()
>
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> https://lists.gnu.org/mailman/listinfo/grub-devel