[yum] update to latest HEAD.

James Antill james at fedoraproject.org
Fri Jun 8 14:57:38 UTC 2012


commit 5c7416e76894279cf01e2ff925593de71fe77688
Author: James Antill <james at and.org>
Date:   Fri Jun 8 10:57:31 2012 -0400

    update to latest HEAD.
    
    - Fix for ppc64p7 detection.

 yum-HEAD.patch |  565 ++++++++++++++++++++++++++++++++++++++++----------------
 yum.spec       |    6 +-
 2 files changed, 412 insertions(+), 159 deletions(-)
---
diff --git a/yum-HEAD.patch b/yum-HEAD.patch
index 44a2188..de0e1fc 100644
--- a/yum-HEAD.patch
+++ b/yum-HEAD.patch
@@ -148045,7 +148045,7 @@ index 704a726..05fe6bf 100644
 -
 -
 diff --git a/rpmUtils/arch.py b/rpmUtils/arch.py
-index 6082005..2226dc5 100644
+index 6082005..d560be0 100644
 --- a/rpmUtils/arch.py
 +++ b/rpmUtils/arch.py
 @@ -2,6 +2,11 @@
@@ -148105,6 +148105,15 @@ index 6082005..2226dc5 100644
  def legitMultiArchesInSameLib(arch=None):
      # this is completely crackrock - if anyone has a better way I
      # am all ears
+@@ -80,7 +102,7 @@ def legitMultiArchesInSameLib(arch=None):
+          
+     results = [arch]
+    
+-    if arch == 'x86_64' or arch.startswith('sparcv9'):
++    if arch in ('x86_64', 'ppc64') or arch.startswith('sparcv9'):
+         for (k, v) in arches.items():
+             if v == arch:
+                 results.append(k)
 @@ -210,6 +232,32 @@ def _try_read_cpuinfo():
      except:
          return []
@@ -148474,6 +148483,82 @@ index 7af3f16..ea47b03 100644
  
      def testUpdate_so_req_diff_arch(self):
          rpo1 = FakePackage('foozoomer')
+diff --git a/test/revdepupdatetests.py b/test/revdepupdatetests.py
+new file mode 100644
+index 0000000..a98341d
+--- /dev/null
++++ b/test/revdepupdatetests.py
+@@ -0,0 +1,70 @@
++from testbase import *
++
++class RevdepUpdateTests(OperationsTests):
++
++    @staticmethod
++    def buildPkgs(pkgs, *args):
++        """ This test checks that remove_old_deps handles reverse 
++        dependencies properly during yum update. Specifically, 
++        remove_old_deps should remove precisely the packages which are not 
++        required by any package currently installed or pending 
++        installation. Two cases:
++        
++        For packages A, B, we write A -> B if B requires A. Packages 
++        with a dep prefix are dep-installed.
++
++        1) Installed: dep1 -> dep2 -> pkg1 <- dep3 and dep3 -> dep2
++           Update: pkg1, which requires dep2 but no longer requires dep3.
++           Correct outcome: dep1, dep2, dep3, pkg1, since dep2 still 
++           needs dep3.
++
++        2) Installed: dep1 -> dep2 -> pkg1 <- dep3 and dep3 -> dep2
++           Update: pkg1, which now requires only dep1
++           Correct outcome: dep1, pkg1, since dep2 and dep3 are 
++           no longer needed.
++           
++        """
++
++        
++        pkgs.installed_1 = FakePackage('dep1', '1', '0', '0', 'noarch')
++        pkgs.installed_1.yumdb_info.reason = 'dep'
++        
++        pkgs.installed_2 = FakePackage('dep2', '1', '0', '0', 'noarch')
++        pkgs.installed_2.yumdb_info.reason = 'dep'
++        
++        pkgs.installed_3 = FakePackage('pkg1', '1', '0', '0', 'noarch')
++        pkgs.installed_3.yumdb_info.reason = 'user'
++
++        pkgs.installed_4 = FakePackage('dep3', '1', '0', '0', 'noarch')
++        pkgs.installed_4.yumdb_info.reason = 'dep'
++        
++        pkgs.installed_1.addRequiringPkg(pkgs.installed_2)
++        pkgs.installed_2.addRequiringPkg(pkgs.installed_3)
++        pkgs.installed_4.addRequiringPkg(pkgs.installed_2)
++
++        pkgs.installed_2.addRequiresPkg(pkgs.installed_1)
++        pkgs.installed_2.addRequiresPkg(pkgs.installed_4)
++        pkgs.installed_3.addRequiresPkg(pkgs.installed_4)
++        pkgs.installed_3.addRequiresPkg(pkgs.installed_2)
++
++        pkgs.update_2 = FakePackage('dep2', '2', '0', '0', 'noarch')
++        pkgs.update_2.addRequires('dep1', 'EQ', ('0', '1', '0'))
++
++        pkgs.update_3 = FakePackage('pkg1', '2', '0', '0', 'noarch')
++        pkgs.update_3.addRequires('dep2', 'EQ', ('0', '1', '0'))
++
++        pkgs.update_4 = FakePackage('pkg1', '2', '0', '0', 'noarch')
++        pkgs.update_4.addRequires('dep1', 'EQ', ('0', '1', '0'))
++
++    def testUpdate(self):
++        p = self.pkgs
++        res, msg = self.runOperation(['update'], [p.installed_1, p.installed_2, p.installed_3, p.installed_4], [p.update_3])
++        self.assert_(res=='ok', msg)
++        self.assertResult( (p.installed_1, p.installed_2, p.update_3, p.installed_4) )
++    
++    def testUpdate2(self):
++        p = self.pkgs
++        res, msg = self.runOperation(['update'], [p.installed_1, p.installed_2, p.installed_3, p.installed_4], [p.update_4])
++        self.assert_(res=='ok', msg)
++        self.assertResult( (p.installed_1, p.update_4) )
++
 diff --git a/test/simpleobsoletestests.py b/test/simpleobsoletestests.py
 index 97a9923..70dde98 100644
 --- a/test/simpleobsoletestests.py
@@ -150648,7 +150733,7 @@ index abd203f..65c62a9 100644
  - 3.4.1
  - umask bug fix.
 diff --git a/yum/__init__.py b/yum/__init__.py
-index 99039e0..5be32e9 100644
+index 99039e0..4650639 100644
 --- a/yum/__init__.py
 +++ b/yum/__init__.py
 @@ -46,8 +46,13 @@ import operator
@@ -150971,7 +151056,11 @@ index 99039e0..5be32e9 100644
          repo = yumRepo.YumRepository(section)
          try:
              repo.populate(parser, section, self.conf)
-@@ -496,35 +581,36 @@ class YumBase(depsolve.Depsolve):
+@@ -493,38 +578,40 @@ class YumBase(depsolve.Depsolve):
+         repo.name = to_unicode(repo.name)
+ 
+         # Set attributes not from the config file
++        repo.old_base_cache_dir = getattr(self, '_old_cachedir', '')
          repo.basecachedir = self.conf.cachedir
          repo.yumvar.update(self.conf.yumvar)
          repo.cfg = parser
@@ -151030,7 +151119,7 @@ index 99039e0..5be32e9 100644
          if isinstance(self.plugins, plugins.YumPlugins):
              raise RuntimeError(_("plugins already initialised"))
  
-@@ -533,6 +619,8 @@ class YumBase(depsolve.Depsolve):
+@@ -533,6 +620,8 @@ class YumBase(depsolve.Depsolve):
  
      
      def doRpmDBSetup(self):
@@ -151039,7 +151128,7 @@ index 99039e0..5be32e9 100644
          warnings.warn(_('doRpmDBSetup() will go away in a future version of Yum.\n'),
                  Errors.YumFutureDeprecationWarning, stacklevel=2)
  
-@@ -552,7 +640,8 @@ class YumBase(depsolve.Depsolve):
+@@ -552,7 +641,8 @@ class YumBase(depsolve.Depsolve):
          return self._rpmdb
  
      def closeRpmDB(self):
@@ -151049,7 +151138,7 @@ index 99039e0..5be32e9 100644
          if self._rpmdb is not None:
              self._rpmdb.ts = None
              self._rpmdb.dropCachedData()
-@@ -567,6 +656,12 @@ class YumBase(depsolve.Depsolve):
+@@ -567,6 +657,12 @@ class YumBase(depsolve.Depsolve):
          self._ts = None
  
      def doRepoSetup(self, thisrepo=None):
@@ -151062,7 +151151,7 @@ index 99039e0..5be32e9 100644
          warnings.warn(_('doRepoSetup() will go away in a future version of Yum.\n'),
                  Errors.YumFutureDeprecationWarning, stacklevel=2)
  
-@@ -630,6 +725,14 @@ class YumBase(depsolve.Depsolve):
+@@ -630,6 +726,14 @@ class YumBase(depsolve.Depsolve):
          self._repos = RepoStorage(self)
      
      def doSackSetup(self, archlist=None, thisrepo=None):
@@ -151077,7 +151166,7 @@ index 99039e0..5be32e9 100644
          warnings.warn(_('doSackSetup() will go away in a future version of Yum.\n'),
                  Errors.YumFutureDeprecationWarning, stacklevel=2)
  
-@@ -711,6 +814,9 @@ class YumBase(depsolve.Depsolve):
+@@ -711,6 +815,9 @@ class YumBase(depsolve.Depsolve):
              
             
      def doUpdateSetup(self):
@@ -151087,7 +151176,7 @@ index 99039e0..5be32e9 100644
          warnings.warn(_('doUpdateSetup() will go away in a future version of Yum.\n'),
                  Errors.YumFutureDeprecationWarning, stacklevel=2)
  
-@@ -765,6 +871,8 @@ class YumBase(depsolve.Depsolve):
+@@ -765,6 +872,8 @@ class YumBase(depsolve.Depsolve):
          return self._up
      
      def doGroupSetup(self):
@@ -151096,7 +151185,7 @@ index 99039e0..5be32e9 100644
          warnings.warn(_('doGroupSetup() will go away in a future version of Yum.\n'),
                  Errors.YumFutureDeprecationWarning, stacklevel=2)
  
