[yum] New head again, fix kernel installs.

James Antill james at fedoraproject.org
Fri Jan 7 00:50:59 UTC 2011


commit 0b2b4b5f31b39af4eeed6f8230bdfbcd2bfd43fb
Author: James Antill <james at and.org>
Date:   Thu Jan 6 19:50:26 2011 -0500

    New head again, fix kernel installs.

 yum-HEAD.patch |  181 ++++++++++++++++++++++++++++++++++++-------------------
 yum.spec       |    7 ++-
 2 files changed, 124 insertions(+), 64 deletions(-)
---
diff --git a/yum-HEAD.patch b/yum-HEAD.patch
index 642b889..efe618b 100644
--- a/yum-HEAD.patch
+++ b/yum-HEAD.patch
@@ -459,10 +459,27 @@ index 281bf17..52f6b53 100644
  Eliminate any cached data from the local rpmdb.
  
 diff --git a/docs/yum.conf.5 b/docs/yum.conf.5
-index 49d98c6..0281f1a 100644
+index 49d98c6..e1c3480 100644
 --- a/docs/yum.conf.5
 +++ b/docs/yum.conf.5
-@@ -80,9 +80,13 @@ Full directory and file name for where yum should write its log file.
+@@ -72,6 +72,16 @@ So any packages which should be protected can do so by including a file in
+ 
+ Also if this configuration is set to anything, then yum will protect the
+ package corresponding to the running version of the kernel.
++
++.IP
++\fBprotected_multilib\fR
++Either `1' or `0'. This tells yum whether or not it should perform a check to
++make sure that multilib packages are the same version. For example, if this
++option is off (rpm behaviour) pkgA-1.x86_64 and pkgA-2.i386 can be installed
++at the same time. However this is very rarely desired.
++install only packages, like the kernel, are excempt from this check.
++The default is `1'.
++
+ .IP
+ \fBlogfile\fR
+ Full directory and file name for where yum should write its log file.
+@@ -80,9 +90,13 @@ Full directory and file name for where yum should write its log file.
  \fBgpgcheck\fR
  Either `1' or `0'. This tells yum whether or not it should perform a GPG
  signature check on packages. When this is set in the [main] section it sets the
@@ -479,7 +496,7 @@ index 49d98c6..0281f1a 100644
  
  .IP
  \fBrepo_gpgcheck\fR
-@@ -134,9 +138,13 @@ an i686 package to update an i386 package. Default is `1'.
+@@ -134,9 +148,13 @@ an i686 package to update an i386 package. Default is `1'.
  
  .IP
  \fBinstallonlypkgs \fR
@@ -496,7 +513,7 @@ index 49d98c6..0281f1a 100644
  
  .IP
  \fBinstallonly_limit \fR
-@@ -217,8 +225,7 @@ diskspace before a RPM transaction is run. Default is `1' (perform the check).
+@@ -217,8 +235,7 @@ diskspace before a RPM transaction is run. Default is `1' (perform the check).
  .IP
  \fBtsflags\fR
  Comma or space separated list of transaction flags to pass to the rpm
@@ -506,7 +523,7 @@ index 49d98c6..0281f1a 100644
  with newer rpm versions.
  You can set all/any of them. However, if you don't know what these do in the
  context of an rpm transaction set you're best leaving it alone. Default is
-@@ -290,7 +297,11 @@ default
+@@ -290,7 +307,11 @@ default
  
  .IP
  \fBsslverify \fR
@@ -519,7 +536,7 @@ index 49d98c6..0281f1a 100644
  
  .IP
  \fBsslclientcert \fR
-@@ -361,6 +372,14 @@ username to use for proxy
+@@ -361,6 +382,14 @@ username to use for proxy
  password for this proxy
  
  .IP
@@ -534,7 +551,7 @@ index 49d98c6..0281f1a 100644
  \fBplugins \fR
  Either `0' or `1'. Global switch to enable or disable yum plugins. Default is
  `0' (plugins disabled). See the \fBPLUGINS\fR section of the \fByum(8)\fR man
-@@ -384,7 +403,7 @@ not update the metadata against the repository.  If you find that
+@@ -384,7 +413,7 @@ not update the metadata against the repository.  If you find that
  yum is not downloading information on updates as often as you would like
  lower the value of this option. You can also change from the default of using
  seconds to using days, hours or minutes by appending a d, h or m respectively.
@@ -543,7 +560,7 @@ index 49d98c6..0281f1a 100644
  It's also possible to use the word "never", meaning that the metadata will
  never expire. Note that when using a metalink file the metalink must always
  be newer than the metadata for the repository, due to the validation, so this
-@@ -536,6 +555,16 @@ be downloaded. The updates list is what is printed when you run "yum update",
+@@ -536,6 +565,16 @@ be downloaded. The updates list is what is printed when you run "yum update",
  Default is `normal'.
  See color_list_installed_older for possible values.
  
