On Fri, 10 Dec 2010, Collins, Kevin [BEELINE] wrote:

So, are you saying that this tool is only comparing the strings and not
looking at any packages? After a bit of playing, that would seem to be
the case... which at least lets me test for what I think is a "smart"
way to name my rebuild packages.

There was a minor change in the logic some years ago, but the comparison method of rpmvercmp.c has been quite stable

see:
        https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=178798


This may be of interest as well:

        http://blog.client9.com/2010/04/comparing-rpm-version-strings-rpm.html

which has a long set of comment about the edge cases by a author who knows those dark and twisty corners well

        http://client9.com/downloads/rpmvercmp.c

is out there from that blogger as well


A safe working rule is to do the NEVR [Name, Epoch, Version, Release] comparison step by step as string comparisons; within each sub-element of NEVR, every time a separator [a non-alpha, and non-numeral digit; with "." the most commonly one seen one] is encountered, treat it as a sub-element separator to signal the end of a STRING comparand

Remember: We are not dealing with numbers (int's, floats, octals, hex's, whatever) here (with all the problems of leading or implied leading zeroes and radix markers)

If a local package is present, rpm can query the package for its element values with the --qf sub-option

Textually as when inferring values from a flat listing of a remote archive, NEVR elements may be approximated by counting back right to left separating by each hyphen, and in the case of Release, discarding the last two '.' separated elements

REL=` echo "peach-3-4.src.rpm" | rev | awk -F- {'print $1'} |
        cut -d. -f3- |  rev `
VER=` echo "peach-3-4.src.rpm" | rev | awk -F- {'print $2'} |
         rev `
NAM=` echo "peach-3-4.src.rpm" | rev | awk -F- {'print $3'} |
         rev `

and REL will end up with "4", VER with "3", NAM with "peach" -- sans the '"' of course, but shown here to emphasize that these may look like numbers but are not

Epoch is the red-headed odd case, and is not customarily displayed in file listings for historical reasons


apple-3-4.src.rpm

is unequal to

peach-3-4.src.rpm

reason: Name   "apple" < "peach"

---------------------------

1:apple-3-4.src.rpm
        also sometimes seen in the notation:
                apple-1:3-4.src.rpm -- the LHS of the colon
                back to the next non-decimal-numeral item
is older (less) than

2:apple-3-4.src.rpm

reason:  Epoch   "1" < "2"

---------------------------

You mentioned what looked like a %{dist} suffix

        "el6" to "el6.custom"

on a Release field, and that would cause a otherwise seemingly otherwise identical package rebuild from the same sources, but with %{dist} NOT %{nil} to compare as a later item than the one with the nil dist tag [I understand you did a manual .spec file edit, but defining the 'dist' field is perhaps a better way to manage this, as most SRPMs from Red Hat derived space carry variants of this]

able-1-2.src.rpm

is older than

able-1-2.custom.src.rpm


-- Russ herrold

_______________________________________________
rhelv6-list mailing list
rhelv6-list@redhat.com
https://www.redhat.com/mailman/listinfo/rhelv6-list

Reply via email to