-@@ -829,7 +937,7 @@ class YumBase(depsolve.Depsolve):
+@@ -829,7 +938,7 @@ class YumBase(depsolve.Depsolve):
              try:
                  self._comps.add(groupfile)
              except (Errors.GroupsError,Errors.CompsException), e:
@@ -151105,7 +151194,7 @@ index 99039e0..5be32e9 100644
                  self.logger.critical(msg)
              else:
                  repo.groups_added = True
-@@ -837,7 +945,10 @@ class YumBase(depsolve.Depsolve):
+@@ -837,7 +946,10 @@ class YumBase(depsolve.Depsolve):
          if self._comps.compscount == 0:
              raise Errors.GroupsError, _('No Groups Available in any repository')
  
@@ -151117,7 +151206,7 @@ index 99039e0..5be32e9 100644
          self.verbose_logger.debug('group time: %0.3f' % (time.time() - group_st))                
          return self._comps
  
-@@ -868,7 +979,7 @@ class YumBase(depsolve.Depsolve):
+@@ -868,7 +980,7 @@ class YumBase(depsolve.Depsolve):
                      # feed it into _tags.add()
                      self._tags.add(repo.id, tag_sqlite)
                  except (Errors.RepoError, Errors.PkgTagsError), e:
@@ -151126,7 +151215,7 @@ index 99039e0..5be32e9 100644
                      self.logger.critical(msg)
                      
                  
-@@ -881,9 +992,18 @@ class YumBase(depsolve.Depsolve):
+@@ -881,9 +993,18 @@ class YumBase(depsolve.Depsolve):
          if self._history is None:
              pdb_path = self.conf.persistdir + "/history"
              self._history = yum.history.YumHistory(root=self.conf.installroot,
@@ -151146,7 +151235,7 @@ index 99039e0..5be32e9 100644
      # properties so they auto-create themselves with defaults
      repos = property(fget=lambda self: self._getRepos(),
                       fset=lambda self, value: setattr(self, "_repos", value),
-@@ -921,6 +1041,11 @@ class YumBase(depsolve.Depsolve):
+@@ -921,6 +1042,11 @@ class YumBase(depsolve.Depsolve):
                         fdel=lambda self: setattr(self, "_history", None),
                         doc="Yum History Object")
  
@@ -151158,7 +151247,7 @@ index 99039e0..5be32e9 100644
      pkgtags = property(fget=lambda self: self._getTags(),
                         fset=lambda self, value: setattr(self, "_tags",value),
                         fdel=lambda self: setattr(self, "_tags", None),
-@@ -928,9 +1053,10 @@ class YumBase(depsolve.Depsolve):
+@@ -928,9 +1054,10 @@ class YumBase(depsolve.Depsolve):
      
      
      def doSackFilelistPopulate(self):
@@ -151172,7 +151261,7 @@ index 99039e0..5be32e9 100644
          necessary = False
          
          # I can't think of a nice way of doing this, we have to have the sack here
-@@ -951,8 +1077,12 @@ class YumBase(depsolve.Depsolve):
+@@ -951,8 +1078,12 @@ class YumBase(depsolve.Depsolve):
              self.repos.populateSack(mdtype='filelists')
             
      def yumUtilsMsg(self, func, prog):
@@ -151187,7 +151276,7 @@ index 99039e0..5be32e9 100644
          if self.rpmdb.contains(name="yum-utils"):
              return
  
-@@ -964,8 +1094,17 @@ class YumBase(depsolve.Depsolve):
+@@ -964,8 +1095,17 @@ class YumBase(depsolve.Depsolve):
               (hibeg, prog, hiend))
  
      def buildTransaction(self, unfinished_transactions_check=True):
@@ -151207,7 +151296,7 @@ index 99039e0..5be32e9 100644
          if (unfinished_transactions_check and
              misc.find_unfinished_transactions(yumlibpath=self.conf.persistdir)):
              msg = _('There are unfinished transactions remaining. You might ' \
-@@ -1004,7 +1143,7 @@ class YumBase(depsolve.Depsolve):
+@@ -1004,7 +1144,7 @@ class YumBase(depsolve.Depsolve):
              # If transaction was changed by postresolve plugins then we should run skipbroken again
              (rescode, restring) = self._doSkipBroken(rescode, restring, clear_skipped=False )
  
@@ -151216,7 +151305,7 @@ index 99039e0..5be32e9 100644
              self.tsInfo.pkgSack.dropCachedData()
  
          # FIXME: This is horrible, see below and yummain. Maybe create a real
-@@ -1242,13 +1381,15 @@ class YumBase(depsolve.Depsolve):
+@@ -1242,13 +1382,15 @@ class YumBase(depsolve.Depsolve):
          if None in pkgtup:
              return None
          return pkgtup
@@ -151236,7 +151325,7 @@ index 99039e0..5be32e9 100644
          if pkgtup is None:
              return
          self._not_found_i[pkgtup] = YumNotFoundPackage(pkgtup)
-@@ -1454,8 +1595,14 @@ class YumBase(depsolve.Depsolve):
+@@ -1454,8 +1596,14 @@ class YumBase(depsolve.Depsolve):
          return probs
  
      def runTransaction(self, cb):
@@ -151252,7 +151341,7 @@ index 99039e0..5be32e9 100644
          self.plugins.run('pretrans')
  
          #  We may want to put this other places, eventually, but for now it's
-@@ -1516,10 +1663,23 @@ class YumBase(depsolve.Depsolve):
+@@ -1516,10 +1664,23 @@ class YumBase(depsolve.Depsolve):
                  pass
          self._ts_save_file = None
          
@@ -151276,7 +151365,7 @@ index 99039e0..5be32e9 100644
          
          # make resultobject - just a plain yumgenericholder object
          resultobject = misc.GenericHolder()
-@@ -1567,13 +1727,24 @@ class YumBase(depsolve.Depsolve):
+@@ -1567,13 +1728,24 @@ class YumBase(depsolve.Depsolve):
          self.plugins.run('posttrans')
          # sync up what just happened versus what is in the rpmdb
          if not self.ts.isTsFlagSet(rpm.RPMTRANS_FLAG_TEST):
@@ -151306,7 +151395,7 @@ index 99039e0..5be32e9 100644
          # check to see that the rpmdb and the tsInfo roughly matches
          # push package object metadata outside of rpmdb into yumdb
          # delete old yumdb metadata entries
-@@ -1584,9 +1755,16 @@ class YumBase(depsolve.Depsolve):
+@@ -1584,9 +1756,16 @@ 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
@@ -151323,7 +151412,7 @@ index 99039e0..5be32e9 100644
          for txmbr in self.tsInfo:
              if txmbr.output_state in TS_INSTALL_STATES:
                  if not self.rpmdb.contains(po=txmbr.po):
-@@ -1596,7 +1774,9 @@ class YumBase(depsolve.Depsolve):
+@@ -1596,7 +1775,9 @@ class YumBase(depsolve.Depsolve):
                                             ' but is not!' % txmbr.po))
                      # Note: Get Panu to do te.Failed() so we don't have to
                      txmbr.output_state = TS_FAILED
@@ -151333,7 +151422,7 @@ index 99039e0..5be32e9 100644
                  po = self.getInstalledPackageObject(txmbr.pkgtup)
                  rpo = txmbr.po
                  po.yumdb_info.from_repo = rpo.repoid
-@@ -1630,6 +1810,10 @@ class YumBase(depsolve.Depsolve):
+@@ -1630,6 +1811,10 @@ class YumBase(depsolve.Depsolve):
                      if md:
                          po.yumdb_info.from_repo_timestamp = str(md.timestamp)
  
@@ -151344,7 +151433,7 @@ index 99039e0..5be32e9 100644
                  loginuid = misc.getloginuid()
                  if txmbr.updates or txmbr.downgrades or txmbr.reinstall:
                      if txmbr.updates:
-@@ -1640,11 +1824,16 @@ class YumBase(depsolve.Depsolve):
+@@ -1640,11 +1825,16 @@ class YumBase(depsolve.Depsolve):
                          opo = po
                      if 'installed_by' in opo.yumdb_info:
                          po.yumdb_info.installed_by = opo.yumdb_info.installed_by
@@ -151361,7 +151450,7 @@ index 99039e0..5be32e9 100644
          # Remove old ones after installing new ones, so we can copy values.
          for txmbr in self.tsInfo:
              if txmbr.output_state in TS_INSTALL_STATES:
-@@ -1662,10 +1851,13 @@ class YumBase(depsolve.Depsolve):
+@@ -1662,10 +1852,13 @@ class YumBase(depsolve.Depsolve):
                                                 ' but is not!' % txmbr.po))
                          # Note: Get Panu to do te.Failed() so we don't have to
                          txmbr.output_state = TS_FAILED
@@ -151375,7 +151464,7 @@ index 99039e0..5be32e9 100644
                  self.verbose_logger.log(logginglevels.DEBUG_2, 'What is this? %s' % txmbr.po)
  
          self.plugins.run('postverifytrans')
-@@ -1680,10 +1872,11 @@ class YumBase(depsolve.Depsolve):
+@@ -1680,10 +1873,11 @@ class YumBase(depsolve.Depsolve):
          self.verbose_logger.debug('VerifyTransaction time: %0.3f' % (time.time() - vt_st))
  
      def costExcludePackages(self):
@@ -151391,7 +151480,7 @@ index 99039e0..5be32e9 100644
          # if all the repo.costs are equal then don't bother running things
          costs = {}
          for r in self.repos.listEnabled():
-@@ -1705,10 +1898,12 @@ class YumBase(depsolve.Depsolve):
+@@ -1705,10 +1899,12 @@ class YumBase(depsolve.Depsolve):
              done = True
  
      def excludePackages(self, repo=None):
@@ -151407,7 +151496,7 @@ index 99039e0..5be32e9 100644
          if "all" in self.conf.disable_excludes:
              return
          
-@@ -1735,9 +1930,11 @@ class YumBase(depsolve.Depsolve):
+@@ -1735,9 +1931,11 @@ class YumBase(depsolve.Depsolve):
              self.pkgSack.addPackageExcluder(repoid, exid,'exclude.match', match)
  
      def includePackages(self, repo):