@@ -560,7 +577,7 @@ index 49d98c6..0281f1a 100644
  .SH "[repository] OPTIONS"
  .LP 
  The repository section(s) take the following form:
-@@ -629,6 +658,14 @@ option (above). If a GPG key is required to install a package from a
+@@ -629,6 +668,14 @@ option (above). If a GPG key is required to install a package from a
  repository, all keys specified for that repository will be installed.
  
  .IP
@@ -575,7 +592,7 @@ index 49d98c6..0281f1a 100644
  \fBexclude\fR
  Same as the [main] \fBexclude\fR option but only for this repository.
  Substitution variables, described below, are honored here.
-@@ -734,6 +771,17 @@ If this is unset it inherits it from the global setting
+@@ -734,6 +781,17 @@ If this is unset it inherits it from the global setting
  password for this proxy.
  If this is unset it inherits it from the global setting
  
@@ -41877,10 +41894,10 @@ index 9335112..ced6ba0 100644
              return self.exUserCancel()
          except IOError, e:
 diff --git a/yum.spec b/yum.spec
-index c3c7133..e9282e0 100644
+index c3c7133..4d2ad2f 100644
 --- a/yum.spec
 +++ b/yum.spec
-@@ -15,13 +15,28 @@ BuildRequires: intltool
+@@ -15,13 +15,27 @@ BuildRequires: intltool
  Requires: python >= 2.4
  Requires: rpm-python, rpm >= 0:4.4.2
  Requires: python-sqlite
@@ -41890,7 +41907,7 @@ index c3c7133..e9282e0 100644
  Requires: python-iniparse
  Requires: pygpgme
  Prereq: /sbin/chkconfig, /sbin/service, coreutils
- Conflicts: yum-skip-broken
+-Conflicts: yum-skip-broken
  Conflicts: rpm >= 5-0
 +# Zif is a re-implementation of yum in C, however:
 +#
@@ -41924,7 +41941,7 @@ index 143c9a4..c1af4ad 100644
          self.msg = msg
          self.pid = pid
 diff --git a/yum/__init__.py b/yum/__init__.py
-index 2ea9f20..fcf5076 100644
+index 2ea9f20..39ed0db 100644
 --- a/yum/__init__.py
 +++ b/yum/__init__.py
 @@ -21,6 +21,19 @@ The Yum RPM software updater.
@@ -42084,7 +42101,7 @@ index 2ea9f20..fcf5076 100644
          self.rpmdb.ts = None
  
          # do the skip broken magic, if enabled and problems exist
-@@ -930,6 +974,40 @@ class YumBase(depsolve.Depsolve):
+@@ -930,6 +974,44 @@ class YumBase(depsolve.Depsolve):
          if self.tsInfo.pkgSack is not None: # rm Transactions don't have pkgSack
              self.tsInfo.pkgSack.dropCachedData()
  
@@ -42093,6 +42110,9 @@ index 2ea9f20..fcf5076 100644
 +            txmbrs = self.tsInfo.getMembersWithState(None, TS_INSTALL_STATES)
 +        vers = {}
 +        for txmbr in txmbrs:
++            if self.allowedMultipleInstalls(txmbr.po):
++                continue # Just allow these, it's easier.
++
 +            #  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:
@@ -42111,7 +42131,8 @@ index 2ea9f20..fcf5076 100644
 +                        continue
 +                    vers[pkgname].append(pkg)
 +
-+            # If all the versions are equal, we should be fine.
++            #  If we have multiple packages, they should be of different arches
++            # and so if all the versions are equal, we should be fine.
 +            first = vers[pkgname][0]
 +            for other in vers[pkgname][1:]:
 +                if first.verEQ(other):
@@ -42125,7 +42146,7 @@ index 2ea9f20..fcf5076 100644
          #  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!:)
