On Wed, 2007-07-25 at 17:55 +0200, Florian Festi wrote:
> Hi!
> 
> I synced my personal repository to the new, shiny, yum git repository. The 
> web interface can still be found at:
> 
> http://www.jur-linux.org/git/?p=yum-ffesti.git;a=summary
> 
> It now contains tree branches:
> 
>   * master - this is yum upstream
>    -> ffesti - this contains my search/depcheck changes
>     -> resolveDeps - experimental next step - see below
> 
> for testing you can "git clone git://www.jur-linux.org/git-data/yum-ffesti"
> 
> use "git branch -a" to see the branches and
> "git checkout origin/ffesti" to switch to my "old" change set and
> "git checkout resolveDeps" to switch back
> 
> As all the patches got moved around quite a bit please tell me if anything 
> breaks. I intend to continuously rebase these branches to yum head.
> 
> 
> resolveDeps refactoring
> =======================
> 
> I have to admit that I did not have a look into the depsolving part of the 
> Depsolver. After accelerating the depcheck code I was wondering why 
> performance still was not where it should be in the end. Some issues were 
> very obvious like calling the global checks (checkFilerequies, 
> checkConflicts) too often. So it was an natural step to break up _mytscheck 
> to get the Requirement checks into an own loop. This would also allow 
> changing the return values of the .check* methods to something less brain 
> dead - like package objects instead of NEVR tuples (yes, there is no A). It 
> turned out that the depsolving part of the depsolver is over complicated and 
> doing a lot of additional searches while trying to regain the information 
> that has been simply dropped by the depcheck code. Sadly this was necessary 
> in the part when yum was still using the rpmlib but now this doesn't make 
> sense anymore.


Florian,
 I looked through the diffs and there is just too much there to accept
as one patch. 

When we first went to the internal depsolver I said: "we'll be able to
get back a bunch of time b/c we won't have to do the lookups to
compensate for the ts.check() result being that stupid NEVR tuple."

 In order to get to there we made a new object from the DepCheck that
would hand us the already-resolved out package object and what it
needed/conflicted with. That's what self._dcobj is. It's the DepCheck
class. Instead of ripping out huge portions of the depsolver it would be
better to take this a little at a time:

1. get rid of all the detection for figuring out where the requiring pkg
is coming from: the _proccesReq bits. you did that - good.
2. change the options passed to
requiringFromTransaction/requiringFromInstalled but nothing else. you
did part of that but then went too far.
3. after we have a handle on what we're getting back from DepCheck and
if it is sufficient on how to change things then we can work on
refactoring the code down some.


Otherwise we end up with another big jump in the depsolving code and
figuring out where we regressed becomes difficult.

I understand your desire to change things and make them happen "right
now" but it makes it impossible to follow all the changes and that makes
debugging much much harder for me. And since I'm having to sift
depsolving issues in bugzilla I need to be sure I know where this code
is going so I can answer better. 

So, in short, I need smaller chunks and smaller changes at a time to
move forward. As an example depsolve.py is 1259 lines of code and your
patch is 760 lines long.

-sv


_______________________________________________
Yum-devel mailing list
Yum-devel@linux.duke.edu
https://lists.dulug.duke.edu/mailman/listinfo/yum-devel

Reply via email to