@@ -151422,7 +151511,7 @@ index 99039e0..5be32e9 100644
          includelist = repo.getIncludePkgList()
          
          if len(includelist) == 0:
-@@ -1757,8 +1954,11 @@ class YumBase(depsolve.Depsolve):
+@@ -1757,8 +1955,11 @@ class YumBase(depsolve.Depsolve):
          self.pkgSack.addPackageExcluder(repo.id, exid, 'exclude.marked')
          
      def doLock(self, lockfile = YUM_PID_FILE):
@@ -151436,7 +151525,7 @@ index 99039e0..5be32e9 100644
          if self.conf.uid != 0:
              #  If we are a user, assume we are using the root cache ... so don't
              # bother locking.
-@@ -1774,38 +1974,26 @@ class YumBase(depsolve.Depsolve):
+@@ -1774,38 +1975,26 @@ class YumBase(depsolve.Depsolve):
          
          mypid=str(os.getpid())    
          while not self._lock(lockfile, mypid, 0644):
@@ -151490,7 +151579,7 @@ index 99039e0..5be32e9 100644
          # if we're not root then we don't lock - just return nicely
          #  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
-@@ -1830,31 +2018,69 @@ class YumBase(depsolve.Depsolve):
+@@ -1830,31 +2019,69 @@ class YumBase(depsolve.Depsolve):
          self._unlock(lockfile)
          self._lockfile = None
          
@@ -151570,7 +151659,7 @@ index 99039e0..5be32e9 100644
          failed = False
  
          if type(fo) is types.InstanceType:
-@@ -1894,9 +2120,16 @@ class YumBase(depsolve.Depsolve):
+@@ -1894,9 +2121,16 @@ class YumBase(depsolve.Depsolve):
          
          
      def verifyChecksum(self, fo, checksumType, csum):
@@ -151590,7 +151679,7 @@ index 99039e0..5be32e9 100644
          try:
              filesum = misc.checksum(checksumType, fo)
          except Errors.MiscError, e:
-@@ -1908,6 +2141,17 @@ class YumBase(depsolve.Depsolve):
+@@ -1908,6 +2142,17 @@ class YumBase(depsolve.Depsolve):
          return 0
  
      def downloadPkgs(self, pkglist, callback=None, callback_total=None):
@@ -151608,7 +151697,7 @@ index 99039e0..5be32e9 100644
          def mediasort(apo, bpo):
              # FIXME: we should probably also use the mediaid; else we
              # could conceivably ping-pong between different disc1's
-@@ -1979,8 +2223,9 @@ class YumBase(depsolve.Depsolve):
+@@ -1979,8 +2224,9 @@ class YumBase(depsolve.Depsolve):
              urlgrabber.progress.text_meter_total_size(remote_size)
          beg_download = time.time()
          i = 0
@@ -151619,7 +151708,7 @@ index 99039e0..5be32e9 100644
          for po in remote_pkgs:
              #  Recheck if the file is there, works around a couple of weird
              # edge cases.
-@@ -1992,52 +2237,47 @@ class YumBase(depsolve.Depsolve):
+@@ -1992,52 +2238,47 @@ class YumBase(depsolve.Depsolve):
                      remote_size -= po.size
                      if hasattr(urlgrabber.progress, 'text_meter_total_size'):
                          urlgrabber.progress.text_meter_total_size(remote_size,
@@ -151698,7 +151787,7 @@ index 99039e0..5be32e9 100644
          if hasattr(urlgrabber.progress, 'text_meter_total_size'):
              urlgrabber.progress.text_meter_total_size(0)
          if callback_total is not None and not errors:
-@@ -2052,7 +2292,22 @@ class YumBase(depsolve.Depsolve):
+@@ -2052,7 +2293,22 @@ class YumBase(depsolve.Depsolve):
          return errors
  
      def verifyHeader(self, fo, po, raiseError):
@@ -151722,7 +151811,7 @@ index 99039e0..5be32e9 100644
          if type(fo) is types.InstanceType:
              fo = fo.filename
              
-@@ -2076,9 +2331,12 @@ class YumBase(depsolve.Depsolve):
+@@ -2076,9 +2332,12 @@ class YumBase(depsolve.Depsolve):
          return 1
          
      def downloadHeader(self, po):
@@ -151737,7 +151826,7 @@ index 99039e0..5be32e9 100644
          if hasattr(po, 'pkgtype') and po.pkgtype == 'local':
              return
                  
-@@ -2122,15 +2380,17 @@ class YumBase(depsolve.Depsolve):
+@@ -2122,15 +2381,17 @@ class YumBase(depsolve.Depsolve):
              return
  
      def sigCheckPkg(self, po):
@@ -151763,7 +151852,7 @@ index 99039e0..5be32e9 100644
          if self._override_sigchecks:
              check = False
              hasgpgkey = 0
-@@ -2181,6 +2441,9 @@ class YumBase(depsolve.Depsolve):
+@@ -2181,6 +2442,9 @@ class YumBase(depsolve.Depsolve):
          return result, msg
  
      def cleanUsedHeadersPackages(self):
@@ -151773,7 +151862,7 @@ index 99039e0..5be32e9 100644
          filelist = []
          for txmbr in self.tsInfo:
              if txmbr.po.state not in TS_INSTALL_STATES:
-@@ -2218,27 +2481,42 @@ class YumBase(depsolve.Depsolve):
+@@ -2218,27 +2482,42 @@ class YumBase(depsolve.Depsolve):
                      _('%s removed'), fn)
          
      def cleanHeaders(self):
@@ -151818,7 +151907,7 @@ index 99039e0..5be32e9 100644
          cachedir = self.conf.persistdir + "/rpmdb-indexes/"
          if not os.path.exists(cachedir):
              filelist = []
-@@ -2272,8 +2550,29 @@ class YumBase(depsolve.Depsolve):
+@@ -2272,8 +2551,29 @@ class YumBase(depsolve.Depsolve):
  
      def doPackageLists(self, pkgnarrow='all', patterns=None, showdups=None,
                         ignore_case=False):
@@ -151850,7 +151939,7 @@ index 99039e0..5be32e9 100644
          if showdups is None:
              showdups = self.conf.showdupesfromrepos
          ygh = misc.GenericHolder(iter=pkgnarrow)
-@@ -2323,10 +2622,22 @@ class YumBase(depsolve.Depsolve):
+@@ -2323,10 +2623,22 @@ class YumBase(depsolve.Depsolve):
                      key = (pkg.name, pkg.arch)
                      if pkg.pkgtup in dinst:
                          reinstall_available.append(pkg)
@@ -151876,7 +151965,7 @@ index 99039e0..5be32e9 100644
  
          # produce the updates list of tuples
          elif pkgnarrow == 'updates':
-@@ -2461,14 +2772,13 @@ class YumBase(depsolve.Depsolve):
+@@ -2461,14 +2773,13 @@ class YumBase(depsolve.Depsolve):
  
          
      def findDeps(self, pkgs):
@@ -151896,7 +151985,7 @@ index 99039e0..5be32e9 100644
          results = {}
  
          for pkg in pkgs:
-@@ -2495,10 +2805,22 @@ class YumBase(depsolve.Depsolve):
+@@ -2495,10 +2806,22 @@ class YumBase(depsolve.Depsolve):
      # pre 3.2.10 API used to always showdups, so that's the default atm.
      def searchGenerator(self, fields, criteria, showdups=True, keys=False, 
                                               searchtags=True, searchrpmdb=True):
@@ -151923,7 +152012,7 @@ index 99039e0..5be32e9 100644
          sql_fields = []
          for f in fields:
              sql_fields.append(RPM_TO_SQLITE.get(f, f))
-@@ -2661,6 +2983,14 @@ class YumBase(depsolve.Depsolve):
+@@ -2661,6 +2984,14 @@ class YumBase(depsolve.Depsolve):
                      yield (po, vs)
  
      def searchPackageTags(self, criteria):
@@ -151938,7 +152027,7 @@ index 99039e0..5be32e9 100644
          results = {} # name = [(criteria, taglist)]
          for c in criteria:
              c = c.lower()
-@@ -2677,11 +3007,16 @@ class YumBase(depsolve.Depsolve):
+@@ -2677,11 +3008,16 @@ class YumBase(depsolve.Depsolve):
          return results
          
      def searchPackages(self, fields, criteria, callback=None):
@@ -151960,7 +152049,7 @@ index 99039e0..5be32e9 100644
          warnings.warn(_('searchPackages() will go away in a future version of Yum.\
                        Use searchGenerator() instead. \n'),
                  Errors.YumFutureDeprecationWarning, stacklevel=2)           
-@@ -2700,13 +3035,23 @@ class YumBase(depsolve.Depsolve):
+@@ -2700,13 +3036,23 @@ class YumBase(depsolve.Depsolve):
      
      def searchPackageProvides(self, args, callback=None,
                                callback_has_matchfor=False):
@@ -151988,7 +152077,7 @@ index 99039e0..5be32e9 100644
              else:
                  isglob = True
                  canBeFile = misc.re_filename(arg)
-@@ -2723,7 +3068,7 @@ class YumBase(depsolve.Depsolve):
+@@ -2723,7 +3069,7 @@ class YumBase(depsolve.Depsolve):
                  where = self.returnPackagesByDep(arg)
              else:
                  usedDepString = False
@@ -151997,7 +152086,7 @@ index 99039e0..5be32e9 100644
              self.verbose_logger.log(logginglevels.DEBUG_1,
                 P_('Searching %d package', 'Searching %d packages', len(where)), len(where))
              
-@@ -2817,25 +3162,93 @@ class YumBase(depsolve.Depsolve):
+@@ -2817,25 +3163,93 @@ class YumBase(depsolve.Depsolve):
              
          return matches
  
@@ -152102,7 +152191,7 @@ index 99039e0..5be32e9 100644
                  if uservisible:
                      if grp.user_visible:
                          installed.append(grp)
-@@ -2848,12 +3261,29 @@ class YumBase(depsolve.Depsolve):
+@@ -2848,12 +3262,29 @@ class YumBase(depsolve.Depsolve):
                  else:
                      available.append(grp)
              
@@ -152135,7 +152224,7 @@ index 99039e0..5be32e9 100644
          txmbrs_used = []
          
          thesegroups = self.comps.return_groups(grpid)
