[Yum-devel] [PATCH 2/2] Fix pkgs. that are excluded after being put in yb.up ... BZ#597853
Tim Lauridsen
tim.lauridsen at googlemail.com
Tue Jun 1 16:32:12 UTC 2010
On Tue, Jun 1, 2010 at 6:23 PM, James Antill <james at and.org> wrote:
> ---
> yum/__init__.py | 34 ++++++++++++++++++++++++----------
> 1 files changed, 24 insertions(+), 10 deletions(-)
>
> diff --git a/yum/__init__.py b/yum/__init__.py
> index 8a2fbf4..43cbead 100644
> --- a/yum/__init__.py
> +++ b/yum/__init__.py
> @@ -2674,7 +2674,7 @@ class YumBase(depsolve.Depsolve):
> for pkg in self.tsInfo.conditionals.get(txmbr.name,
> []):
> self.tsInfo.remove(pkg.pkgtup)
>
> - def getPackageObject(self, pkgtup):
> + def getPackageObject(self, pkgtup, allow_missing=False):
> """retrieves a packageObject from a pkgtuple - if we need
> to pick and choose which one is best we better call out
> to some method from here to pick the best pkgobj if there are
> @@ -2689,6 +2689,8 @@ class YumBase(depsolve.Depsolve):
> pkgs = self.pkgSack.searchPkgTuple(pkgtup)
>
> if len(pkgs) == 0:
> + if allow_missing: # This can happen due to excludes after .up
> has
> + return None # happened.
> raise Errors.DepError, _('Package tuple %s could not be found
> in packagesack') % str(pkgtup)
>
> if len(pkgs) > 1: # boy it'd be nice to do something smarter here
> FIXME
> @@ -2930,8 +2932,11 @@ class YumBase(depsolve.Depsolve):
> return ret
> obsoleting.sort(_sort_arch)
> obsoleting = obsoleting[0]
> - obsoleting_pkg = self.getPackageObject(obsoleting)
> - return obsoleting_pkg
> + for pkgtup in obsoleting:
> + pkg = self.getPackageObject(pkgtup, allow_missing=True)
> + if pkg is not None:
> + return pkg
> + return None
> return None
>
> def _test_loop(self, node, next_func):
> @@ -3325,7 +3330,10 @@ class YumBase(depsolve.Depsolve):
> obsoletes = []
>
> for (obsoleting, installed) in obsoletes:
> - obsoleting_pkg = self.getPackageObject(obsoleting)
> + obsoleting_pkg = self.getPackageObject(obsoleting,
> + allow_missing=True)
> + if obsoleting_pkg is None:
> + continue
> topkg = self._test_loop(obsoleting_pkg, self._pkg2obspkg)
> if topkg is not None:
> obsoleting_pkg = topkg
> @@ -3341,7 +3349,10 @@ class YumBase(depsolve.Depsolve):
> self.verbose_logger.log(logginglevels.DEBUG_2, _('Not
> Updating Package that is already obsoleted: %s.%s %s:%s-%s') %
> old)
> else:
> -
> tx_return.extend(self.update(po=self.getPackageObject(new)))
> + new = self.getPackageObject(new, allow_missing=True)
> + if new is None:
> + continue
> + tx_return.extend(self.update(po=new))
>
> return tx_return
>
> @@ -3438,10 +3449,11 @@ class YumBase(depsolve.Depsolve):
> # It's a minor UI problem for RHEL, but might as well dtrt.
> obs_pkgs = []
> for pkgtup in obs_tups:
> - opkgs = self.pkgSack.searchPkgTuple(pkgtup)
> - if not opkgs: # Could have been be excluded after
> - continue # obsoleted_dict was setup.
> - obs_pkgs.append(opkgs[0])
> + obsoleting_pkg = self.getPackageObject(pkgtup,
> +
> allow_missing=True)
> + if obsoleting_pkg is None:
> + continue
> + obs_pkgs.append(obsoleting_pkg)
> for obsoleting_pkg in packagesNewestByName(obs_pkgs):
> tx_return.extend(self.install(po=obsoleting_pkg))
> for available_pkg in availpkgs:
> @@ -3459,7 +3471,9 @@ class YumBase(depsolve.Depsolve):
>
> for installed_pkg in instpkgs:
> for updating in self.up.updatesdict.get(installed_pkg.pkgtup,
> []):
> - po = self.getPackageObject(updating)
> + po = self.getPackageObject(updating, allow_missing=True)
> + if po is None:
> + continue
> if self.tsInfo.isObsoleted(installed_pkg.pkgtup):
> self.verbose_logger.log(logginglevels.DEBUG_2, _('Not
> Updating Package that is already obsoleted: %s.%s %s:%s-%s') %
> installed_pkg.pkgtup)
> --
> 1.7.0.1
>
> _______________________________________________
> Yum-devel mailing list
> Yum-devel at lists.baseurl.org
> http://lists.baseurl.org/mailman/listinfo/yum-devel
>
ACK
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.baseurl.org/pipermail/yum-devel/attachments/20100601/4fe691c9/attachment-0001.html>
More information about the Yum-devel
mailing list