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 | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/yum/__init__.py b/yum/__init__.py index 7e67d20..3b4ddf5 100644 --- a/yum/__init__.py +++ b/yum/__init__.py @@ -6292,16 +6292,16 @@ class YumBase(depsolve.Depsolve): 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 (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: @@ -6354,7 +6354,25 @@ 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(): + #still_needed = True + okay_to_remove[pkg] = False + okay_to_remove[curpkg] = False + self.verbose_logger.log(logginglevels.DEBUG_2, _("%s is needed by a package to be installed."), curpkg) + return True + #break + for fn in curpkg.filelist + curpkg.dirlist: + if self.tsInfo.getNewRequires(fn, None,(None,None,None)).keys(): + okay_to_remove[pkg] = False + okay_to_remove[curpkg] = False + #still_needed = True + self.verbose_logger.log(logginglevels.DEBUG_2, _("%s is needed by a package to be installed."), curpkg) + return True + #break visited[curpkg] = True all_leaves_visited = True leaves = curpkg.requiring_packages() -- 1.7.10.1 _______________________________________________ Yum-devel mailing list Yum-devel@lists.baseurl.org http://lists.baseurl.org/mailman/listinfo/yum-devel