-@@ -2861,20 +3291,28 @@ class YumBase(depsolve.Depsolve):
+@@ -2861,20 +3292,28 @@ class YumBase(depsolve.Depsolve):
              raise Errors.GroupsError, _("No Group named %s exists") % to_unicode(grpid)
  
          for thisgroup in thesegroups:
@@ -152166,7 +152255,7 @@ index 99039e0..5be32e9 100644
          thesegroups = self.comps.return_groups(grpid)
          if not thesegroups:
              raise Errors.GroupsError, _("No Group named %s exists") % to_unicode(grpid)
-@@ -2898,13 +3336,18 @@ class YumBase(depsolve.Depsolve):
+@@ -2898,13 +3337,18 @@ class YumBase(depsolve.Depsolve):
                              self.tsInfo.remove(txmbr.po.pkgtup)
          
          
@@ -152192,7 +152281,7 @@ index 99039e0..5be32e9 100644
          """
  
          if not self.comps.has_group(grpid):
-@@ -2934,12 +3377,47 @@ class YumBase(depsolve.Depsolve):
+@@ -2934,12 +3378,47 @@ class YumBase(depsolve.Depsolve):
              if 'optional' in package_types:
                  pkgs.extend(thisgroup.optional_packages)
  
@@ -152241,7 +152330,7 @@ index 99039e0..5be32e9 100644
                  except Errors.InstallError, e:
                      self.verbose_logger.debug(_('No package named %s available to be installed'),
                          pkg)
-@@ -2953,6 +3431,7 @@ class YumBase(depsolve.Depsolve):
+@@ -2953,6 +3432,7 @@ class YumBase(depsolve.Depsolve):
                  group_conditionals = enable_group_conditionals
  
              count_cond_test = 0
@@ -152249,7 +152338,7 @@ index 99039e0..5be32e9 100644
              if group_conditionals:
                  for condreq, cond in thisgroup.conditional_packages.iteritems():
                      if self.isPackageInstalled(cond):
-@@ -2997,10 +3476,14 @@ class YumBase(depsolve.Depsolve):
+@@ -2997,10 +3477,14 @@ class YumBase(depsolve.Depsolve):
          return txmbrs_used
  
      def deselectGroup(self, grpid, force=False):
@@ -152268,7 +152357,7 @@ index 99039e0..5be32e9 100644
          
          if not self.comps.has_group(grpid):
              raise Errors.GroupsError, _("No Group named %s exists") % to_unicode(grpid)
-@@ -3035,12 +3518,21 @@ class YumBase(depsolve.Depsolve):
+@@ -3035,12 +3519,21 @@ class YumBase(depsolve.Depsolve):
                              self.tsInfo.remove(pkg.pkgtup)
          
      def getPackageObject(self, pkgtup, allow_missing=False):
@@ -152296,7 +152385,7 @@ index 99039e0..5be32e9 100644
          # look it up in the self.localPackages first:
          for po in self.localPackages:
              if po.pkgtup == pkgtup:
-@@ -3049,7 +3541,7 @@ class YumBase(depsolve.Depsolve):
+@@ -3049,7 +3542,7 @@ class YumBase(depsolve.Depsolve):
          pkgs = self.pkgSack.searchPkgTuple(pkgtup)
  
          if len(pkgs) == 0:
@@ -152305,7 +152394,7 @@ index 99039e0..5be32e9 100644
              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)
-@@ -3065,13 +3557,21 @@ class YumBase(depsolve.Depsolve):
+@@ -3065,13 +3558,21 @@ class YumBase(depsolve.Depsolve):
          return result
  
      def getInstalledPackageObject(self, pkgtup):
@@ -152332,7 +152421,7 @@ index 99039e0..5be32e9 100644
              raise Errors.RpmDBError, _('Package tuple %s could not be found in rpmdb') % str(pkgtup)
  
          # Dito. FIXME from getPackageObject() for len() > 1 ... :)
-@@ -3079,9 +3579,11 @@ class YumBase(depsolve.Depsolve):
+@@ -3079,9 +3580,11 @@ class YumBase(depsolve.Depsolve):
          return po
          
      def gpgKeyCheck(self):
@@ -152346,7 +152435,7 @@ index 99039e0..5be32e9 100644
          gpgkeyschecked = self.conf.cachedir + '/.gpgkeyschecked.yum'
          if os.path.exists(gpgkeyschecked):
              return 1
-@@ -3106,9 +3608,13 @@ class YumBase(depsolve.Depsolve):
+@@ -3106,9 +3609,13 @@ class YumBase(depsolve.Depsolve):
              return 1
  
      def returnPackagesByDep(self, depstring):
@@ -152362,7 +152451,7 @@ index 99039e0..5be32e9 100644
          if not depstring:
              return []
  
-@@ -3135,9 +3641,16 @@ class YumBase(depsolve.Depsolve):
+@@ -3135,9 +3642,16 @@ class YumBase(depsolve.Depsolve):
          return self.pkgSack.getProvides(depname, depflags, depver).keys()
  
      def returnPackageByDep(self, depstring):
@@ -152382,7 +152471,7 @@ index 99039e0..5be32e9 100644
          # we get all sorts of randomness here
          errstring = depstring
          if type(depstring) not in types.StringTypes:
-@@ -3149,16 +3662,22 @@ class YumBase(depsolve.Depsolve):
+@@ -3149,16 +3663,22 @@ class YumBase(depsolve.Depsolve):
              raise Errors.YumBaseError, _('No Package found for %s') % errstring
          
          ps = ListPackageSack(pkglist)
@@ -152409,7 +152498,7 @@ index 99039e0..5be32e9 100644
          if not depstring:
              return []
  
-@@ -3184,12 +3703,47 @@ class YumBase(depsolve.Depsolve):
+@@ -3184,12 +3704,47 @@ class YumBase(depsolve.Depsolve):
  
          return self.rpmdb.getProvides(depname, depflags, depver).keys()
  
@@ -152459,7 +152548,7 @@ index 99039e0..5be32e9 100644
          
          
          if len(pkglist) == 0:
-@@ -3198,14 +3752,23 @@ class YumBase(depsolve.Depsolve):
+@@ -3198,14 +3753,23 @@ class YumBase(depsolve.Depsolve):
          if len(pkglist) == 1:
              return pkglist[0]
  
@@ -152489,7 +152578,7 @@ index 99039e0..5be32e9 100644
          returnlist = []
          compatArchList = self.arch.get_arch_list(arch)
          multiLib = []
-@@ -3222,9 +3785,9 @@ class YumBase(depsolve.Depsolve):
+@@ -3222,9 +3786,9 @@ class YumBase(depsolve.Depsolve):
                  singleLib.append(po)
                  
          # we now have three lists.  find the best package(s) of each
@@ -152502,7 +152591,7 @@ index 99039e0..5be32e9 100644
  
          if single_name and multi and single and multi.name != single.name:
              # Sinlge _must_ match multi, if we want a single package name
-@@ -3238,7 +3801,7 @@ class YumBase(depsolve.Depsolve):
+@@ -3238,7 +3802,7 @@ class YumBase(depsolve.Depsolve):
          # if there's a noarch and it's newer than the multilib, we want
          # just the noarch.  otherwise, we want multi + single
          elif multi:
@@ -152511,7 +152600,7 @@ index 99039e0..5be32e9 100644
              if best.arch == "noarch":
                  returnlist.append(no)
              else:
-@@ -3246,7 +3809,7 @@ class YumBase(depsolve.Depsolve):
+@@ -3246,7 +3810,7 @@ class YumBase(depsolve.Depsolve):
                  if single: returnlist.append(single)
          # similar for the non-multilib case
          elif single:
@@ -152520,7 +152609,7 @@ index 99039e0..5be32e9 100644
              if best.arch == "noarch":
                  returnlist.append(no)
              else:
-@@ -3350,23 +3913,27 @@ class YumBase(depsolve.Depsolve):
+@@ -3350,23 +3914,27 @@ class YumBase(depsolve.Depsolve):
              done = True
  
              slow = next_func(slow)
@@ -152553,7 +152642,7 @@ index 99039e0..5be32e9 100644
      def _at_groupremove(self, pattern):
          " Do groupremove via. leading @ on the cmd line, for remove."
          assert pattern[0] == '@'
-@@ -3398,7 +3965,7 @@ class YumBase(depsolve.Depsolve):
+@@ -3398,7 +3966,7 @@ class YumBase(depsolve.Depsolve):
      def _minus_deselect(self, pattern):
          """ Remove things from the transaction, like kickstart. """
          assert pattern[0] == '-'
@@ -152562,7 +152651,7 @@ index 99039e0..5be32e9 100644
  
          if pat and pat[0] == '@':
              pat = pat[1:]
-@@ -3437,14 +4004,61 @@ class YumBase(depsolve.Depsolve):
+@@ -3437,14 +4005,61 @@ class YumBase(depsolve.Depsolve):
              if flag not in self.tsInfo.probFilterFlags:
                  self.tsInfo.probFilterFlags.append(flag)
  
@@ -152630,7 +152719,7 @@ index 99039e0..5be32e9 100644
          pkgs = []
          was_pattern = False
          if po:
-@@ -3477,20 +4091,12 @@ class YumBase(depsolve.Depsolve):
+@@ -3477,20 +4092,12 @@ class YumBase(depsolve.Depsolve):
                      self.verbose_logger.debug(_('Checking for virtual provide or file-provide for %s'), 
                          arg)
  
@@ -152657,7 +152746,7 @@ index 99039e0..5be32e9 100644
              else:
                  nevra_dict = self._nevra_kwarg_parse(kwargs)
  
-@@ -3577,8 +4183,8 @@ class YumBase(depsolve.Depsolve):
+@@ -3577,8 +4184,8 @@ class YumBase(depsolve.Depsolve):
                      continue
              
              # make sure this shouldn't be passed to update:
@@ -152668,7 +152757,7 @@ index 99039e0..5be32e9 100644
                  txmbrs = self.update(po=po)
                  tx_return.extend(txmbrs)
                  continue
-@@ -3587,7 +4193,7 @@ class YumBase(depsolve.Depsolve):
+@@ -3587,7 +4194,7 @@ class YumBase(depsolve.Depsolve):
              # something else in the repo. Unless there is a obsoletion loop,
              # at which point ignore everything.
              obsoleting_pkg = None
@@ -152677,7 +152766,7 @@ index 99039e0..5be32e9 100644
                  obsoleting_pkg = self._test_loop(po, self._pkg2obspkg)
              if obsoleting_pkg is not None:
                  # this is not a definitive check but it'll make sure we don't
-@@ -3600,23 +4206,23 @@ class YumBase(depsolve.Depsolve):
+@@ -3600,23 +4207,23 @@ class YumBase(depsolve.Depsolve):
                      already_obs = pkgs[0]
  
                  if already_obs:
@@ -152708,7 +152797,7 @@ index 99039e0..5be32e9 100644
                      continue
  
              # make sure we don't have a name.arch of this already installed
-@@ -3630,7 +4236,7 @@ class YumBase(depsolve.Depsolve):
+@@ -3630,7 +4237,7 @@ class YumBase(depsolve.Depsolve):
                          found = True
                          break
                  if not found:
@@ -152717,7 +152806,7 @@ index 99039e0..5be32e9 100644
                      txmbrs = self.update(po=po)
                      tx_return.extend(txmbrs)
                      continue
-@@ -3719,14 +4325,33 @@ class YumBase(depsolve.Depsolve):
+@@ -3719,14 +4326,33 @@ class YumBase(depsolve.Depsolve):
          return txmbr
  
      def update(self, po=None, requiringPo=None, update_to=False, **kwargs):
@@ -152758,7 +152847,7 @@ index 99039e0..5be32e9 100644
          # check for args - if no po nor kwargs, do them all
          # if po, do it, ignore all else
          # if no po do kwargs
-@@ -3765,7 +4390,12 @@ class YumBase(depsolve.Depsolve):
+@@ -3765,7 +4391,12 @@ class YumBase(depsolve.Depsolve):
                      if new is None:
                          continue
                      tx_return.extend(self.update(po=new))
@@ -152772,7 +152861,7 @@ index 99039e0..5be32e9 100644
              return tx_return
  
          # complications
-@@ -3787,7 +4417,7 @@ class YumBase(depsolve.Depsolve):
+@@ -3787,7 +4418,7 @@ class YumBase(depsolve.Depsolve):
                  return self._minus_deselect(kwargs['pattern'])
  
              if kwargs['pattern'] and kwargs['pattern'][0] == '@':
@@ -152781,7 +152870,7 @@ index 99039e0..5be32e9 100644
  
              arg = kwargs['pattern']
              if not update_to:
-@@ -3920,6 +4550,18 @@ class YumBase(depsolve.Depsolve):
+@@ -3920,6 +4551,18 @@ class YumBase(depsolve.Depsolve):
                      tx_return.append(txmbr)
                          
          for available_pkg in availpkgs:
@@ -152800,7 +152889,7 @@ index 99039e0..5be32e9 100644
              #  Make sure we're not installing a package which is obsoleted by
              # something else in the repo. Unless there is a obsoletion loop,
              # at which point ignore everything.
-@@ -3985,11 +4627,18 @@ class YumBase(depsolve.Depsolve):
+@@ -3985,11 +4628,18 @@ class YumBase(depsolve.Depsolve):
          return tx_return
          
      def remove(self, po=None, **kwargs):
@@ -152824,7 +152913,7 @@ index 99039e0..5be32e9 100644
          if not po and not kwargs:
              raise Errors.RemoveError, 'Nothing specified to remove'
          
-@@ -4055,17 +4704,19 @@ class YumBase(depsolve.Depsolve):
+@@ -4055,17 +4705,19 @@ class YumBase(depsolve.Depsolve):
          return tx_return
  
      def installLocal(self, pkg, po=None, updateonly=False):
@@ -152854,7 +152943,7 @@ index 99039e0..5be32e9 100644
          # read in the package into a YumLocalPackage Object
          # append it to self.localPackages
          # check if it can be installed or updated based on nevra versus rpmdb
-@@ -4183,16 +4834,15 @@ class YumBase(depsolve.Depsolve):
+@@ -4183,16 +4835,15 @@ class YumBase(depsolve.Depsolve):
          return tx_return
  
      def reinstallLocal(self, pkg, po=None):
@@ -152879,7 +152968,7 @@ index 99039e0..5be32e9 100644
          if not po:
              try:
                  po = YumUrlPackage(self, ts=self.rpmdb.readOnlyTS(), url=pkg,
-@@ -4215,9 +4865,19 @@ class YumBase(depsolve.Depsolve):
+@@ -4215,9 +4866,19 @@ class YumBase(depsolve.Depsolve):
          return self.reinstall(po=po)
  
      def reinstall(self, po=None, **kwargs):
@@ -152902,7 +152991,7 @@ index 99039e0..5be32e9 100644
          self._add_prob_flags(rpm.RPMPROB_FILTER_REPLACEPKG,
                               rpm.RPMPROB_FILTER_REPLACENEWFILES,
                               rpm.RPMPROB_FILTER_REPLACEOLDFILES)
-@@ -4259,16 +4919,15 @@ class YumBase(depsolve.Depsolve):
+@@ -4259,16 +4920,15 @@ class YumBase(depsolve.Depsolve):
          return tx_mbrs
          
      def downgradeLocal(self, pkg, po=None):
@@ -152927,7 +153016,7 @@ index 99039e0..5be32e9 100644
          if not po:
              try:
                  po = YumUrlPackage(self, ts=self.rpmdb.readOnlyTS(), url=pkg,
-@@ -4309,13 +4968,19 @@ class YumBase(depsolve.Depsolve):
+@@ -4309,13 +4969,19 @@ class YumBase(depsolve.Depsolve):
          return False
          
      def downgrade(self, po=None, **kwargs):
@@ -152954,7 +153043,7 @@ index 99039e0..5be32e9 100644
          if not po and not kwargs:
              raise Errors.DowngradeError, 'Nothing specified to downgrade'
  
-@@ -4421,6 +5086,9 @@ class YumBase(depsolve.Depsolve):
+@@ -4421,6 +5087,9 @@ class YumBase(depsolve.Depsolve):
                  warned_nas.add(na)
                  continue
  
@@ -152964,7 +153053,7 @@ index 99039e0..5be32e9 100644
              if pkg.verGE(lipkg):
                  if na not in warned_nas:
                      msg = _('Only Upgrade available on package: %s') % pkg
-@@ -4457,7 +5125,7 @@ class YumBase(depsolve.Depsolve):
+@@ -4457,7 +5126,7 @@ class YumBase(depsolve.Depsolve):
          if e and v and r:
              evr = '%s:%s-%s' % (e, v, r)
          elif v and r:
@@ -152973,7 +153062,7 @@ index 99039e0..5be32e9 100644
          elif e and v:
              evr = '%s:%s' % (e, v)
          elif v: # e and r etc. is just too weird to print
-@@ -4500,12 +5168,24 @@ class YumBase(depsolve.Depsolve):
+@@ -4500,12 +5169,24 @@ class YumBase(depsolve.Depsolve):
  
          return returndict
  
@@ -153001,7 +153090,7 @@ index 99039e0..5be32e9 100644
          old_conf_obs = self.conf.obsoletes
          self.conf.obsoletes = False
          done = False
-@@ -4515,19 +5195,46 @@ class YumBase(depsolve.Depsolve):
+@@ -4515,19 +5196,46 @@ class YumBase(depsolve.Depsolve):
                      done = True
          for pkg in transaction.trans_data:
              if pkg.state == 'Downgrade':
@@ -153048,7 +153137,7 @@ index 99039e0..5be32e9 100644
                  if self.install(pkgtup=pkg.pkgtup):
                      done = True
          for pkg in transaction.trans_data:
-@@ -4538,8 +5245,14 @@ class YumBase(depsolve.Depsolve):
+@@ -4538,8 +5246,14 @@ class YumBase(depsolve.Depsolve):
          return done
  
      def history_undo(self, transaction):
@@ -153065,7 +153154,7 @@ index 99039e0..5be32e9 100644
          # NOTE: This is somewhat basic atm. ... for instance we don't check
          #       that we are going from the old new version. However it's still
          #       better than the RHN rollback code, and people pay for that :).
-@@ -4616,7 +5329,7 @@ class YumBase(depsolve.Depsolve):
+@@ -4616,7 +5330,7 @@ class YumBase(depsolve.Depsolve):
  
          except urlgrabber.grabber.URLGrabError, e:
              raise Errors.YumBaseError(_('GPG key retrieval failed: ') +
@@ -153074,7 +153163,7 @@ index 99039e0..5be32e9 100644
                                        
          # check for a .asc file accompanying it - that's our gpg sig on the key
          # suck it down and do the check
-@@ -4649,7 +5362,7 @@ class YumBase(depsolve.Depsolve):
+@@ -4649,7 +5363,7 @@ class YumBase(depsolve.Depsolve):
              keys_info = misc.getgpgkeyinfo(rawkey, multiple=True)
          except ValueError, e:
              raise Errors.YumBaseError(_('Invalid GPG Key from %s: %s') % 
@@ -153083,7 +153172,7 @@ index 99039e0..5be32e9 100644
          keys = []
          for keyinfo in keys_info:
              thiskey = {}
-@@ -4674,39 +5387,49 @@ class YumBase(depsolve.Depsolve):
+@@ -4674,39 +5388,49 @@ class YumBase(depsolve.Depsolve):
              if pkgs:
                  pkgs = sorted(pkgs)[-1]
                  msg = (_('Importing %s key 0x%s:\n'
@@ -153151,7 +153240,7 @@ index 99039e0..5be32e9 100644
          user_cb_fail = False
          for keyurl in keyurls:
              keys = self._retrievePublicKey(keyurl, repo)
-@@ -4725,7 +5448,9 @@ class YumBase(depsolve.Depsolve):
+@@ -4725,7 +5449,9 @@ class YumBase(depsolve.Depsolve):
                      # Try installing/updating GPG key
                      self._getKeyImportMessage(info, keyurl)
                      rc = False
@@ -153162,7 +153251,7 @@ index 99039e0..5be32e9 100644
                          rc = True
                          
                      # grab the .sig/.asc for the keyurl, if it exists
-@@ -4751,8 +5476,8 @@ class YumBase(depsolve.Depsolve):
+@@ -4751,8 +5477,8 @@ class YumBase(depsolve.Depsolve):
                  ts = self.rpmdb.readOnlyTS()
                  result = ts.pgpImportPubkey(misc.procgpgkey(info['raw_key']))
                  if result != 0:
@@ -153173,7 +153262,7 @@ index 99039e0..5be32e9 100644
                  self.logger.info(_('Key imported successfully'))
                  key_installed = True
  
-@@ -4760,18 +5485,20 @@ class YumBase(depsolve.Depsolve):
+@@ -4760,18 +5486,20 @@ class YumBase(depsolve.Depsolve):
              raise Errors.YumBaseError, _("Didn't install any keys")
  
          if not key_installed:
@@ -153199,7 +153288,7 @@ index 99039e0..5be32e9 100644
      
      def _getAnyKeyForRepo(self, repo, destdir, keyurl_list, is_cakey=False, callback=None):
          """