-@@ -976,8 +1054,8 @@ class YumBase(depsolve.Depsolve):
+@@ -976,8 +1058,8 @@ class YumBase(depsolve.Depsolve):
                  restring.append(_('Trying to remove "%s", which is protected') %
                                  pkgname)
  
@@ -42136,7 +42157,7 @@ index 2ea9f20..fcf5076 100644
          self.verbose_logger.debug('Depsolve time: %0.3f' % (time.time() - ds_st))
          return rescode, restring
  
-@@ -1032,7 +1110,7 @@ class YumBase(depsolve.Depsolve):
+@@ -1032,7 +1114,7 @@ class YumBase(depsolve.Depsolve):
              # and skip-broken shouldn't care too much about speed.
              self.rpmdb.transactionReset()
              self.installedFileRequires = None # Kind of hacky
@@ -42145,7 +42166,7 @@ index 2ea9f20..fcf5076 100644
              self._printTransaction()        
              depTree = self._buildDepTree()
              startTs = set(self.tsInfo)
-@@ -1089,7 +1167,7 @@ class YumBase(depsolve.Depsolve):
+@@ -1089,7 +1171,7 @@ class YumBase(depsolve.Depsolve):
                  self._checkUpdatedLeftovers() # Cleanup updated leftovers
                  rescode, restring = self.resolveDeps()
          if rescode != 1:
@@ -42154,7 +42175,7 @@ index 2ea9f20..fcf5076 100644
              self.verbose_logger.info(_('\nPackages skipped because of dependency problems:'))
              skipped_list = [p for p in skipped_po]
              skipped_list.sort()
-@@ -1203,14 +1281,14 @@ class YumBase(depsolve.Depsolve):
+@@ -1203,14 +1285,14 @@ class YumBase(depsolve.Depsolve):
                    TS_AVAILABLE  : "available",
                    TS_UPDATED    : "updated"}
  
