On Jul 1, 2004, Michal Jaegermann <michal(a)harddata.com> wrote:
On Thu, Jul 01, 2004 at 02:23:53PM -0400, John Dennis wrote:
>
> No assumptions should be made about the format of the release string
> other than it collate correctly when presented to rpmvercmp (the
> comparison function in rpm which has specific well defined semantics).
How you are using rpmvercmp, say, in a shell script? AFAIK there is
no interface which would make that available. Or this is one of
those undocumented mysteries of rpm?
I wrote this years ago for a script that would automatically install
updates from a local mirror of the Red Hat Linux updates site. Except
that I just updated it to support commas as separators; I'd no idea
they could be used with the same meaning as dots before the internal
discussion :-)
Untested after the change to support commas. Hope this helps.
# Copyright 1999, 2000, 2001, 2002, 2004
# Alexandre Oliva <oliva(a)lsd.ic.unicamp.br>
# This script is Free Software, and it can be copied, distributed and
# modified as defined in the GNU General Public License. A copy of
# its license can be downloaded from
http://www.gnu.org/copyleft/gpl.html
newer () {
test "x$1" != "x$2" &&
case "$1$2" in
*-*)
newer "`echo $1 | sed 's/-.*//'`" "`echo $2 | sed
's/-.*//'`" ||
{ test "`echo $1 | sed 's/-.*//'`" = "`echo $2 | sed
's/-.*//'`" &&
newer "`echo $1 | sed 's/[^-]*-*//'`" "`echo $2 | sed
's/[^-]*-*//'`"; }
;;
*[.,]*)
newer "`echo $1 | sed 's/[.,].*//'`" "`echo $2 | sed
's/[.,].*//'`" ||
{ test "`echo $1 | sed 's/[.,].*//'`" = "`echo $2 | sed
's/[.,].*//'`" &&
newer "`echo $1 | sed 's/[^.,]*\.*//'`" "`echo $2 | sed
's/[^.,]*\.*//'`"; }
;;
*)
result=false
if test -x $SORT; then
{ echo $2; echo $1; } |
$SORT -n -c > /dev/null 2>&1 && result=true
else
test $1 -gt $2 && result=true
fi
$result
;;
esac
}
# usage: if newer r1-v1 r2-v2; then echo r1-v1 is newer; fi
--
Alexandre Oliva
http://www.ic.unicamp.br/~oliva/
Red Hat Compiler Engineer aoliva(a){redhat.com, gcc.gnu.org}
Free Software Evangelist oliva(a){lsd.ic.unicamp.br, gnu.org}