-@@ -4788,6 +5515,18 @@ class YumBase(depsolve.Depsolve):
+@@ -4788,6 +5516,18 @@ class YumBase(depsolve.Depsolve):
          """
  
          key_installed = False
@@ -153218,7 +153307,7 @@ index 99039e0..5be32e9 100644
          user_cb_fail = False
          for keyurl in keyurl_list:
              keys = self._retrievePublicKey(keyurl, repo, getSig=not is_cakey)
-@@ -4819,8 +5558,11 @@ class YumBase(depsolve.Depsolve):
+@@ -4819,8 +5559,11 @@ class YumBase(depsolve.Depsolve):
                  if not key_installed:
                      self._getKeyImportMessage(info, keyurl, keytype)
                      rc = False
@@ -153231,7 +153320,7 @@ index 99039e0..5be32e9 100644
                      elif callback:
                          rc = callback({"repo": repo, "userid": info['userid'],
                                          "hexkeyid": info['hexkeyid'], "keyurl": keyurl,
-@@ -4835,7 +5577,8 @@ class YumBase(depsolve.Depsolve):
+@@ -4835,7 +5578,8 @@ class YumBase(depsolve.Depsolve):
                  # Import the key
                  result = misc.import_key_to_pubring(info['raw_key'], info['hexkeyid'], gpgdir=destdir)
                  if not result:
@@ -153241,7 +153330,7 @@ index 99039e0..5be32e9 100644
                  self.logger.info(_('Key imported successfully'))
                  key_installed = True
                  # write out the key id to imported_cakeys in the repos basedir
-@@ -4851,36 +5594,35 @@ class YumBase(depsolve.Depsolve):
+@@ -4851,36 +5595,35 @@ class YumBase(depsolve.Depsolve):
                              pass
  
          if not key_installed and user_cb_fail:
@@ -153294,7 +153383,7 @@ index 99039e0..5be32e9 100644
          self._getAnyKeyForRepo(repo, repo.gpgcadir, repo.gpgcakey, is_cakey=True, callback=callback)
  
      def _limit_installonly_pkgs(self):
-@@ -4927,6 +5669,7 @@ class YumBase(depsolve.Depsolve):
+@@ -4927,6 +5670,7 @@ class YumBase(depsolve.Depsolve):
          ts = self.rpmdb.readOnlyTS()
          (cur_kernel_v, cur_kernel_r) = misc.get_running_kernel_version_release(ts)
          install_only_names = set(self.conf.installonlypkgs)
@@ -153302,7 +153391,7 @@ index 99039e0..5be32e9 100644
          for m in self.tsInfo.getMembers():
              if m.ts_state not in ('i', 'u'):
                  continue
-@@ -4937,12 +5680,21 @@ class YumBase(depsolve.Depsolve):
+@@ -4937,12 +5681,21 @@ class YumBase(depsolve.Depsolve):
              if not po_names.intersection(install_only_names):
                  continue
  
@@ -153328,7 +153417,7 @@ index 99039e0..5be32e9 100644
              for po in installed:
                  if (po.version, po.release) == (cur_kernel_v, cur_kernel_r): 
                      # don't remove running
-@@ -4959,19 +5711,22 @@ class YumBase(depsolve.Depsolve):
+@@ -4959,19 +5712,22 @@ class YumBase(depsolve.Depsolve):
              txmbr.depends_on.append(rel)
  
      def processTransaction(self, callback=None,rpmTestDisplay=None, rpmDisplay=None):
@@ -153364,7 +153453,7 @@ index 99039e0..5be32e9 100644
          
          if not callback:
              callback = callbacks.ProcessTransNoOutputCallback()
-@@ -5114,13 +5869,19 @@ class YumBase(depsolve.Depsolve):
+@@ -5114,13 +5870,19 @@ class YumBase(depsolve.Depsolve):
          return results
  
      def add_enable_repo(self, repoid, baseurls=[], mirrorlist=None, **kwargs):
@@ -153391,7 +153480,7 @@ index 99039e0..5be32e9 100644
          # out of place fixme - maybe we should make this the default repo addition
          # routine and use it from getReposFromConfigFile(), etc.
          newrepo = yumRepo.YumRepository(repoid)
-@@ -5167,9 +5928,15 @@ class YumBase(depsolve.Depsolve):
+@@ -5167,9 +5929,15 @@ class YumBase(depsolve.Depsolve):
  
      def setCacheDir(self, force=False, tmpdir=None, reuse=True,
                      suffix='/$basearch/$releasever'):
@@ -153410,7 +153499,7 @@ index 99039e0..5be32e9 100644
          if not force and os.geteuid() == 0:
              return True # We are root, not forced, so happy with the global dir.
          if tmpdir is None:
-@@ -5179,7 +5946,7 @@ class YumBase(depsolve.Depsolve):
+@@ -5179,7 +5947,7 @@ class YumBase(depsolve.Depsolve):
          try:
              cachedir = misc.getCacheDir(tmpdir, reuse)
          except (IOError, OSError), e:
@@ -153419,7 +153508,15 @@ index 99039e0..5be32e9 100644
              cachedir = None
              
          if cachedir is None:
-@@ -5220,13 +5987,24 @@ class YumBase(depsolve.Depsolve):
+@@ -5190,6 +5958,7 @@ class YumBase(depsolve.Depsolve):
+             self.prerepoconf.cachedir = cachedir
+         else:
+             self.repos.setCacheDir(cachedir)
++        self._old_cachedir = self.conf.cachedir
+         self.conf.cachedir = cachedir
+         return True # We got a new cache dir
+ 
+@@ -5220,13 +5989,24 @@ class YumBase(depsolve.Depsolve):
          self.history.write_addon_data('config-repos', myrepos)
          
      def verify_plugins_cb(self, verify_package):
@@ -153447,7 +153544,7 @@ index 99039e0..5be32e9 100644
          if self.tsInfo._unresolvedMembers:
              if auto:
                  self.logger.critical(_("Dependencies not solved. Will not save unresolved transaction."))
-@@ -5234,7 +6012,7 @@ class YumBase(depsolve.Depsolve):
+@@ -5234,7 +6014,7 @@ class YumBase(depsolve.Depsolve):
              raise Errors.YumBaseError(_("Dependencies not solved. Will not save unresolved transaction."))
          
          if not filename:
@@ -153456,7 +153553,7 @@ index 99039e0..5be32e9 100644
              fd,filename = tempfile.mkstemp(suffix='.yumtx', prefix=prefix)
              f = os.fdopen(fd, 'w')
          else:
-@@ -5244,13 +6022,17 @@ class YumBase(depsolve.Depsolve):
+@@ -5244,13 +6024,17 @@ class YumBase(depsolve.Depsolve):
          
          msg = "%s\n" % self.rpmdb.simpleVersion(main_only=True)[0]
          msg += "%s\n" % self.ts.getTsFlags()
@@ -153477,7 +153574,7 @@ index 99039e0..5be32e9 100644
          msg += "%s\n" % len(self.tsInfo.getMembers())
          for txmbr in self.tsInfo.getMembers():
              msg += txmbr._dump()
-@@ -5260,13 +6042,25 @@ class YumBase(depsolve.Depsolve):
+@@ -5260,13 +6044,25 @@ class YumBase(depsolve.Depsolve):
          except (IOError, OSError), e:
              self._ts_save_file = None
              if auto:
@@ -153509,7 +153606,7 @@ index 99039e0..5be32e9 100644
          # check rpmversion - if not match throw a fit
          # check repoversions  (and repos)- if not match throw a fit
          # load each txmbr - if pkgs being updated don't exist, bail w/error
-@@ -5276,26 +6070,45 @@ class YumBase(depsolve.Depsolve):
+@@ -5276,26 +6072,45 @@ class YumBase(depsolve.Depsolve):
          try:
              data = open(filename, 'r').readlines()
          except (IOError, OSError), e:
@@ -153557,7 +153654,7 @@ index 99039e0..5be32e9 100644
              if ignorerpm:
                  msg += _(" ignoring, as requested.")
                  self.logger.critical(_(msg))
-@@ -5318,8 +6131,17 @@ class YumBase(depsolve.Depsolve):
+@@ -5318,8 +6133,17 @@ class YumBase(depsolve.Depsolve):
          numrepos = int(data[2].strip())
          repos = []
          rindex=3+numrepos
@@ -153576,7 +153673,7 @@ index 99039e0..5be32e9 100644
  
          # pkgs/txmbrs
          numpkgs = int(data[rindex].strip())
-@@ -5329,6 +6151,7 @@ class YumBase(depsolve.Depsolve):
+@@ -5329,6 +6153,7 @@ class YumBase(depsolve.Depsolve):
          pkgcount = 0
          pkgprob = False
          curpkg = None
@@ -153584,7 +153681,7 @@ index 99039e0..5be32e9 100644
          for l in data[pkgstart:]:
              l = l.rstrip()
              # our main txmbrs
-@@ -5438,6 +6261,11 @@ class YumBase(depsolve.Depsolve):
+@@ -5438,6 +6263,11 @@ class YumBase(depsolve.Depsolve):
                  msg += _(" aborting.")
                  raise Errors.YumBaseError(msg)
              
@@ -153596,6 +153693,55 @@ index 99039e0..5be32e9 100644
          return self.tsInfo.getMembers()
  
      def _remove_old_deps(self):
+@@ -5470,18 +6300,6 @@ class YumBase(depsolve.Depsolve):
+                     if requiring == required: # if they are self-requiring skip them
+                         continue
+                         
+-                # go through the stuff in the ts to be installed - make sure none of that needs the required pkg, either.
+-                for (provn,provf,provevr) in required.provides:
+-                    if self.tsInfo.getNewRequires(provn, provf, provevr).keys():
+-                        still_needed = True
+-                        okay_to_remove[required] = False
+-                        break
+-                for fn in required.filelist + required.dirlist:
+-                    if self.tsInfo.getNewRequires(fn, None,(None,None,None)).keys():
+-                        okay_to_remove[required] = False
+-                        still_needed = True
+-                        break
+-                            
+                     #for tbi_pkg in self.tsInfo.getMembersWithState(output_states=TS_INSTALL_STATES):
+                     #   for reqtuple in tbi_pkg.po.requires:
+                     #        if required.provides_for(reqtuple):
+@@ -5533,7 +6351,24 @@ class YumBase(depsolve.Depsolve):
+                     # Debugging output
+                     self.verbose_logger.log(logginglevels.DEBUG_2, _("%s has revdep %s which was user-installed."), pkg, curpkg)
+                     ok_to_remove[pkg] = False
++                    ok_to_remove[curpkg] = False
+                     return True
++
++                #  Go through the stuff in the ts to be installed - make sure
++                # none of that needs the required pkg, either.
++                for (provn,provf,provevr) in curpkg.provides:
++                    if self.tsInfo.getNewRequires(provn, provf, provevr).keys():
++                        ok_to_remove[pkg] = False
++                        ok_to_remove[curpkg] = False
++                        self.verbose_logger.log(logginglevels.DEBUG_2, _("%s is needed by a package to be installed."), curpkg)
++                        return True
++                for fn in curpkg.filelist + curpkg.dirlist:
++                    if self.tsInfo.getNewRequires(fn, None,(None,None,None)).keys():
++                        ok_to_remove[pkg] = False
++                        ok_to_remove[curpkg] = False
++                        self.verbose_logger.log(logginglevels.DEBUG_2, _("%s is needed by a package to be installed."), curpkg)
++                        return True
++
+                 visited[curpkg] = True
+             all_leaves_visited = True
+             leaves = curpkg.requiring_packages()
+@@ -5547,4 +6382,3 @@ class YumBase(depsolve.Depsolve):
+         # Debugging output
+         self.verbose_logger.log(logginglevels.DEBUG_2, _("%s has no user-installed revdeps."), pkg)
+         return False
+-
 diff --git a/yum/callbacks.py b/yum/callbacks.py
 index 7ad25ce..a9a8e53 100644
 --- a/yum/callbacks.py
@@ -156019,7 +156165,7 @@ index aaa4f25..51895fd 100755
                  continue
  
 diff --git a/yum/misc.py b/yum/misc.py
-index 2f6ddfe..55c433a 100644
+index 2f6ddfe..59aff5d 100644
 --- a/yum/misc.py
 +++ b/yum/misc.py
 @@ -8,6 +8,7 @@ import os
@@ -156099,17 +156245,38 @@ index 2f6ddfe..55c433a 100644
  
  
  def get_my_lang_code():
-@@ -1112,10 +1136,12 @@ def decompress(filename, dest=None, fn_only=False, check_timestamps=False):
-         if check_timestamps:
-             fi = stat_f(filename)
-             fo = stat_f(out)
+@@ -1105,17 +1129,26 @@ def decompress(filename, dest=None, fn_only=False, check_timestamps=False):
+             out = filename.replace('.xz', '')
+         
+     else:
+-        out = filename # returning the same file since it is not compressed
+-        ztype = None
++        return filename # returning the same file since it is not compressed
+     
+-    if ztype and not fn_only:
+-        if check_timestamps:
+-            fi = stat_f(filename)
+-            fo = stat_f(out)
 -            if fi and fo and fo.st_mtime > fi.st_mtime:
-+            if fi and fo and fo.st_mtime == fi.st_mtime:
++    if check_timestamps:
++        fi = stat_f(filename)
++        fo = stat_f(out)
++        if fi and fo:
++            if fo.st_mtime == fi.st_mtime:
                  return out
++            if fn_only:
++                # out exists but not valid
++                return None
  
-         _decompress_chunked(filename, out, ztype)
-+        if check_timestamps and fi:
-+            os.utime(out, (fi.st_mtime, fi.st_mtime))
+-        _decompress_chunked(filename, out, ztype)
++    if not fn_only:
++        try:
++            _decompress_chunked(filename, out, ztype)
++            if check_timestamps and fi:
++                os.utime(out, (fi.st_mtime, fi.st_mtime))
++        except:
++            unlink_f(out)
++            raise
          
      return out
      
@@ -156995,7 +157162,7 @@ index bfc49b7..9ddcae6 100644
      b = parsever(b)
  
 diff --git a/yum/repos.py b/yum/repos.py
-index 3793bad..bd8f1a4 100644
+index 3793bad..4b1d52e 100644
 --- a/yum/repos.py
 +++ b/yum/repos.py
 @@ -22,6 +22,7 @@ import misc
@@ -157053,7 +157220,19 @@ index 3793bad..bd8f1a4 100644
          self.ayum.plugins.run('postreposetup')
          
      def __str__(self):
-@@ -288,6 +322,14 @@ class RepoStorage:
+@@ -223,8 +257,9 @@ class RepoStorage:
+         
+         self._cachedir = cachedir
+         for repo in self.repos.values():
+-            repo.old_base_cache_dir = repo.basecachedir
+-            repo.basecachedir = cachedir
++            if cachedir != repo.basecachedir:
++                repo.old_base_cache_dir = repo.basecachedir
++                repo.basecachedir = cachedir
+ 
+ 
+     def setProgressBar(self, obj):
+@@ -288,6 +323,14 @@ class RepoStorage:
          else:
              data = [ mdtype ]
           
@@ -157859,9 +158038,18 @@ index e5e9ece..57a1a29 100644
  
  
 diff --git a/yumcommands.py b/yumcommands.py
-index 4dcbea7..f31d495 100644
+index 4dcbea7..bc30bd4 100644
 --- a/yumcommands.py
 +++ b/yumcommands.py
+@@ -29,7 +29,7 @@ import operator
+ import locale
+ import fnmatch
+ import time
+-from yum.i18n import utf8_width, utf8_width_fill, to_unicode
++from yum.i18n import utf8_width, utf8_width_fill, to_unicode, exception2msg
+ 
+ import yum.config
+ 
 @@ -43,16 +43,24 @@ def _err_mini_usage(base, basecmd):
      base.logger.critical(txt)
  
@@ -157994,7 +158182,7 @@ index 4dcbea7..f31d495 100644
      """
      if base.repos.listEnabled():
          return
