On Jul 1, 2004, Michal Jaegermann michal@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@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