Broken upgrade paths

seth vidal skvidal at linux.duke.edu
Thu Jul 20 05:04:15 UTC 2006


On Thu, 2006-07-20 at 00:00 -0500, Tom 'spot' Callaway wrote:
> On Thu, 2006-07-20 at 00:51 -0400, Tom Lane wrote:
> > Jesse Keating <jkeating at redhat.com> writes:
> > >  pkg                  FC5                       devel
> > 
> > >  elinks               elinks-0.11.0-2.3         elinks-0.11.1-4.1
> > >  gawk                 gawk-3.1.5-6.3            gawk-3.1.5-11
> > >  gnome-applet-vm      gnome-applet-vm-0.0.7-2   gnome-applet-vm-0.1.0-0.rc1
> > >  lockdev              lockdev-1.0.1-9.2.1       lockdev-1.0.1-10
> > >  lslk                 lslk-1.29-16.2.1          lslk-1.29-17
> > >  lsof                 lsof-4.77-1               lsof-4.78-1
> > >  procinfo             procinfo-18-18.2.2        procinfo-18-19
> > >  procps               procps-3.2.6-3.5          procps-3.2.7-3
> > >  psmisc               psmisc-22.2-1.1           psmisc-22.2-5
> > >  readahead            readahead-1.2-2           readahead-1.3-1
> > >  rsh                  rsh-0.17-34.1             rsh-0.17-35
> > >  sudo                 sudo-1.6.8p12-4.1         sudo-1.6.8p12-7
> > >  util-linux           util-linux-2.13-0.20.4    util-linux-2.13-0.33
> > >  vlock                vlock-1.3-22.2.1          vlock-1.3-23
> > >  words                words-3.0-8.1             words-3.0-9
> > >  am-utils             am-utils-6.1.3-1.2.1      am-utils-6.1.5-3
> > 
> > I must need to go back to RPM school, because AFAICS the devel version
> > should be considered newer in every one of those cases.  What's the
> > problem exactly?
> 
> RPM doesn't really treat these numbers as integers. Instead of treating
> that . as a decimal separator for a whole number like our brain does, it
> just treats it as a string.
> 
> so, 18.2.2 is > 19 for rpm, because it is a longer string.
> 
> (This is a drastic oversimplification, but it should serve the purpose)
> 
> The best way to avoid this problem? Keep your Release field as a whole
> number, then rpm knows that 18 < 19.

umm 18.2.2 is < 19

rpmUtils.miscutils.compareEVR(('0','1','18.2.2'),('0','1','19'))
-1

rpm compares via tokens.

so if you look at the string as:
18 and 2 and 2
and the other as
19

then rpm starts from left to right and compares the first token it finds
that lines up.

it sees 18 and 19

18 < 19

therefore 19 wins.

no more comparison. EOD.

-sv





More information about the Fedora-maintainers mailing list