@@ -42173,7 +42194,7 @@ index 2ea9f20..fcf5076 100644
                                      
      def _getPackagesToRemove(self,po,deptree,toRemove):
          '''
-@@ -1221,6 +1299,10 @@ class YumBase(depsolve.Depsolve):
+@@ -1221,6 +1303,10 @@ class YumBase(depsolve.Depsolve):
              for pkg in (txmbr.updates + txmbr.obsoletes):
                  toRemove.add(pkg)
                  self._getDepsToRemove(pkg, deptree, toRemove)
@@ -42184,7 +42205,7 @@ index 2ea9f20..fcf5076 100644
          self._getDepsToRemove(po, deptree, toRemove)
  
      def _getDepsToRemove(self,po, deptree, toRemove):
-@@ -1311,7 +1393,10 @@ class YumBase(depsolve.Depsolve):
+@@ -1311,7 +1397,10 @@ class YumBase(depsolve.Depsolve):
                  self.run_with_package_names.add('yum-metadata-parser')
                  break
  
@@ -42196,7 +42217,7 @@ index 2ea9f20..fcf5076 100644
              using_pkgs_pats = list(self.run_with_package_names)
              using_pkgs = self.rpmdb.returnPackages(patterns=using_pkgs_pats)
              rpmdbv  = self.rpmdb.simpleVersion(main_only=True)[0]
-@@ -1330,10 +1415,14 @@ class YumBase(depsolve.Depsolve):
+@@ -1330,10 +1419,14 @@ class YumBase(depsolve.Depsolve):
                  cmdline = ' '.join(self.args)
              elif hasattr(self, 'cmds') and self.cmds:
                  cmdline = ' '.join(self.cmds)
@@ -42211,7 +42232,7 @@ index 2ea9f20..fcf5076 100644
              
              self.plugins.run('historybegin')
          #  Just before we update the transaction, update what we think the
-@@ -1341,8 +1430,15 @@ class YumBase(depsolve.Depsolve):
+@@ -1341,8 +1434,15 @@ class YumBase(depsolve.Depsolve):
          # "something" happens and the rpmdb is different from what we think it
          # will be we store what we thought, not what happened (so it'll be an
          # invalid cache).
@@ -42228,7 +42249,7 @@ index 2ea9f20..fcf5076 100644
          errors = self.ts.run(cb.callback, '')
          # ts.run() exit codes are, hmm, "creative": None means all ok, empty 
          # list means some errors happened in the transaction and non-empty 
-@@ -1371,7 +1467,8 @@ class YumBase(depsolve.Depsolve):
+@@ -1371,7 +1471,8 @@ class YumBase(depsolve.Depsolve):
                                            errors=errors)
  
                            
@@ -42238,7 +42259,7 @@ index 2ea9f20..fcf5076 100644
              self.cleanUsedHeadersPackages()
          
          for i in ('ts_all_fn', 'ts_done_fn'):
-@@ -1382,7 +1479,9 @@ class YumBase(depsolve.Depsolve):
+@@ -1382,7 +1483,9 @@ class YumBase(depsolve.Depsolve):
                  except (IOError, OSError), e:
                      self.logger.critical(_('Failed to remove transaction file %s') % fn)
  
@@ -42249,7 +42270,7 @@ index 2ea9f20..fcf5076 100644
          self.plugins.run('posttrans')
          # sync up what just happened versus what is in the rpmdb
          if not self.ts.isTsFlagSet(rpm.RPMTRANS_FLAG_TEST):
-@@ -1403,8 +1502,8 @@ class YumBase(depsolve.Depsolve):
+@@ -1403,8 +1506,8 @@ class YumBase(depsolve.Depsolve):
          #    that there is not also an install of this pkg in the tsInfo (reinstall)
          # for any kind of install add from_repo to the yumdb, and the cmdline
          # and the install reason
@@ -42260,7 +42281,7 @@ index 2ea9f20..fcf5076 100644
          self.plugins.run('preverifytrans')
          for txmbr in self.tsInfo:
              if txmbr.output_state in TS_INSTALL_STATES:
-@@ -1437,19 +1536,17 @@ class YumBase(depsolve.Depsolve):
+@@ -1437,19 +1540,17 @@ class YumBase(depsolve.Depsolve):
                          po.yumdb_info.from_repo_timestamp = lp_mtime
                      except: pass
  
@@ -42288,7 +42309,7 @@ index 2ea9f20..fcf5076 100644
                  if txmbr.updates or txmbr.downgrades or txmbr.reinstall:
                      if txmbr.updates:
                          opo = txmbr.updates[0]
-@@ -1459,9 +1556,10 @@ class YumBase(depsolve.Depsolve):
+@@ -1459,9 +1560,10 @@ class YumBase(depsolve.Depsolve):
                          opo = po
                      if 'installed_by' in opo.yumdb_info:
                          po.yumdb_info.installed_by = opo.yumdb_info.installed_by
@@ -42302,7 +42323,7 @@ index 2ea9f20..fcf5076 100644
  
          # Remove old ones after installing new ones, so we can copy values.
          for txmbr in self.tsInfo:
-@@ -1482,13 +1580,15 @@ class YumBase(depsolve.Depsolve):
+@@ -1482,13 +1584,15 @@ class YumBase(depsolve.Depsolve):
                  self.verbose_logger.log(logginglevels.DEBUG_2, 'What is this? %s' % txmbr.po)
  
          self.plugins.run('postverifytrans')
@@ -42319,7 +42340,41 @@ index 2ea9f20..fcf5076 100644
  
      def costExcludePackages(self):
          """ Create an excluder for repos. with higher cost. Eg.
-@@ -1780,6 +1880,7 @@ class YumBase(depsolve.Depsolve):
+@@ -1570,11 +1674,13 @@ class YumBase(depsolve.Depsolve):
+     def doLock(self, lockfile = YUM_PID_FILE):
+         """perform the yum locking, raise yum-based exceptions, not OSErrors"""
+         
+-        # if we're not root then we don't lock - just return nicely
++        # if we're not root then lock the cache
+         if self.conf.uid != 0:
+-            return
+-            
+-        root = self.conf.installroot
++            root = self.conf.cachedir
++            # Don't want <cachedir>/var/run/yum.pid ... just: <cachedir>/yum.pid
++            lockfile = os.path.basename(lockfile)
++        else:
++            root = self.conf.installroot
+         lockfile = root + '/' + lockfile # lock in the chroot
+         lockfile = os.path.normpath(lockfile) # get rid of silly preceding extra /
+         
+@@ -1616,8 +1722,14 @@ class YumBase(depsolve.Depsolve):
+         #  Note that we can get here from __del__, so if we haven't created
+         # YumBase.conf we don't want to do so here as creating stuff inside
+         # __del__ is bad.
+-        if hasattr(self, 'preconf') or self.conf.uid != 0:
++        if hasattr(self, 'preconf'):
+             return
++
++        #  Obviously, we can't lock random places as non-root, but we still want
++        # to get rid of our lock file. Given we now have _lockfile I'm pretty
++        # sure nothing should ever pass lockfile in here anyway.
++        if self.conf.uid != 0:
++            lockfile = None
+         
+         if lockfile is not None:
+             root = self.conf.installroot
+@@ -1780,6 +1892,7 @@ class YumBase(depsolve.Depsolve):
          beg_download = time.time()
          i = 0
          local_size = 0
@@ -42327,7 +42382,7 @@ index 2ea9f20..fcf5076 100644
          for po in remote_pkgs:
              #  Recheck if the file is there, works around a couple of weird
              # edge cases.
-@@ -1822,6 +1923,14 @@ class YumBase(depsolve.Depsolve):
+@@ -1822,6 +1935,14 @@ class YumBase(depsolve.Depsolve):
                  if hasattr(urlgrabber.progress, 'text_meter_total_size'):
                      urlgrabber.progress.text_meter_total_size(remote_size,
                                                                local_size)
@@ -42342,7 +42397,7 @@ index 2ea9f20..fcf5076 100644
              except Errors.RepoError, e:
                  adderror(po, str(e))
              else:
-@@ -1836,6 +1945,10 @@ class YumBase(depsolve.Depsolve):
+@@ -1836,6 +1957,10 @@ class YumBase(depsolve.Depsolve):
  
          self.plugins.run('postdownload', pkglist=pkglist, errors=errors)
  
@@ -42353,7 +42408,7 @@ index 2ea9f20..fcf5076 100644
          return errors
  
      def verifyHeader(self, fo, po, raiseError):
-@@ -1918,8 +2031,11 @@ class YumBase(depsolve.Depsolve):
+@@ -1918,8 +2043,11 @@ class YumBase(depsolve.Depsolve):
                    might help.
              - 2 - Fatal GPG verification error, give up.
          '''