-@@ -152,85 +199,207 @@ def checkEnabledRepo(base, possible_local_files=[]):
+@@ -152,113 +199,273 @@ def checkEnabledRepo(base, possible_local_files=[]):
      raise cli.CliError
  
  class YumCommand:
@@ -158154,9 +158342,10 @@ index 4dcbea7..f31d495 100644
 -            return base.installPkgs(extcmds)
 +            return base.installPkgs(extcmds, basecmd=basecmd)
          except yum.Errors.YumBaseError, e:
-             return 1, [str(e)]
- 
+-            return 1, [str(e)]
++            return 1, [exception2msg(e)]
 +
+ 
  class UpdateCommand(YumCommand):
 +    """A class containing methods needed by the cli to execute the
 +    update command.
@@ -158215,8 +158404,9 @@ index 4dcbea7..f31d495 100644
          self.doneCommand(base, _("Setting up Update Process"))
          try:
              return base.updatePkgs(extcmds, update_to=(basecmd == 'update-to'))
-@@ -238,21 +407,59 @@ class UpdateCommand(YumCommand):
-             return 1, [str(e)]
+         except yum.Errors.YumBaseError, e:
+-            return 1, [str(e)]
++            return 1, [exception2msg(e)]
  
  class DistroSyncCommand(YumCommand):
 +    """A class containing methods needed by the cli to execute the
