[yum-cvs] plugins/priorities

Tim Lauridsen timlau at linux.duke.edu
Sun Jul 29 13:00:23 UTC 2007


 plugins/priorities/priorities.py |   35 ++++++++++++++++++++++++++---------
 1 file changed, 26 insertions(+), 9 deletions(-)

New commits:
commit f86151fe2518bdc44673a2dd937b6d46cc37e632
Author: Tim Lauridsen <tla at rasmil.dk>
Date:   Sun Jul 29 14:59:32 2007 +0200

    fixed obsoletes handling (rhbz #247246)

diff --git a/plugins/priorities/priorities.py b/plugins/priorities/priorities.py
index 8efecf9..cba2212 100644
--- a/plugins/priorities/priorities.py
+++ b/plugins/priorities/priorities.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 #
-# yum-plugin-priorities 0.0.4
+# yum-plugin-priorities 0.0.5
 #
 # Copyright (c) 2006 Daniel de Kok
 #
@@ -67,13 +67,21 @@ def exclude_hook(conduit):
     if check_obsoletes:
         obsoletes = conduit._base.pkgSack.returnObsoletes() 
 
-    # Build a dictionary with package priorities
-    pkg_priorities = {}
+    # Build a dictionary with package priorities. Since we handle obsoletes
+    # archless, also build an archless package priority dictionary for
+    # obsolete handling.
+    pkg_priorities = dict()
+    if check_obsoletes:
+        pkg_priorities_archless = dict() 
     for repo in allrepos:
         if repo.enabled:
-            repopkgs = _pkglisttodict(conduit.getPackages(repo), repo.priority)
+            repopkgs = _pkglist_to_dict(conduit.getPackages(repo), repo.priority)
             _mergeprioritydicts(pkg_priorities, repopkgs)
 
+            if check_obsoletes:
+                repopkgs_archless = _pkglist_to_archless_dict(conduit.getPackages(repo), repo.priority)
+                _mergeprioritydicts(pkg_priorities_archless, repopkgs_archless)
+
     # Eliminate packages that have a low priority
     for repo in allrepos:
         if repo.enabled:
@@ -83,26 +91,35 @@ def exclude_hook(conduit):
                     conduit.delPackage(po)
                     cnt += 1
                     conduit.info(3," --> %s from %s excluded (priority)" % (po,po.repoid))
-                    
+                
+                # If this packages obsoletes other packages, check whether
+                # one of the obsoleted packages is not available through
+                # a repo with a higher priority. If so, remove this package.
                 if check_obsoletes:
                     if obsoletes.has_key(po.pkgtup):
                         obsolete_pkgs = obsoletes[po.pkgtup]
                         for obsolete_pkg in obsolete_pkgs:
-                            key = "%s.%s" % (obsolete_pkg[0],obsolete_pkg[1])        
-                            if pkg_priorities.has_key(key) and pkg_priorities[key] < repo.priority:
+                            pkg_name = obsolete_pkg[0]
+                            if pkg_priorities_archless.has_key(pkg_name) and pkg_priorities_archless[pkg_name] < repo.priority:
                                 conduit.delPackage(po)
                                 cnt += 1
                                 conduit.info(3," --> %s from %s excluded (priority)" % (po,po.repoid))
                                 break
     conduit.info(2, '%d packages excluded due to repository priority protections' % cnt)
 
-def _pkglisttodict(pl, priority):
-    out = {}
+def _pkglist_to_dict(pl, priority):
+    out = dict()
     for p in pl:
         key = "%s.%s" % (p.name,p.arch)
         out[key] = priority
     return out
 
+def _pkglist_to_archless_dict(pl, priority):
+    out = dict()
+    for p in pl:
+        out[p.name] = priority
+    return out
+
 def _mergeprioritydicts(dict1, dict2):
     for package in dict2.keys():
         if not dict1.has_key(package) or dict2[package] < dict1[package]:



More information about the Yum-cvs-commits mailing list