[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