@@ -42367,7 +42422,7 @@ index 2ea9f20..fcf5076 100644
              hasgpgkey = 0
          else:
              repo = self.repos.getRepo(po.repoid)
-@@ -1985,6 +2101,7 @@ class YumBase(depsolve.Depsolve):
+@@ -1985,6 +2113,7 @@ class YumBase(depsolve.Depsolve):
              if local:
                  filelist.extend([txmbr.po.localHdr()])
              else:
@@ -42375,7 +42430,7 @@ index 2ea9f20..fcf5076 100644
                  filelist.extend([txmbr.po.localPkg(), txmbr.po.localHdr()])
  
          # now remove them
-@@ -2009,7 +2126,7 @@ class YumBase(depsolve.Depsolve):
+@@ -2009,7 +2138,7 @@ class YumBase(depsolve.Depsolve):
          return self._cleanFiles(exts, 'pkgdir', 'package')
  
      def cleanSqlite(self):
@@ -42384,7 +42439,7 @@ index 2ea9f20..fcf5076 100644
          return self._cleanFiles(exts, 'cachedir', 'sqlite')
  
      def cleanMetadata(self):
-@@ -2276,7 +2393,8 @@ class YumBase(depsolve.Depsolve):
+@@ -2276,7 +2405,8 @@ class YumBase(depsolve.Depsolve):
          return results
      
      # pre 3.2.10 API used to always showdups, so that's the default atm.