@@ -158275,7 +158465,14 @@ index 4dcbea7..f31d495 100644
          self.doneCommand(base, _("Setting up Distribution Synchronization Process"))
          try:
              base.conf.obsoletes = 1
-@@ -289,18 +496,53 @@ def _list_cmd_calc_columns(base, ypl):
+             return base.distroSyncPkgs(extcmds)
+         except yum.Errors.YumBaseError, e:
+-            return 1, [str(e)]
++            return 1, [exception2msg(e)]
+ 
+ def _add_pkg_simple_list_lens(data, pkg, indent=''):
+     """ Get the length of each pkg's column. Add that to data.
+@@ -289,21 +496,56 @@ def _list_cmd_calc_columns(base, ypl):
      return (-columns[0], -columns[1], -columns[2])
  
  class InfoCommand(YumCommand):
@@ -158328,7 +158525,11 @@ index 4dcbea7..f31d495 100644
 +                highlight = False
              ypl = base.returnPkgLists(extcmds, installed_available=highlight)
          except yum.Errors.YumBaseError, e:
-             return 1, [str(e)]
+-            return 1, [str(e)]
++            return 1, [exception2msg(e)]
+         else:
+             update_pkgs = {}
+             inst_pkgs   = {}
 @@ -341,6 +583,7 @@ class InfoCommand(YumCommand):
                          local_pkgs[(po.name, po.arch)] = po
  
@@ -158355,7 +158556,7 @@ index 4dcbea7..f31d495 100644
                                                   '=' : clar, 'not in' : clai})
              rep = base.listPkgs(ypl.extras, _('Extra Packages'), basecmd,
                                  columns=columns)
-@@ -389,35 +635,95 @@ class InfoCommand(YumCommand):
+@@ -389,45 +635,121 @@ class InfoCommand(YumCommand):
              return 0, []
  
      def needTs(self, base, basecmd, extcmds):
@@ -158451,8 +158652,9 @@ index 4dcbea7..f31d495 100644
          self.doneCommand(base, _("Setting up Remove Process"))
          try:
              return base.erasePkgs(extcmds)
-@@ -425,9 +731,25 @@ class EraseCommand(YumCommand):
-             return 1, [str(e)]
+         except yum.Errors.YumBaseError, e:
+-            return 1, [str(e)]
++            return 1, [exception2msg(e)]
  
      def needTs(self, base, basecmd, extcmds):
 +        """Return whether a transaction set must be set up before this
