On Mon, Nov 29, 2010 at 5:54 PM, James Antill <[email protected]> wrote: > Note that this is kind of valid now, in that there is nothing > technically wrong with having foo-1.i686 and foo-2.x86_64 installed. > However _by far_ the most common case is for the user to not want this, > but yum to solve for it, due to missing %{_isa} etc. > Also "yum check duplicates" will flag it as an error already. > --- > yum/__init__.py | 34 ++++++++++++++++++++++++++++++++++ > yum/config.py | 1 + > 2 files changed, 35 insertions(+), 0 deletions(-) > > diff --git a/yum/__init__.py b/yum/__init__.py > index a13ad96..b4640bf 100644 > --- a/yum/__init__.py > +++ b/yum/__init__.py > @@ -961,6 +961,40 @@ class YumBase(depsolve.Depsolve): > if self.tsInfo.pkgSack is not None: # rm Transactions don't have > pkgSack > self.tsInfo.pkgSack.dropCachedData() > > + txmbrs = [] > + if rescode == 2 and self.conf.protected_multilib and > self.arch.multilib: > + txmbrs = self.tsInfo.getMembersWithState(None, > TS_INSTALL_STATES) > + vers = {} > + for txmbr in txmbrs: > + # In theory we could skip noarch packages here, but it's > really > + # fast and there are some edge cases where it'll help. > + if txmbr.name not in vers: > + vers[txmbr.name] = [txmbr.po] > + continue > + vers[txmbr.name].append(txmbr.po) > + > + fine = [] > + xrestring = [] > + for pkgname in vers: > + if len(vers[pkgname]) <= 1: > + # We have to go govelling through the rpmdb data to get > + for pkg in self.rpmdb.searchNames([pkgname]): > + if self.tsInfo.getMembersWithState(pkg.pkgtup, > + TS_REMOVE_STATES): > + continue > + vers[pkgname].append(pkg) > + > + # If all the versions are equal, we should be fine. > + first = vers[pkgname][0] > + for other in vers[pkgname][1:]: > + if first.verEQ(other): > + continue > + msg = _('Protected multilib versions: %s != %s') > + xrestring.append(msg % (first, other)) > + if xrestring: > + rescode = 1 > + restring = xrestring > + > # This is a version of the old "protect-packages" plugin, it > allows > # you to erase duplicates and do remove+install. > # But we don't allow you to turn it off!:) > diff --git a/yum/config.py b/yum/config.py > index aecef44..14eb992 100644 > --- a/yum/config.py > +++ b/yum/config.py > @@ -738,6 +738,7 @@ class YumConf(StartupConf): > > protected_packages = ListOption("yum, > glob:/etc/yum/protected.d/*.conf", > parse_default=True) > + protected_multilib = BoolOption(True) > exit_on_lock = BoolOption(False) > > loadts_ignoremissing = BoolOption(False) > -- > 1.7.2.3 > > _______________________________________________ > Yum-devel mailing list > [email protected] > http://lists.baseurl.org/mailman/listinfo/yum-devel >
ACK
_______________________________________________ Yum-devel mailing list [email protected] http://lists.baseurl.org/mailman/listinfo/yum-devel
