[Yum-devel] YumDepsolver Code

seth vidal skvidal at linux.duke.edu
Thu Feb 15 10:08:45 UTC 2007


On Thu, 2007-02-15 at 04:20 -0500, seth vidal wrote:
> On Thu, 2007-02-15 at 03:34 -0500, seth vidal wrote:
> > On Thu, 2007-02-15 at 01:13 -0500, seth vidal wrote:
> > > On Wed, 2007-02-14 at 17:33 -0500, seth vidal wrote:
> > > > in _checkRemove() in the new code it seems like the provides of a
> > > > package being removed are only ever being checked by provname not by
> > > > prov_ver.
> > > > 
> > > > So it seems like if we remove foo3 which provides foobin = 3.0
> > > > 
> > > > and we have foo2 installed, which provides foobin = 2.0
> > > > 
> > > > and a package requires foobin > 2.0
> > > > 
> > > > Then we'll never see the requirement.
> > > > 
> > > > I'm going to check this when I get home. It's not a hard fix - but I
> > > > wanted to see if anyone else was seeing this.
> > > 
> > > yah, okay. I was right about this, it does leave an unresolved dep. I'll
> > > have  patch in a few minutes then I'll go through install and update and
> > > see if there are any other cases.
> > > 
> > 
> > okay, I'm not going to have a quick fix for it. This goes fairly deep
> > into our inPrcoRange method of each package object. Essentially, since
> > it is not a full overlapping-ranges check it isn't giving the right
> > answers for every case of the depcheck.  It's right enough for some of
> > the ranges but not for some odd cases. I'm trying to map out all the
> > cases where the ranges overlap and it's making my head twist a bit. I
> > was actually just looking to see if rpm's dsCompare has been brought out
> > into the python module, that would save a lot of the same code, I think.
> > 
> 
> okay. i think this is the pseudo-code for the range overlap. I'd
> appreciate it if someone could check this.
> 
> self is the prco from the package
> reqtuple is the requested prco that we're comparing
> f is the flag from the prco in the package
> reqf is the flag from the reqtuple
> 
>                 # does not match unless
>                 # if self is newer than reqtuple
>                 # if the reqf is GT, GE:
>                 #    true
>                 # if the reqf is EQ:
>                 #    if f is EQ, LE, GE:
>                 #      true
>                 # if the reqf is LE, LT:
>                 #    false
>                 
>                 # if self is equal to reqtuple
>                 #   if the reqf is GT:
>                 #      if f is GT, GE: 
>                 #        true
>                 #   if the reqf is GE:
>                 #      if f is GT,GE,EQ,LE:
>                 #       true
>                 #   if the reqf is EQ:
>                 #      if f is EQ,GE,LE:
>                 #       true
>                 #   if the reqf is LE:
>                 #       if f is EQ,LE,LT,GE:
>                 #        true
>                 #   if the reqf is LT:
>                 #       if f is LE, LT:
>                 #        true
>                 
>                 # if self is less than reqtuple
>                 #    if the reqf is GT:
>                 #     if f is GT, GE:
>                 #       true
>                 #    if the reqf is GE:
>                 #      if f is GT,GE:
>                 #        true
>                 #    if the reqf is EQ:
>                 #       if f is GT, GE:
>                 #          true
>                 #    if the reqf is LE, LT:
>                 #       true
> 

okay, I think the above is correct, but I would still like a check of
it. I also have the inPrcoRange() method working more completely, now.
The tests I've been doing are the special case I described before and
then doing moderately complicated remove processes like 'yum remove
gtk2'  to see if they match up to what 'oldyum remove gtk2' returns.

running the tscheck() on the remove process is fairly slow, though.

-sv





More information about the Yum-devel mailing list