@@ -158503,6 +158705,15 @@ index 4dcbea7..f31d495 100644
          return _("Display, or use, the groups information")
      
      def _grp_setup_doCommand(self, base):
+@@ -459,7 +794,7 @@ class GroupsCommand(YumCommand):
+         except yum.Errors.GroupsError:
+             return 1, [_('No Groups on which to run command')]
+         except yum.Errors.YumBaseError, e:
+-            return 1, [str(e)]
++            return 1, [exception2msg(e)]
+ 
+     def _grp_cmd(self, basecmd, extcmds):
+         if basecmd in self.direct_commands:
 @@ -470,6 +805,10 @@ class GroupsCommand(YumCommand):
          else:
              cmd = 'summary'
@@ -158702,7 +158913,8 @@ index 4dcbea7..f31d495 100644
 +
 +
          except yum.Errors.YumBaseError, e:
-             return 1, [str(e)]
+-            return 1, [str(e)]
++            return 1, [exception2msg(e)]
  
  
      def needTs(self, base, basecmd, extcmds):
@@ -158792,7 +159004,7 @@ index 4dcbea7..f31d495 100644
          base.logger.debug(_("Making cache files for all metadata files."))
          base.logger.debug(_("This may take a while depending on the speed of this computer"))
          try:
-@@ -565,16 +1098,12 @@ class MakeCacheCommand(YumCommand):
+@@ -565,81 +1098,204 @@ class MakeCacheCommand(YumCommand):
                  repo.mdpolicy = "group:all"
              base.doRepoSetup(dosack=0)
              base.repos.doSetup()
@@ -158810,7 +159022,8 @@ index 4dcbea7..f31d495 100644
  
  
          except yum.Errors.YumBaseError, e:
-@@ -582,44 +1111,134 @@ class MakeCacheCommand(YumCommand):
+-            return 1, [str(e)]
++            return 1, [exception2msg(e)]
          return 0, [_('Metadata Cache Created')]
  
      def needTs(self, base, basecmd, extcmds):
@@ -158945,8 +159158,9 @@ index 4dcbea7..f31d495 100644
          base.logger.debug("Searching Packages: ")
          try:
              return base.provides(extcmds)
-@@ -627,19 +1246,56 @@ class ProvidesCommand(YumCommand):
-             return 1, [str(e)]
+         except yum.Errors.YumBaseError, e:
+-            return 1, [str(e)]
++            return 1, [exception2msg(e)]
  
  class CheckUpdateCommand(YumCommand):
 +    """A class containing methods needed by the cli to execute the
@@ -159002,7 +159216,13 @@ index 4dcbea7..f31d495 100644
          obscmds = ['obsoletes'] + extcmds
          base.extcmds.insert(0, 'updates')
          result = 0
-@@ -681,19 +1337,56 @@ class CheckUpdateCommand(YumCommand):
+@@ -676,161 +1332,437 @@ class CheckUpdateCommand(YumCommand):
+                                               columns=columns)
+                 result = 100
+         except yum.Errors.YumBaseError, e:
+-            return 1, [str(e)]
++            return 1, [exception2msg(e)]
+         else:
              return result, []
  
  class SearchCommand(YumCommand):
@@ -159059,8 +159279,9 @@ index 4dcbea7..f31d495 100644
          base.logger.debug(_("Searching Packages: "))
          try:
              return base.search(extcmds)
-@@ -701,24 +1394,70 @@ class SearchCommand(YumCommand):
-             return 1, [str(e)]
+         except yum.Errors.YumBaseError, e:
+-            return 1, [str(e)]
++            return 1, [exception2msg(e)]
  
      def needTs(self, base, basecmd, extcmds):
 +        """Return whether a transaction set must be set up before this
@@ -159130,8 +159351,10 @@ index 4dcbea7..f31d495 100644
          base.conf.obsoletes = 1
          self.doneCommand(base, _("Setting up Upgrade Process"))
          try:
-@@ -727,25 +1466,64 @@ class UpgradeCommand(YumCommand):
-             return 1, [str(e)]
+             return base.updatePkgs(extcmds, update_to=(basecmd == 'upgrade-to'))
+         except yum.Errors.YumBaseError, e:
+-            return 1, [str(e)]
++            return 1, [exception2msg(e)]
  
  class LocalInstallCommand(YumCommand):
 +    """A class containing methods needed by the cli to execute the
@@ -159195,8 +159418,11 @@ index 4dcbea7..f31d495 100644
          self.doneCommand(base, _("Setting up Local Package Process"))
  
          updateonly = basecmd == 'localupdate'
-@@ -755,19 +1533,61 @@ class LocalInstallCommand(YumCommand):
-             return 1, [str(e)]
+         try:
+             return base.localInstall(filelist=extcmds, updateonly=updateonly)
+         except yum.Errors.YumBaseError, e:
+-            return 1, [str(e)]
++            return 1, [exception2msg(e)]
  
      def needTs(self, base, basecmd, extcmds):
 +        """Return whether a transaction set must be set up before this
@@ -159258,8 +159484,9 @@ index 4dcbea7..f31d495 100644
          base.logger.debug(_("Searching Packages for Dependency:"))
          try:
              return base.resolveDepCli(extcmds)
-@@ -775,19 +1595,56 @@ class ResolveDepCommand(YumCommand):
-             return 1, [str(e)]
+         except yum.Errors.YumBaseError, e:
+-            return 1, [str(e)]
++            return 1, [exception2msg(e)]
  
  class ShellCommand(YumCommand):
 +    """A class containing methods needed by the cli to execute the
@@ -159315,8 +159542,9 @@ index 4dcbea7..f31d495 100644
          self.doneCommand(base, _('Setting up Yum Shell'))
          try:
              return base.doShell()
-@@ -795,23 +1652,69 @@ class ShellCommand(YumCommand):
-             return 1, [str(e)]
+         except yum.Errors.YumBaseError, e:
+-            return 1, [str(e)]
++            return 1, [exception2msg(e)]
  
      def needTs(self, base, basecmd, extcmds):
 +        """Return whether a transaction set must be set up before this
@@ -159385,7 +159613,9 @@ index 4dcbea7..f31d495 100644
          self.doneCommand(base, _("Finding dependencies: "))
          try:
              return base.deplist(extcmds)
-@@ -820,17 +1723,46 @@ class DepListCommand(YumCommand):
+         except yum.Errors.YumBaseError, e:
+-            return 1, [str(e)]
++            return 1, [exception2msg(e)]
  
  
  class RepoListCommand(YumCommand):
@@ -159792,7 +160022,7 @@ index 4dcbea7..f31d495 100644
          self.doneCommand(base, _("Setting up Reinstall Process"))
          try:
              return base.reinstallPkgs(extcmds)
-@@ -1177,25 +2203,73 @@ class ReInstallCommand(YumCommand):
+@@ -1177,49 +2203,139 @@ class ReInstallCommand(YumCommand):
              return 1, [to_unicode(e)]
  
      def getSummary(self):
@@ -159866,8 +160096,9 @@ index 4dcbea7..f31d495 100644
          self.doneCommand(base, _("Setting up Downgrade Process"))
          try:
              return base.downgradePkgs(extcmds)
-@@ -1203,23 +2277,65 @@ class DowngradeCommand(YumCommand):
-             return 1, [str(e)]
+         except yum.Errors.YumBaseError, e:
+-            return 1, [str(e)]
++            return 1, [exception2msg(e)]
  
      def getSummary(self):
 +        """Return a one line summary of this command.
@@ -159932,6 +160163,24 @@ index 4dcbea7..f31d495 100644
          vcmd = 'installed'
          if extcmds:
              vcmd = extcmds[0]
+@@ -1308,7 +2424,7 @@ class VersionCommand(YumCommand):
+                                      str(data[2][grp])))
+                         _append_repos(cols, data[3][grp])
+             except yum.Errors.YumBaseError, e:
+-                return 1, [str(e)]
++                return 1, [exception2msg(e)]
+         if vcmd in ('available', 'all', 'group-available', 'group-all'):
+             try:
+                 data = base.pkgSack.simpleVersion(not verbose, groups=groups)
+@@ -1327,7 +2443,7 @@ class VersionCommand(YumCommand):
+                         if verbose:
+                             _append_repos(cols, data[3][grp])
+             except yum.Errors.YumBaseError, e:
+-                return 1, [str(e)]
++                return 1, [exception2msg(e)]
+ 
+         data = {'rid' : {}, 'ver' : {}}
+         for (rid, ver) in cols:
 @@ -1344,6 +2460,14 @@ class VersionCommand(YumCommand):
          return 0, ['version']
  
diff --git a/yum.spec b/yum.spec
index 5e9a6a1..aac80d8 100644
--- a/yum.spec
+++ b/yum.spec
@@ -18,7 +18,7 @@
 Summary: RPM package installer/updater/manager
 Name: yum
 Version: 3.4.3
-Release: 26%{?dist}
+Release: 27%{?dist}
 License: GPLv2+
 Group: System Environment/Base
 Source0: http://yum.baseurl.org/download/3.4/%{name}-%{version}.tar.gz
@@ -313,6 +313,10 @@ exit 0
 %endif
 
 %changelog
+* Fri Jun  8 2012 James Antill <james at fedoraproject.org> - 3.4.3-27
+- update to latest HEAD.
+- Fix for ppc64p7 detection.
+
 * Wed May 16 2012 Zdenek Pavlas <zpavlas at redhat.com> - 3.4.3-26
 - update to latest master HEAD
 - Fix using available packages as installed, due to strong_requires.


More information about the scm-commits mailing list