@@ -42394,7 +42449,7 @@ index 2ea9f20..fcf5076 100644
          """Generator method to lighten memory load for some searches.
             This is the preferred search function to use. Setting keys to True
             will use the search keys that matched in the sorting, and return
-@@ -2322,41 +2440,45 @@ class YumBase(depsolve.Depsolve):
+@@ -2322,41 +2452,45 @@ class YumBase(depsolve.Depsolve):
  
                  if len(tmpvalues) > 0:
                      sorted_lists[count].append((po, tmpkeys, tmpvalues))
@@ -42470,7 +42525,7 @@ index 2ea9f20..fcf5076 100644
  
          # take our existing dict-by-pkg and make the dict-by-count for 
          # this bizarro sorted_lists format
-@@ -2437,10 +2559,7 @@ class YumBase(depsolve.Depsolve):
+@@ -2437,10 +2571,7 @@ class YumBase(depsolve.Depsolve):
      
      def searchPackageProvides(self, args, callback=None,
                                callback_has_matchfor=False):
@@ -42482,7 +42537,7 @@ index 2ea9f20..fcf5076 100644
              if not misc.re_glob(arg):
                  isglob = False
                  if arg[0] != '/':
-@@ -2450,7 +2569,14 @@ class YumBase(depsolve.Depsolve):
+@@ -2450,7 +2581,14 @@ class YumBase(depsolve.Depsolve):
              else:
                  isglob = True
                  canBeFile = misc.re_filename(arg)
@@ -42498,7 +42553,7 @@ index 2ea9f20..fcf5076 100644
              if not isglob:
                  usedDepString = True
                  where = self.returnPackagesByDep(arg)
-@@ -2498,16 +2624,9 @@ class YumBase(depsolve.Depsolve):
+@@ -2498,16 +2636,9 @@ class YumBase(depsolve.Depsolve):
          
          # installed rpms, too
          taglist = ['filelist', 'dirnames', 'provides_names']
@@ -42517,7 +42572,7 @@ index 2ea9f20..fcf5076 100644
              
              if not isglob:
                  where = self.returnInstalledPackagesByDep(arg)
-@@ -2528,11 +2647,17 @@ class YumBase(depsolve.Depsolve):
+@@ -2528,11 +2659,17 @@ class YumBase(depsolve.Depsolve):
              else:
                  usedDepString = False
                  where = self.rpmdb
@@ -42537,7 +42592,7 @@ index 2ea9f20..fcf5076 100644
                          tagdata = getattr(po, tag)
                          if tagdata is None:
                              continue
-@@ -2542,7 +2667,7 @@ class YumBase(depsolve.Depsolve):
+@@ -2542,7 +2679,7 @@ class YumBase(depsolve.Depsolve):
                              searchlist.append(tagdata)
                      
                      for item in searchlist:
@@ -42546,7 +42601,7 @@ index 2ea9f20..fcf5076 100644
                              tmpvalues.append(item)
                  
                      if len(tmpvalues) > 0:
-@@ -2670,6 +2795,9 @@ class YumBase(depsolve.Depsolve):
+@@ -2670,6 +2807,9 @@ class YumBase(depsolve.Depsolve):
              if 'optional' in package_types:
                  pkgs.extend(thisgroup.optional_packages)
  
@@ -42556,7 +42611,7 @@ index 2ea9f20..fcf5076 100644
              for pkg in pkgs:
                  self.verbose_logger.log(logginglevels.DEBUG_2,
                      _('Adding package %s from group %s'), pkg, thisgroup.groupid)
-@@ -2887,7 +3015,7 @@ class YumBase(depsolve.Depsolve):
+@@ -2887,7 +3027,7 @@ class YumBase(depsolve.Depsolve):
                  if len(dep_split) == 3:
                      depname, flagsymbol, depver = dep_split
                      if not flagsymbol in SYMBOLFLAGS:
@@ -42565,7 +42620,7 @@ index 2ea9f20..fcf5076 100644
                      depflags = SYMBOLFLAGS[flagsymbol]
  
          return self.rpmdb.getProvides(depname, depflags, depver).keys()
-@@ -3100,6 +3228,9 @@ class YumBase(depsolve.Depsolve):
+@@ -3100,6 +3240,9 @@ class YumBase(depsolve.Depsolve):
  
      def _find_obsoletees(self, po):
          """ Return the pkgs. that are obsoleted by the po we pass in. """
@@ -42575,7 +42630,7 @@ index 2ea9f20..fcf5076 100644
          if not isinstance(po, YumLocalPackage):
              for (obstup, inst_tup) in self.up.getObsoletersTuples(name=po.name):
                  if po.pkgtup == obstup:
-@@ -3160,7 +3291,7 @@ class YumBase(depsolve.Depsolve):
+@@ -3160,7 +3303,7 @@ class YumBase(depsolve.Depsolve):
                      try:
                          mypkgs = self.returnPackagesByDep(arg)
                      except yum.Errors.YumBaseError, e:
@@ -42584,7 +42639,7 @@ index 2ea9f20..fcf5076 100644
                      else:
                          # install MTA* == fail, because provides don't do globs
                          # install /usr/kerberos/bin/* == success (and we want
-@@ -3490,7 +3621,7 @@ class YumBase(depsolve.Depsolve):
+@@ -3490,7 +3633,7 @@ class YumBase(depsolve.Depsolve):
              availpkgs.extend(m)
  
              if not availpkgs and not instpkgs:
@@ -42593,7 +42648,7 @@ index 2ea9f20..fcf5076 100644
          
          else: # we have kwargs, sort them out.
              nevra_dict = self._nevra_kwarg_parse(kwargs)
-@@ -3576,6 +3707,9 @@ class YumBase(depsolve.Depsolve):
+@@ -3576,6 +3719,9 @@ class YumBase(depsolve.Depsolve):
                          self.tsInfo.addObsoleted(obsoletee, po)
                          tx_return.append(txmbr)
                  else:
@@ -42603,7 +42658,7 @@ index 2ea9f20..fcf5076 100644
                      txmbr = self._add_up_txmbr(requiringPo, po, installed_pkg)
                      tx_return.append(txmbr)
                          
-@@ -3599,6 +3733,9 @@ class YumBase(depsolve.Depsolve):
+@@ -3599,6 +3745,9 @@ class YumBase(depsolve.Depsolve):
                  
                  else:
                      updated_pkg =  self.getInstalledPackageObject(updated)
@@ -42613,7 +42668,7 @@ index 2ea9f20..fcf5076 100644
                      txmbr = self._add_up_txmbr(requiringPo,
                                                 available_pkg, updated_pkg)
                      tx_return.append(txmbr)
-@@ -3669,7 +3806,8 @@ class YumBase(depsolve.Depsolve):
+@@ -3669,7 +3818,8 @@ class YumBase(depsolve.Depsolve):
                          self.logger.critical(_('%s') % e)
                      
                      if not depmatches:
@@ -42623,7 +42678,7 @@ index 2ea9f20..fcf5076 100644
                      else:
                          pkgs.extend(depmatches)
                  
-@@ -3690,6 +3828,14 @@ class YumBase(depsolve.Depsolve):
+@@ -3690,6 +3840,14 @@ class YumBase(depsolve.Depsolve):
              if self.conf.protected_packages and po.pkgtup == kern_pkgtup:
                  self.logger.warning(_("Skipping the running kernel: %s") % po)
                  continue
@@ -42638,7 +42693,7 @@ index 2ea9f20..fcf5076 100644
              txmbr = self.tsInfo.addErase(po)
              tx_return.append(txmbr)
          
-@@ -3952,7 +4098,7 @@ class YumBase(depsolve.Depsolve):
+@@ -3952,7 +4110,7 @@ class YumBase(depsolve.Depsolve):
              EOL """
  
          if not po and not kwargs:
