[Yum-devel] [PATCH 1/2] Move some dependency checks to _has_needed_revdeps.

Casey Jao cjao at ugcs.caltech.edu
Sat May 19 05:33:21 UTC 2012


This patch is intended to address Bug 773440 regarding
clean_requirements_on_remove
(https://bugzilla.redhat.com/show_bug.cgi?id=773440).

Currently we only consider a reverse dependency of a pkg "needed"
if it was user-installed. The patch checks if the revdep is needed
by a pkg to be installed in the transaction. The corresponding
check in _remove_old_deps is now redundant since _has_needed_revdeps
considers a pkg as a revdep of itself.
---
 yum/__init__.py |   29 +++++++++++++++--------------
 1 file changed, 15 insertions(+), 14 deletions(-)

diff --git a/yum/__init__.py b/yum/__init__.py
index 5be32e9..1cf0d99 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -6297,19 +6297,7 @@ class YumBase(depsolve.Depsolve):
                 for requiring in required.requiring_packages(): # so we have required deps - look at all the pkgs which require them
                     if requiring == required: # if they are self-requiring skip them
                         continue
-                        
-                # go through the stuff in the ts to be installed - make sure none of that needs the required pkg, either.
-                for (provn,provf,provevr) in required.provides:
-                    if self.tsInfo.getNewRequires(provn, provf, provevr).keys():
-                        still_needed = True
-                        okay_to_remove[required] = False
-                        break
-                for fn in required.filelist + required.dirlist:
-                    if self.tsInfo.getNewRequires(fn, None,(None,None,None)).keys():
-                        okay_to_remove[required] = False
-                        still_needed = True
-                        break
-                            
+                                                    
                     #for tbi_pkg in self.tsInfo.getMembersWithState(output_states=TS_INSTALL_STATES):
                     #   for reqtuple in tbi_pkg.po.requires:
                     #        if required.provides_for(reqtuple):
@@ -6361,7 +6349,21 @@ class YumBase(depsolve.Depsolve):
                     # Debugging output
                     self.verbose_logger.log(logginglevels.DEBUG_2, _("%s has revdep %s which was user-installed."), pkg, curpkg)
                     ok_to_remove[pkg] = False
+                    ok_to_remove[curpkg] = False
                     return True
+                # go through the stuff in the ts to be installed - make sure none of that needs the required pkg, either.
+                for (provn,provf,provevr) in curpkg.provides:
+                    if self.tsInfo.getNewRequires(provn, provf, provevr).keys():
+                        ok_to_remove[pkg] = False
+                        ok_to_remove[curpkg] = False
+                        self.verbose_logger.log(logginglevels.DEBUG_2, _("%s is needed by a package to be installed."), curpkg)
+                        return True
+                for fn in curpkg.filelist + curpkg.dirlist:
+                    if self.tsInfo.getNewRequires(fn, None,(None,None,None)).keys():
+                        ok_to_remove[pkg] = False
+                        ok_to_remove[curpkg] = False
+                        self.verbose_logger.log(logginglevels.DEBUG_2, _("%s is needed by a package to be installed."), curpkg)
+                        return True
                 visited[curpkg] = True
             all_leaves_visited = True
             leaves = curpkg.requiring_packages()
@@ -6375,4 +6377,3 @@ class YumBase(depsolve.Depsolve):
         # Debugging output
         self.verbose_logger.log(logginglevels.DEBUG_2, _("%s has no user-installed revdeps."), pkg)
         return False
-
-- 
1.7.10.1



More information about the Yum-devel mailing list