update to deal with obsoletes better
authorDan Winship <danw@gnome.org>
Tue Mar 11 11:44:51 2008 -0400 (2008-03-11)
changeset 1617762db2848bf
parent 160 00f19df51272
child 162 9170be6cebf0
update to deal with obsoletes better

when looking for a package "foo" to install/update, we have to look
not just for a package named "foo", but also any package that
obsoletes+provides "foo".

So redo the algorithm to satisfy *all* installs/removes from the
property list, so now we don't need to walk the package list at all.
DEPSOLVE.txt
     1.1 --- a/DEPSOLVE.txt	Tue Mar 11 11:43:54 2008 -0400
     1.2 +++ b/DEPSOLVE.txt	Tue Mar 11 11:44:51 2008 -0400
     1.3 @@ -25,23 +25,26 @@
     1.4  Depsolver:
     1.5  
     1.6      - Create new razor_transaction_packages ("rtp"s) for each
     1.7 -      requested install or remove.
     1.8 +      requested install or remove. These will be "unresolved", because
     1.9 +      we haven't yet found the razor_packages that correspond to them.
    1.10  
    1.11      - while there are new rtps:
    1.12  
    1.13 -	- qsort the new rtps
    1.14 +	- sort the new rtps
    1.15  
    1.16 -	- Walk the system package list, upstream package list, and new
    1.17 -          rtps in parallel. For each new INSTALL/FORCED_UPDATE rtp,
    1.18 -          set the "new_package" field and the appropriate bit in the
    1.19 -          upstream bit array. (For any not-found packages, set an
    1.20 -          UNAVAILABLE error.) For each new rtp of any type (INSTALL,
    1.21 -          REMOVE, FORCED_UPDATE, OBSOLETED), if there's a matching
    1.22 -          system package, set the "old_package" field and clear the
    1.23 -          appropriate bit in the system bit array.
    1.24 +	- Walk the system property list, upstream property list, and
    1.25 +          new rtp list in parallel, and:
    1.26  
    1.27 -	- Walk the system and upstream property lists in parallel,
    1.28 -          and:
    1.29 +	    - For each uninstalled PROVIDES:
    1.30 +
    1.31 +		- If the property is a valid package name (that is,
    1.32 +                  either it's a package providing its own name, or it
    1.33 +                  has a matching OBSOLETES), and it matches the name
    1.34 +                  of a new rtp of type INSTALL or FORCED_UPDATE with
    1.35 +                  an unresolved new_package, then set the rtp's
    1.36 +                  new_package to point to the package providing this
    1.37 +                  property and set the appropriate bit in the upstream
    1.38 +                  bit array.
    1.39  
    1.40  	    - For each to-be-installed non-file REQUIRES:
    1.41  
    1.42 @@ -138,6 +141,16 @@
    1.43  		  that PROVIDES that property. If so, we have a
    1.44  		  CONTRADICTION error.
    1.45  
    1.46 +
    1.47 +	    - For each installed PROVIDES:
    1.48 +
    1.49 +		- If the property is a valid package name (that is,
    1.50 +                  it's a package providing its own name), and it
    1.51 +                  matches the name of a new rtp with an unresolved
    1.52 +                  old_package, then set the rtp's old_package to point
    1.53 +                  to the package providing this property and clear the
    1.54 +                  appropriate bit in the system bit array.
    1.55 +
    1.56  	    - For each to-be-removed PROVIDES:
    1.57  
    1.58  		- If there's also an identical to-be-installed