@@ -42647,7 +42702,7 @@ index 2ea9f20..fcf5076 100644
  
          doing_group_pkgs = False
          if po:
-@@ -3975,7 +4121,7 @@ class YumBase(depsolve.Depsolve):
+@@ -3975,7 +4133,7 @@ class YumBase(depsolve.Depsolve):
                      try:
                          apkgs = self.returnPackagesByDep(arg)
                      except yum.Errors.YumBaseError, e:
@@ -42656,7 +42711,7 @@ index 2ea9f20..fcf5076 100644
  
          else:
              nevra_dict = self._nevra_kwarg_parse(kwargs)
-@@ -4170,6 +4316,11 @@ class YumBase(depsolve.Depsolve):
+@@ -4170,6 +4328,11 @@ class YumBase(depsolve.Depsolve):
                      done = True
          for pkg in transaction.trans_data:
              if pkg.state == 'Obsoleting':
@@ -42668,7 +42723,7 @@ index 2ea9f20..fcf5076 100644
                  if self.remove(pkgtup=pkg.pkgtup):
                      done = True
          for pkg in transaction.trans_data:
-@@ -4187,36 +4338,61 @@ class YumBase(depsolve.Depsolve):
+@@ -4187,36 +4350,61 @@ class YumBase(depsolve.Depsolve):
          self.conf.obsoletes = old_conf_obs
          return done
  
@@ -42742,7 +42797,7 @@ index 2ea9f20..fcf5076 100644
          # Parse the key
          try:
              keys_info = misc.getgpgkeyinfo(rawkey, multiple=True)
-@@ -4233,29 +4409,31 @@ class YumBase(depsolve.Depsolve):
+@@ -4233,29 +4421,31 @@ class YumBase(depsolve.Depsolve):
                        _('GPG key parsing failed: key does not have value %s') + info
                  thiskey[info] = keyinfo[info]
              thiskey['hexkeyid'] = misc.keyIdToRPMVer(keyinfo['keyid']).upper()
