On 14 October 2011 21:39, James Antill <ja...@and.org> wrote:

> ---
>  yum/depsolve.py |   25 +++++++++++++++++++++++--
>  1 files changed, 23 insertions(+), 2 deletions(-)
>
> diff --git a/yum/depsolve.py b/yum/depsolve.py
> index 699a23c..7e74880 100644
> --- a/yum/depsolve.py
> +++ b/yum/depsolve.py
> @@ -58,6 +58,9 @@ flags = {"GT": rpm.RPMSENSE_GREATER,
>          "LE": rpm.RPMSENSE_LESS | rpm.RPMSENSE_EQUAL,
>          "EQ": rpm.RPMSENSE_EQUAL,
>          None: 0 }
> +_rflags = {}
> +for f in flags:
> +    _rflags[flags[f]] = f
>
>  class Depsolve(object):
>     """A class for resolving dependencies."""
> @@ -407,9 +410,27 @@ class Depsolve(object):
>             self.conf.obsoletes = 0
>             txmbrs = self.update(po=requiringPo, requiringPo=requiringPo)
>             self.conf.obsoletes = origobs
> -            if not txmbrs:
> +
> +            def _check_update_worked(txmbrs, obs=False):
> +                #  Old code assumed that if there was an update, we were
> good:
> +                #    if txmbrs: return True
> +                # ..however we have a problem when foo-1 and foo-2 both
> require
> +                # bar-1, and bar-2 is being installed. If the req. is
> identical
> +                # then we'll skip checking it in _checkInstall(), so we
> need to
> +                # check it here.
> +                for txmbr in txmbrs:
> +                    if obs or txmbr.name == requiringPo.name:
> +                        n,f,v = requirement
> +                        creq = (n, _rflags[f],
> +                                rpmUtils.miscutils.stringToVersion(v))
> +                        # If it's identical ... checkInstall will skip it.
> +                        if creq not in txmbr.po.requires:
> +                            return True
> +                return False
> +
> +            if not _check_update_worked(txmbrs):
>                 txmbrs = self.update(po=requiringPo,
> requiringPo=requiringPo)
> -                if not txmbrs:
> +                if not _check_update_worked(txmbrs, obs=True):
>                     msg = self._err_missing_requires(requiringPo,
> requirement)
>                     self.verbose_logger.log(logginglevels.DEBUG_2, _('No
> update paths found for %s. Failure!'), requiringPo)
>                     return self._requiringFromTransaction(requiringPo,
> requirement, errorlist)
> --
> 1.7.6.4
>
> _______________________________________________
> Yum-devel mailing list
> Yum-devel@lists.baseurl.org
> http://lists.baseurl.org/mailman/listinfo/yum-devel
>

ACK
_______________________________________________
Yum-devel mailing list
Yum-devel@lists.baseurl.org
http://lists.baseurl.org/mailman/listinfo/yum-devel

Reply via email to