@@ -42779,7 +42834,7 @@ index 2ea9f20..fcf5076 100644
                      keyurl.replace("file://","")))
          self.logger.critical("%s", msg)
  
-@@ -4276,36 +4454,46 @@ class YumBase(depsolve.Depsolve):
+@@ -4276,36 +4466,46 @@ class YumBase(depsolve.Depsolve):
          keyurls = repo.gpgkey
          key_installed = False
  
@@ -42845,7 +42900,7 @@ index 2ea9f20..fcf5076 100644
                  result = ts.pgpImportPubkey(misc.procgpgkey(info['raw_key']))
                  if result != 0:
                      raise Errors.YumBaseError, \
-@@ -4327,43 +4515,55 @@ class YumBase(depsolve.Depsolve):
+@@ -4327,43 +4527,55 @@ class YumBase(depsolve.Depsolve):
              self.logger.info(_("Import of key(s) didn't help, wrong key(s)?"))
              raise Errors.YumBaseError, errmsg
      
@@ -42920,7 +42975,7 @@ index 2ea9f20..fcf5076 100644
                  if not result:
                      raise Errors.YumBaseError, _('Key import failed')
                  self.logger.info(_('Key imported successfully'))
-@@ -4376,6 +4576,29 @@ class YumBase(depsolve.Depsolve):
+@@ -4376,6 +4588,29 @@ class YumBase(depsolve.Depsolve):
                    'Check that the correct key URLs are configured for ' \
                    'this repository.') % (repo.name)
  
@@ -42950,7 +43005,7 @@ index 2ea9f20..fcf5076 100644
      def _limit_installonly_pkgs(self):
          """ Limit packages based on conf.installonly_limit, if any of the
              packages being installed have a provide in conf.installonlypkgs.
-@@ -4626,6 +4849,7 @@ class YumBase(depsolve.Depsolve):
+@@ -4626,6 +4861,7 @@ class YumBase(depsolve.Depsolve):
          newrepo = yumRepo.YumRepository(repoid)
          newrepo.name = repoid
          newrepo.basecachedir = self.conf.cachedir
@@ -42958,7 +43013,7 @@ index 2ea9f20..fcf5076 100644
          var_convert = kwargs.get('variable_convert', True)
          
          if baseurls:
-@@ -4652,6 +4876,7 @@ class YumBase(depsolve.Depsolve):
+@@ -4652,6 +4888,7 @@ class YumBase(depsolve.Depsolve):
          newrepo.gpgcheck = self.conf.gpgcheck
          newrepo.repo_gpgcheck = self.conf.repo_gpgcheck
          newrepo.basecachedir = self.conf.cachedir
@@ -42966,7 +43021,7 @@ index 2ea9f20..fcf5076 100644
  
          for key in kwargs.keys():
              if not hasattr(newrepo, key): continue # skip the ones which aren't vars
-@@ -4722,3 +4947,267 @@ class YumBase(depsolve.Depsolve):
+@@ -4722,3 +4959,267 @@ class YumBase(depsolve.Depsolve):
          self.plugins.run('verify_package', verify_package=verify_package)
          return verify_package
  
diff --git a/yum.spec b/yum.spec
index 3e9b9c1..d28f169 100644
--- a/yum.spec
+++ b/yum.spec
@@ -7,7 +7,7 @@
 Summary: RPM installer/updater
 Name: yum
 Version: 3.2.28
-Release: 16%{?dist}
+Release: 17%{?dist}
 License: GPLv2+
 Group: System Environment/Base
 Source0: http://yum.baseurl.org/download/3.2/%{name}-%{version}.tar.gz
@@ -180,6 +180,11 @@ rm -rf $RPM_BUILD_ROOT
 %dir %{yum_pluginsshare}
 
 %changelog
+* Thu Jan  6 2011 James Antill <james at fedoraproject.org> - 3.2.28-17
+- Allow kernel installs with multilib protection ... oops!
+- Don't conflict with fixed versions of Zif.
+- Add locks for non-root.
+
 * Tue Jan  4 2011 Seth Vidal <skvidal at fedoraproject.org> - 3.2.28-16
 - fix skip-broken conflict - thanks dgilmore for the catch
 


More information about the scm-commits mailing list