[yum/f18] Update to latest HEAD
Zdeněk Pavlas
zpavlas at fedoraproject.org
Tue Oct 2 11:25:13 UTC 2012
commit d7f313512e616b5f74b443e86526fd1865766ab1
Author: Zdeněk Pavlas <zpavlas at redhat.com>
Date: Tue Oct 2 13:24:53 2012 +0200
Update to latest HEAD
yum-HEAD.patch | 450 +++++++++++++++++++++++++++++++-------------------------
yum.spec | 11 ++-
2 files changed, 260 insertions(+), 201 deletions(-)
---
diff --git a/yum-HEAD.patch b/yum-HEAD.patch
index 41dc2e8..a2b10b9 100644
--- a/yum-HEAD.patch
+++ b/yum-HEAD.patch
@@ -96,7 +96,7 @@ index 2f6154e..2e5a052 100644
diff --git a/cli.py b/cli.py
old mode 100644
new mode 100755
-index 6056d38..adc3516
+index 6056d38..cf2c369
--- a/cli.py
+++ b/cli.py
@@ -25,7 +25,7 @@ import sys
@@ -384,13 +384,12 @@ index 6056d38..adc3516
stuff_to_download = True
po = txmbr.po
if po:
-@@ -489,9 +536,21 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
+@@ -489,9 +536,20 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
else:
self.reportDownloadSize(downloadpkgs, install_only)
+ cfr = self.tsInfo._check_future_rpmdbv
+ if (cfr is not None and
-+ cfr[0] == self.tsInfo.state_counter and
+ self.tsInfo.futureRpmDBVersion() != cfr[1]):
+ msg = _("future rpmdb ver mismatched saved transaction version,")
+ if cfr[2]:
@@ -407,7 +406,7 @@ index 6056d38..adc3516
self.verbose_logger.info(_('Exiting on user Command'))
return -1
-@@ -609,12 +668,14 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
+@@ -609,12 +667,14 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
return resultobject.return_code
def gpgsigcheck(self, pkgs):
@@ -427,7 +426,7 @@ index 6056d38..adc3516
for po in pkgs:
result, errmsg = self.sigCheckPkg(po)
-@@ -623,7 +684,8 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
+@@ -623,7 +683,8 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
continue
elif result == 1:
@@ -437,7 +436,7 @@ index 6056d38..adc3516
raise yum.Errors.YumBaseError, \
_('Refusing to automatically import keys when running ' \
'unattended.\nUse "-y" to override.')
-@@ -691,12 +753,62 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
+@@ -691,12 +752,62 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
", ".join(matches))
self.verbose_logger.log(yum.logginglevels.INFO_2, msg)
@@ -506,7 +505,7 @@ index 6056d38..adc3516
# get the list of available packages
# iterate over the user's list
# add packages to Transaction holding class if they match.
-@@ -710,11 +822,36 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
+@@ -710,11 +821,36 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
for arg in userlist:
if (arg.endswith('.rpm') and (yum.misc.re_remote_url(arg) or
os.path.exists(arg))):
@@ -545,7 +544,7 @@ index 6056d38..adc3516
except yum.Errors.InstallError:
self.verbose_logger.log(yum.logginglevels.INFO_2,
_('No package %s%s%s available.'),
-@@ -723,6 +860,7 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
+@@ -723,6 +859,7 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
self._maybeYouMeant(arg)
else:
done = True
@@ -553,7 +552,7 @@ index 6056d38..adc3516
if len(self.tsInfo) > oldcount:
change = len(self.tsInfo) - oldcount
return 2, [P_('%d package to install', '%d packages to install', change) % change]
-@@ -732,9 +870,27 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
+@@ -732,9 +869,27 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
return 0, [_('Nothing to do')]
def updatePkgs(self, userlist, quiet=0, update_to=False):
@@ -584,7 +583,7 @@ index 6056d38..adc3516
# if there is no userlist, then do global update below
# this is probably 90% of the calls
# if there is a userlist then it's for updating pkgs, not obsoleting
-@@ -745,21 +901,18 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
+@@ -745,21 +900,18 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
else:
# go through the userlist - look for items that are local rpms. If we find them
@@ -615,7 +614,7 @@ index 6056d38..adc3516
if len(self.tsInfo) > oldcount:
change = len(self.tsInfo) - oldcount
-@@ -770,9 +923,24 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
+@@ -770,9 +922,24 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
# Note that we aren't in __init__ yet for a couple of reasons, but we
# probably will get there for 3.2.28.
def distroSyncPkgs(self, userlist):
@@ -643,7 +642,7 @@ index 6056d38..adc3516
level = 'diff'
if userlist and userlist[0] in ('full', 'diff', 'different'):
-@@ -831,6 +999,7 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
+@@ -831,6 +998,7 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
continue
nayi = napkg.yumdb_info
@@ -651,7 +650,7 @@ index 6056d38..adc3516
for apkg in self.pkgSack.searchPkgTuple(napkg.pkgtup):
if ('checksum_type' in nayi and
'checksum_data' in nayi and
-@@ -865,15 +1034,54 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
+@@ -865,15 +1033,54 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
else:
return 0, [_('No Packages marked for Distribution Synchronization')]
@@ -712,7 +711,7 @@ index 6056d38..adc3516
if not rms:
self._checkMaybeYouMeant(arg, always_output=False, rpmdb_only=True)
all_rms.extend(rms)
-@@ -884,12 +1092,24 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
+@@ -884,12 +1091,24 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
return 0, [_('No Packages marked for removal')]
def downgradePkgs(self, userlist):
@@ -740,7 +739,7 @@ index 6056d38..adc3516
for arg in userlist:
if (arg.endswith('.rpm') and (yum.misc.re_remote_url(arg) or
os.path.exists(arg))):
-@@ -905,26 +1125,44 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
+@@ -905,26 +1124,44 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
self.term.MODE['bold'], arg,
self.term.MODE['normal'])
self._maybeYouMeant(arg)
@@ -789,7 +788,7 @@ index 6056d38..adc3516
except yum.Errors.ReinstallRemoveError:
self._checkMaybeYouMeant(arg, always_output=False)
except yum.Errors.ReinstallInstallError, e:
-@@ -940,15 +1178,31 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
+@@ -940,15 +1177,31 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
except yum.Errors.ReinstallError, e:
assert False, "Shouldn't happen, but just in case"
self.verbose_logger.log(yum.logginglevels.INFO_2, e)
@@ -824,7 +823,7 @@ index 6056d38..adc3516
# read in each package into a YumLocalPackage Object
# append it to self.localPackages
# check if it can be installed or updated based on nevra versus rpmdb
-@@ -972,20 +1226,25 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
+@@ -972,20 +1225,25 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
return 0, [_('Nothing to do')]
def returnPkgLists(self, extcmds, installed_available=False):
@@ -864,7 +863,7 @@ index 6056d38..adc3516
special = ['available', 'installed', 'all', 'extras', 'updates', 'recent',
'obsoletes']
-@@ -1017,8 +1276,25 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
+@@ -1017,8 +1275,25 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
return ypl
def search(self, args):
@@ -892,7 +891,7 @@ index 6056d38..adc3516
# call the yum module search function with lists of tags to search
# and what to search for
-@@ -1108,9 +1384,20 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
+@@ -1108,9 +1383,20 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
return 0, matching
def deplist(self, args):
@@ -915,7 +914,7 @@ index 6056d38..adc3516
pkgs = []
for arg in args:
if (arg.endswith('.rpm') and (yum.misc.re_remote_url(arg) or
-@@ -1131,10 +1418,19 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
+@@ -1131,10 +1417,19 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
return 0, []
def provides(self, args):
@@ -939,7 +938,7 @@ index 6056d38..adc3516
old_sdup = self.conf.showdupesfromrepos
# For output, as searchPackageProvides() is always in showdups mode
self.conf.showdupesfromrepos = True
-@@ -1147,6 +1443,8 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
+@@ -1147,6 +1442,8 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
paths = set(sys.path + os.environ['PATH'].split(':'))
nargs = []
for arg in args:
@@ -948,7 +947,7 @@ index 6056d38..adc3516
if yum.misc.re_filename(arg) or yum.misc.re_glob(arg):
continue
for path in paths:
-@@ -1163,20 +1461,77 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
+@@ -1163,20 +1460,77 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
return 0, []
def resolveDepCli(self, args):
@@ -1031,7 +1030,7 @@ index 6056d38..adc3516
hdrcode = pkgcode = xmlcode = dbcode = expccode = 0
pkgresults = hdrresults = xmlresults = dbresults = expcresults = []
msg = self.fmtKeyValFill(_('Cleaning repos: '),
-@@ -1228,130 +1583,257 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
+@@ -1228,130 +1582,257 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
return code, []
def returnGroupLists(self, userlist):
@@ -1369,7 +1368,7 @@ index 6056d38..adc3516
except yum.Errors.GroupsError:
self.logger.critical(_('Warning: Group %s does not exist.'), group_string)
continue
-@@ -1368,17 +1850,61 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
+@@ -1368,17 +1849,61 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
return 2, [P_('%d package to Install', '%d packages to Install', len(pkgs_used)) % len(pkgs_used)]
def removeGroups(self, grouplist):
@@ -1439,7 +1438,7 @@ index 6056d38..adc3516
if not pkgs_used:
return 0, [_('No packages to remove from groups')]
-@@ -1389,7 +1915,7 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
+@@ -1389,7 +1914,7 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
def _promptWanted(self):
# shortcut for the always-off/always-on options
@@ -1448,7 +1447,7 @@ index 6056d38..adc3516
return False
if self.conf.alwaysprompt:
return True
-@@ -1400,7 +1926,6 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
+@@ -1400,7 +1925,6 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
# package wasn't explictly given on the command line
for txmbr in self.tsInfo.getMembers():
if txmbr.isDep or \
@@ -1456,7 +1455,7 @@ index 6056d38..adc3516
txmbr.name not in self.extcmds:
return True
-@@ -1408,11 +1933,11 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
+@@ -1408,11 +1932,11 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
return False
def usage(self):
@@ -1470,7 +1469,7 @@ index 6056d38..adc3516
sys.stdout.write(self.optparser.get_usage())
def _installable(self, pkg, ematch=False):
-@@ -1468,9 +1993,9 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
+@@ -1468,9 +1992,9 @@ class YumBaseCli(yum.YumBase, output.YumOutput):
return False
class YumOptionParser(OptionParser):
@@ -1482,7 +1481,7 @@ index 6056d38..adc3516
def __init__(self,base, **kwargs):
# check if this is called with a utils=True/False parameter
-@@ -1488,13 +2013,23 @@ class YumOptionParser(OptionParser):
+@@ -1488,13 +2012,23 @@ class YumOptionParser(OptionParser):
self._addYumBasicOptions()
def error(self, msg):
@@ -1508,7 +1507,7 @@ index 6056d38..adc3516
try:
args = _filtercmdline(
('--noplugins','--version','-q', '-v', "--quiet", "--verbose"),
-@@ -1521,7 +2056,15 @@ class YumOptionParser(OptionParser):
+@@ -1521,7 +2055,15 @@ class YumOptionParser(OptionParser):
return ret
def setupYumConfig(self, args=None):
@@ -1525,7 +1524,7 @@ index 6056d38..adc3516
if not args:
(opts, cmds) = self.parse_args()
else:
-@@ -1533,16 +2076,20 @@ class YumOptionParser(OptionParser):
+@@ -1533,16 +2075,20 @@ class YumOptionParser(OptionParser):
try:
# config file is parsed and moving us forward
# set some things in it.
@@ -1551,7 +1550,7 @@ index 6056d38..adc3516
self.base.conf.cache = 1
if opts.obsoletes:
-@@ -1610,10 +2157,6 @@ class YumOptionParser(OptionParser):
+@@ -1610,10 +2156,6 @@ class YumOptionParser(OptionParser):
self.base.usage()
sys.exit(1)
@@ -1562,7 +1561,7 @@ index 6056d38..adc3516
# Disable all gpg key checking, if requested.
if opts.nogpgcheck:
# Altering the normal configs. doesn't work too well, esp. with
-@@ -1640,6 +2183,14 @@ class YumOptionParser(OptionParser):
+@@ -1640,10 +2182,18 @@ class YumOptionParser(OptionParser):
sys.exit(1)
def getRoot(self,opts):
@@ -1577,7 +1576,12 @@ index 6056d38..adc3516
self._checkAbsInstallRoot(opts)
# If the conf file is inside the installroot - use that.
# otherwise look for it in the normal root
-@@ -1701,6 +2252,9 @@ class YumOptionParser(OptionParser):
+- if opts.installroot:
++ if opts.installroot and opts.installroot.lstrip('/'):
+ if os.access(opts.installroot+'/'+opts.conffile, os.R_OK):
+ opts.conffile = opts.installroot+'/'+opts.conffile
+ elif opts.conffile == '/etc/yum/yum.conf':
+@@ -1701,6 +2251,9 @@ class YumOptionParser(OptionParser):
group.add_option("--showduplicates", dest="showdupesfromrepos",
action="store_true",
help=_("show duplicates, in repos, in list/search commands"))
@@ -1587,7 +1591,7 @@ index 6056d38..adc3516
group.add_option("-e", "--errorlevel", dest="errorlevel", default=None,
help=_("error output level"), type='int',
metavar='[error level]')
-@@ -1713,6 +2267,10 @@ class YumOptionParser(OptionParser):
+@@ -1713,6 +2266,10 @@ class YumOptionParser(OptionParser):
help=_("verbose operation"))
group.add_option("-y", "--assumeyes", dest="assumeyes",
action="store_true", help=_("answer yes for all questions"))
@@ -1600,7 +1604,7 @@ index 6056d38..adc3516
group.add_option("--installroot", help=_("set install root"),
diff --git a/completion-helper.py b/completion-helper.py
new file mode 100755
-index 0000000..0e4b96b
+index 0000000..05801d1
--- /dev/null
+++ b/completion-helper.py
@@ -0,0 +1,90 @@
@@ -1629,7 +1633,7 @@ index 0000000..0e4b96b
+
+import cli
+import yumcommands
-+from yum.Errors import GroupsError
++from yum.Errors import GroupsError, ConfigError
+
+
+class GroupsCompletionCommand(yumcommands.GroupsCommand):
@@ -1682,11 +1686,11 @@ index 0000000..0e4b96b
+ base.registerCommand(RepoListCompletionCommand())
+ base.getOptionsConfig(args)
+ base.parseCommands()
-+ for repo in base.repos.listEnabled():
-+ repo.skip_if_unavailable = True
+ try:
++ for repo in base.repos.listEnabled():
++ repo.skip_if_unavailable = True
+ base.doCommands()
-+ except GroupsError, e:
++ except (GroupsError, ConfigError), e:
+ base.logger.error(e)
+
+if __name__ == "__main__":
@@ -2574,7 +2578,7 @@ index 1a8202a..dab01f6 100644
.IP "\fB\-\-setopt=option=value\fP"
Set any config option in yum config or repo files. For options in the global
diff --git a/docs/yum.conf.5 b/docs/yum.conf.5
-index 515aa73..01facf8 100644
+index 515aa73..029fa75 100644
--- a/docs/yum.conf.5
+++ b/docs/yum.conf.5
@@ -114,15 +114,27 @@ are causing problems from the transaction.
@@ -2706,7 +2710,7 @@ index 515aa73..01facf8 100644
\fBmultilib_policy \fR
Can be set to 'all' or 'best'. All means install all possible arches for any package you
want to install. Therefore yum install foo will install foo.i386 and foo.x86_64 on x86_64,
-@@ -593,8 +667,50 @@ See color_list_installed_older for possible values.
+@@ -593,8 +667,53 @@ See color_list_installed_older for possible values.
When removing packages (by removal, update or obsoletion) go through each
package's dependencies. If any of them are no longer required by any other
package then also mark them to be removed.
@@ -2739,12 +2743,15 @@ index 515aa73..01facf8 100644
+Should the load-ts command ignore packages that are missing. This includes
+packages in the TS to be removed, which aren't installed, and packages in the
+TS to be added, which aren't available.
++If this is set to true, and an rpm is missing then loadts_ignorenewrpm is
++automatically set to true.
+Boolean (1, 0, True, False, yes, no) Defaults to False
+
+.IP
+\fBloadts_ignorerpm\fR
+Should the load-ts command ignore the rpmdb version (yum version nogroups) or
+abort if there is a mismatch between the TS file and the current machine.
++If this is set to true, then loadts_ignorenewrpm is automatically set to true.
+Boolean (1, 0, True, False, yes, no) Defaults to False
+
+.IP
@@ -2757,7 +2764,7 @@ index 515aa73..01facf8 100644
.SH "[repository] OPTIONS"
-@@ -755,6 +871,11 @@ repository.
+@@ -755,6 +874,11 @@ repository.
Overrides the \fBbandwidth\fR option from the [main] section for this
repository.
@@ -2769,7 +2776,7 @@ index 515aa73..01facf8 100644
.IP
\fBsslcacert \fR
-@@ -776,6 +897,10 @@ repository.
+@@ -776,6 +900,10 @@ repository.
Overrides the \fBsslclientkey\fR option from the [main] section for this
repository.
@@ -2780,7 +2787,7 @@ index 515aa73..01facf8 100644
.IP
\fBmetadata_expire \fR
-@@ -824,7 +949,11 @@ as greater/less than any other. defaults to 1000
+@@ -824,7 +952,11 @@ as greater/less than any other. defaults to 1000
If set to True yum will continue running if this repository cannot be
contacted for any reason. This should be set carefully as all repos are consulted
for any given command. Defaults to False.
@@ -151392,7 +151399,7 @@ index c1af4ad..e3e3956 100644
pass
diff --git a/yum/__init__.py b/yum/__init__.py
-index 99039e0..198dc6d 100644
+index 99039e0..a1b045f 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -46,8 +46,13 @@ import operator
@@ -151857,7 +151864,16 @@ index 99039e0..198dc6d 100644
warnings.warn(_('doGroupSetup() will go away in a future version of Yum.\n'),
Errors.YumFutureDeprecationWarning, stacklevel=2)
-@@ -829,7 +940,7 @@ class YumBase(depsolve.Depsolve):
+@@ -820,16 +931,10 @@ class YumBase(depsolve.Depsolve):
+ self.verbose_logger.log(logginglevels.DEBUG_4,
+ _('Adding group file from repository: %s'), repo)
+ groupfile = repo.getGroups()
+- # open it up as a file object so iterparse can cope with our compressed file
+- if groupfile:
+- groupfile = misc.repo_gen_decompress(groupfile, 'groups.xml',
+- cached=repo.cache)
+- # Do we want a RepoError here?
+-
try:
self._comps.add(groupfile)
except (Errors.GroupsError,Errors.CompsException), e:
@@ -151866,7 +151882,7 @@ index 99039e0..198dc6d 100644
self.logger.critical(msg)
else:
repo.groups_added = True
-@@ -837,7 +948,10 @@ class YumBase(depsolve.Depsolve):
+@@ -837,7 +942,10 @@ class YumBase(depsolve.Depsolve):
if self._comps.compscount == 0:
raise Errors.GroupsError, _('No Groups Available in any repository')
@@ -151878,7 +151894,7 @@ index 99039e0..198dc6d 100644
self.verbose_logger.debug('group time: %0.3f' % (time.time() - group_st))
return self._comps
-@@ -868,7 +982,7 @@ class YumBase(depsolve.Depsolve):
+@@ -868,7 +976,7 @@ class YumBase(depsolve.Depsolve):
# feed it into _tags.add()
self._tags.add(repo.id, tag_sqlite)
except (Errors.RepoError, Errors.PkgTagsError), e:
@@ -151887,7 +151903,7 @@ index 99039e0..198dc6d 100644
self.logger.critical(msg)
-@@ -881,9 +995,18 @@ class YumBase(depsolve.Depsolve):
+@@ -881,9 +989,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,
@@ -151907,7 +151923,7 @@ index 99039e0..198dc6d 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 +1044,11 @@ class YumBase(depsolve.Depsolve):
+@@ -921,6 +1038,11 @@ class YumBase(depsolve.Depsolve):
fdel=lambda self: setattr(self, "_history", None),
doc="Yum History Object")
@@ -151919,7 +151935,7 @@ index 99039e0..198dc6d 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 +1056,10 @@ class YumBase(depsolve.Depsolve):
+@@ -928,9 +1050,10 @@ class YumBase(depsolve.Depsolve):
def doSackFilelistPopulate(self):
@@ -151933,7 +151949,7 @@ index 99039e0..198dc6d 100644
necessary = False
# I can't think of a nice way of doing this, we have to have the sack here
-@@ -951,8 +1080,12 @@ class YumBase(depsolve.Depsolve):
+@@ -951,8 +1074,12 @@ class YumBase(depsolve.Depsolve):
self.repos.populateSack(mdtype='filelists')
def yumUtilsMsg(self, func, prog):
@@ -151948,7 +151964,7 @@ index 99039e0..198dc6d 100644
if self.rpmdb.contains(name="yum-utils"):
return
-@@ -964,8 +1097,17 @@ class YumBase(depsolve.Depsolve):
+@@ -964,8 +1091,17 @@ class YumBase(depsolve.Depsolve):
(hibeg, prog, hiend))
def buildTransaction(self, unfinished_transactions_check=True):
@@ -151968,7 +151984,7 @@ index 99039e0..198dc6d 100644
if (unfinished_transactions_check and
misc.find_unfinished_transactions(yumlibpath=self.conf.persistdir)):
msg = _('There are unfinished transactions remaining. You might ' \
-@@ -1004,7 +1146,7 @@ class YumBase(depsolve.Depsolve):
+@@ -1004,7 +1140,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 )
@@ -151977,7 +151993,7 @@ index 99039e0..198dc6d 100644
self.tsInfo.pkgSack.dropCachedData()
# FIXME: This is horrible, see below and yummain. Maybe create a real
-@@ -1044,6 +1186,37 @@ class YumBase(depsolve.Depsolve):
+@@ -1044,6 +1180,37 @@ class YumBase(depsolve.Depsolve):
if first.verEQ(other):
continue
msg = _('Protected multilib versions: %s != %s')
@@ -152015,7 +152031,7 @@ index 99039e0..198dc6d 100644
xrestring.append(msg % (first, other))
if xrestring:
rescode = 1
-@@ -1242,13 +1415,15 @@ class YumBase(depsolve.Depsolve):
+@@ -1242,13 +1409,15 @@ class YumBase(depsolve.Depsolve):
if None in pkgtup:
return None
return pkgtup
@@ -152035,7 +152051,7 @@ index 99039e0..198dc6d 100644
if pkgtup is None:
return
self._not_found_i[pkgtup] = YumNotFoundPackage(pkgtup)
-@@ -1454,8 +1629,14 @@ class YumBase(depsolve.Depsolve):
+@@ -1454,8 +1623,14 @@ class YumBase(depsolve.Depsolve):
return probs
def runTransaction(self, cb):
@@ -152051,7 +152067,7 @@ index 99039e0..198dc6d 100644
self.plugins.run('pretrans')
# We may want to put this other places, eventually, but for now it's
-@@ -1516,10 +1697,23 @@ class YumBase(depsolve.Depsolve):
+@@ -1516,10 +1691,23 @@ class YumBase(depsolve.Depsolve):
pass
self._ts_save_file = None
@@ -152075,7 +152091,7 @@ index 99039e0..198dc6d 100644
# make resultobject - just a plain yumgenericholder object
resultobject = misc.GenericHolder()
-@@ -1567,13 +1761,24 @@ class YumBase(depsolve.Depsolve):
+@@ -1567,13 +1755,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):
@@ -152105,7 +152121,7 @@ index 99039e0..198dc6d 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 +1789,16 @@ class YumBase(depsolve.Depsolve):
+@@ -1584,9 +1783,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
@@ -152122,7 +152138,7 @@ index 99039e0..198dc6d 100644
for txmbr in self.tsInfo:
if txmbr.output_state in TS_INSTALL_STATES:
if not self.rpmdb.contains(po=txmbr.po):
-@@ -1596,7 +1808,9 @@ class YumBase(depsolve.Depsolve):
+@@ -1596,7 +1802,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
@@ -152132,7 +152148,7 @@ index 99039e0..198dc6d 100644
po = self.getInstalledPackageObject(txmbr.pkgtup)
rpo = txmbr.po
po.yumdb_info.from_repo = rpo.repoid
-@@ -1630,6 +1844,10 @@ class YumBase(depsolve.Depsolve):
+@@ -1630,6 +1838,10 @@ class YumBase(depsolve.Depsolve):
if md:
po.yumdb_info.from_repo_timestamp = str(md.timestamp)
@@ -152143,7 +152159,7 @@ index 99039e0..198dc6d 100644
loginuid = misc.getloginuid()
if txmbr.updates or txmbr.downgrades or txmbr.reinstall:
if txmbr.updates:
-@@ -1640,11 +1858,16 @@ class YumBase(depsolve.Depsolve):
+@@ -1640,11 +1852,16 @@ class YumBase(depsolve.Depsolve):
opo = po
if 'installed_by' in opo.yumdb_info:
po.yumdb_info.installed_by = opo.yumdb_info.installed_by
@@ -152160,7 +152176,7 @@ index 99039e0..198dc6d 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 +1885,13 @@ class YumBase(depsolve.Depsolve):
+@@ -1662,10 +1879,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
@@ -152174,7 +152190,7 @@ index 99039e0..198dc6d 100644
self.verbose_logger.log(logginglevels.DEBUG_2, 'What is this? %s' % txmbr.po)
self.plugins.run('postverifytrans')
-@@ -1680,10 +1906,11 @@ class YumBase(depsolve.Depsolve):
+@@ -1680,10 +1900,11 @@ class YumBase(depsolve.Depsolve):
self.verbose_logger.debug('VerifyTransaction time: %0.3f' % (time.time() - vt_st))
def costExcludePackages(self):
@@ -152190,7 +152206,7 @@ index 99039e0..198dc6d 100644
# if all the repo.costs are equal then don't bother running things
costs = {}
for r in self.repos.listEnabled():
-@@ -1705,10 +1932,12 @@ class YumBase(depsolve.Depsolve):
+@@ -1705,10 +1926,12 @@ class YumBase(depsolve.Depsolve):
done = True
def excludePackages(self, repo=None):
@@ -152206,7 +152222,7 @@ index 99039e0..198dc6d 100644
if "all" in self.conf.disable_excludes:
return
-@@ -1735,9 +1964,11 @@ class YumBase(depsolve.Depsolve):
+@@ -1735,9 +1958,11 @@ class YumBase(depsolve.Depsolve):
self.pkgSack.addPackageExcluder(repoid, exid,'exclude.match', match)
def includePackages(self, repo):
@@ -152221,7 +152237,7 @@ index 99039e0..198dc6d 100644
includelist = repo.getIncludePkgList()
if len(includelist) == 0:
-@@ -1757,8 +1988,11 @@ class YumBase(depsolve.Depsolve):
+@@ -1757,8 +1982,11 @@ class YumBase(depsolve.Depsolve):
self.pkgSack.addPackageExcluder(repo.id, exid, 'exclude.marked')
def doLock(self, lockfile = YUM_PID_FILE):
@@ -152235,7 +152251,7 @@ index 99039e0..198dc6d 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 +2008,26 @@ class YumBase(depsolve.Depsolve):
+@@ -1774,38 +2002,26 @@ class YumBase(depsolve.Depsolve):
mypid=str(os.getpid())
while not self._lock(lockfile, mypid, 0644):
@@ -152289,7 +152305,7 @@ index 99039e0..198dc6d 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 +2052,69 @@ class YumBase(depsolve.Depsolve):
+@@ -1830,31 +2046,69 @@ class YumBase(depsolve.Depsolve):
self._unlock(lockfile)
self._lockfile = None
@@ -152369,7 +152385,7 @@ index 99039e0..198dc6d 100644
failed = False
if type(fo) is types.InstanceType:
-@@ -1894,9 +2154,16 @@ class YumBase(depsolve.Depsolve):
+@@ -1894,9 +2148,16 @@ class YumBase(depsolve.Depsolve):
def verifyChecksum(self, fo, checksumType, csum):
@@ -152389,7 +152405,7 @@ index 99039e0..198dc6d 100644
try:
filesum = misc.checksum(checksumType, fo)
except Errors.MiscError, e:
-@@ -1908,6 +2175,17 @@ class YumBase(depsolve.Depsolve):
+@@ -1908,6 +2169,17 @@ class YumBase(depsolve.Depsolve):
return 0
def downloadPkgs(self, pkglist, callback=None, callback_total=None):
@@ -152407,7 +152423,7 @@ index 99039e0..198dc6d 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 +2257,9 @@ class YumBase(depsolve.Depsolve):
+@@ -1979,8 +2251,9 @@ class YumBase(depsolve.Depsolve):
urlgrabber.progress.text_meter_total_size(remote_size)
beg_download = time.time()
i = 0
@@ -152418,7 +152434,7 @@ index 99039e0..198dc6d 100644
for po in remote_pkgs:
# Recheck if the file is there, works around a couple of weird
# edge cases.
-@@ -1992,52 +2271,47 @@ class YumBase(depsolve.Depsolve):
+@@ -1992,52 +2265,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,
@@ -152497,7 +152513,7 @@ index 99039e0..198dc6d 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 +2326,22 @@ class YumBase(depsolve.Depsolve):
+@@ -2052,7 +2320,22 @@ class YumBase(depsolve.Depsolve):
return errors
def verifyHeader(self, fo, po, raiseError):
@@ -152521,7 +152537,7 @@ index 99039e0..198dc6d 100644
if type(fo) is types.InstanceType:
fo = fo.filename
-@@ -2076,9 +2365,12 @@ class YumBase(depsolve.Depsolve):
+@@ -2076,9 +2359,12 @@ class YumBase(depsolve.Depsolve):
return 1
def downloadHeader(self, po):
@@ -152536,7 +152552,7 @@ index 99039e0..198dc6d 100644
if hasattr(po, 'pkgtype') and po.pkgtype == 'local':
return
-@@ -2122,15 +2414,17 @@ class YumBase(depsolve.Depsolve):
+@@ -2122,15 +2408,17 @@ class YumBase(depsolve.Depsolve):
return
def sigCheckPkg(self, po):
@@ -152562,7 +152578,7 @@ index 99039e0..198dc6d 100644
if self._override_sigchecks:
check = False
hasgpgkey = 0
-@@ -2181,6 +2475,9 @@ class YumBase(depsolve.Depsolve):
+@@ -2181,6 +2469,9 @@ class YumBase(depsolve.Depsolve):
return result, msg
def cleanUsedHeadersPackages(self):
@@ -152572,7 +152588,7 @@ index 99039e0..198dc6d 100644
filelist = []
for txmbr in self.tsInfo:
if txmbr.po.state not in TS_INSTALL_STATES:
-@@ -2218,27 +2515,42 @@ class YumBase(depsolve.Depsolve):
+@@ -2218,27 +2509,42 @@ class YumBase(depsolve.Depsolve):
_('%s removed'), fn)
def cleanHeaders(self):
@@ -152617,7 +152633,7 @@ index 99039e0..198dc6d 100644
cachedir = self.conf.persistdir + "/rpmdb-indexes/"
if not os.path.exists(cachedir):
filelist = []
-@@ -2272,8 +2584,29 @@ class YumBase(depsolve.Depsolve):
+@@ -2272,8 +2578,29 @@ class YumBase(depsolve.Depsolve):
def doPackageLists(self, pkgnarrow='all', patterns=None, showdups=None,
ignore_case=False):
@@ -152649,7 +152665,7 @@ index 99039e0..198dc6d 100644
if showdups is None:
showdups = self.conf.showdupesfromrepos
ygh = misc.GenericHolder(iter=pkgnarrow)
-@@ -2323,10 +2656,22 @@ class YumBase(depsolve.Depsolve):
+@@ -2323,10 +2650,22 @@ class YumBase(depsolve.Depsolve):
key = (pkg.name, pkg.arch)
if pkg.pkgtup in dinst:
reinstall_available.append(pkg)
@@ -152675,7 +152691,7 @@ index 99039e0..198dc6d 100644
# produce the updates list of tuples
elif pkgnarrow == 'updates':
-@@ -2461,14 +2806,13 @@ class YumBase(depsolve.Depsolve):
+@@ -2461,14 +2800,13 @@ class YumBase(depsolve.Depsolve):
def findDeps(self, pkgs):
@@ -152695,7 +152711,7 @@ index 99039e0..198dc6d 100644
results = {}
for pkg in pkgs:
-@@ -2495,10 +2839,22 @@ class YumBase(depsolve.Depsolve):
+@@ -2495,10 +2833,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):
@@ -152722,7 +152738,7 @@ index 99039e0..198dc6d 100644
sql_fields = []
for f in fields:
sql_fields.append(RPM_TO_SQLITE.get(f, f))
-@@ -2661,6 +3017,14 @@ class YumBase(depsolve.Depsolve):
+@@ -2661,6 +3011,14 @@ class YumBase(depsolve.Depsolve):
yield (po, vs)
def searchPackageTags(self, criteria):
@@ -152737,7 +152753,7 @@ index 99039e0..198dc6d 100644
results = {} # name = [(criteria, taglist)]
for c in criteria:
c = c.lower()
-@@ -2677,11 +3041,16 @@ class YumBase(depsolve.Depsolve):
+@@ -2677,11 +3035,16 @@ class YumBase(depsolve.Depsolve):
return results
def searchPackages(self, fields, criteria, callback=None):
@@ -152759,7 +152775,7 @@ index 99039e0..198dc6d 100644
warnings.warn(_('searchPackages() will go away in a future version of Yum.\
Use searchGenerator() instead. \n'),
Errors.YumFutureDeprecationWarning, stacklevel=2)
-@@ -2700,13 +3069,23 @@ class YumBase(depsolve.Depsolve):
+@@ -2700,13 +3063,23 @@ class YumBase(depsolve.Depsolve):
def searchPackageProvides(self, args, callback=None,
callback_has_matchfor=False):
@@ -152787,7 +152803,7 @@ index 99039e0..198dc6d 100644
else:
isglob = True
canBeFile = misc.re_filename(arg)
-@@ -2723,7 +3102,7 @@ class YumBase(depsolve.Depsolve):
+@@ -2723,7 +3096,7 @@ class YumBase(depsolve.Depsolve):
where = self.returnPackagesByDep(arg)
else:
usedDepString = False
@@ -152796,7 +152812,7 @@ index 99039e0..198dc6d 100644
self.verbose_logger.log(logginglevels.DEBUG_1,
P_('Searching %d package', 'Searching %d packages', len(where)), len(where))
-@@ -2817,25 +3196,160 @@ class YumBase(depsolve.Depsolve):
+@@ -2817,25 +3190,160 @@ class YumBase(depsolve.Depsolve):
return matches
@@ -152969,7 +152985,7 @@ index 99039e0..198dc6d 100644
if uservisible:
if grp.user_visible:
installed.append(grp)
-@@ -2847,34 +3361,98 @@ class YumBase(depsolve.Depsolve):
+@@ -2847,34 +3355,98 @@ class YumBase(depsolve.Depsolve):
available.append(grp)
else:
available.append(grp)
@@ -153078,7 +153094,7 @@ index 99039e0..198dc6d 100644
thesegroups = self.comps.return_groups(grpid)
if not thesegroups:
raise Errors.GroupsError, _("No Group named %s exists") % to_unicode(grpid)
-@@ -2898,13 +3476,58 @@ class YumBase(depsolve.Depsolve):
+@@ -2898,13 +3470,58 @@ class YumBase(depsolve.Depsolve):
self.tsInfo.remove(txmbr.po.pkgtup)
@@ -153144,7 +153160,7 @@ index 99039e0..198dc6d 100644
"""
if not self.comps.has_group(grpid):
-@@ -2920,6 +3543,9 @@ class YumBase(depsolve.Depsolve):
+@@ -2920,6 +3537,9 @@ class YumBase(depsolve.Depsolve):
if group_package_types:
package_types = group_package_types
@@ -153154,7 +153170,7 @@ index 99039e0..198dc6d 100644
for thisgroup in thesegroups:
if thisgroup.selected:
continue
-@@ -2934,12 +3560,49 @@ class YumBase(depsolve.Depsolve):
+@@ -2934,12 +3554,49 @@ class YumBase(depsolve.Depsolve):
if 'optional' in package_types:
pkgs.extend(thisgroup.optional_packages)
@@ -153205,7 +153221,7 @@ index 99039e0..198dc6d 100644
except Errors.InstallError, e:
self.verbose_logger.debug(_('No package named %s available to be installed'),
pkg)
-@@ -2953,7 +3616,9 @@ class YumBase(depsolve.Depsolve):
+@@ -2953,7 +3610,9 @@ class YumBase(depsolve.Depsolve):
group_conditionals = enable_group_conditionals
count_cond_test = 0
@@ -153216,7 +153232,7 @@ index 99039e0..198dc6d 100644
for condreq, cond in thisgroup.conditional_packages.iteritems():
if self.isPackageInstalled(cond):
try:
-@@ -2990,17 +3655,22 @@ class YumBase(depsolve.Depsolve):
+@@ -2990,17 +3649,22 @@ class YumBase(depsolve.Depsolve):
if cond not in self.tsInfo.conditionals:
self.tsInfo.conditionals[cond] = []
self.tsInfo.conditionals[cond].extend(pkgs)
@@ -153245,7 +153261,7 @@ index 99039e0..198dc6d 100644
if not self.comps.has_group(grpid):
raise Errors.GroupsError, _("No Group named %s exists") % to_unicode(grpid)
-@@ -3008,7 +3678,8 @@ class YumBase(depsolve.Depsolve):
+@@ -3008,7 +3672,8 @@ class YumBase(depsolve.Depsolve):
thesegroups = self.comps.return_groups(grpid)
if not thesegroups:
raise Errors.GroupsError, _("No Group named %s exists") % to_unicode(grpid)
@@ -153255,7 +153271,7 @@ index 99039e0..198dc6d 100644
for thisgroup in thesegroups:
thisgroup.selected = False
-@@ -3034,13 +3705,102 @@ class YumBase(depsolve.Depsolve):
+@@ -3034,13 +3699,102 @@ class YumBase(depsolve.Depsolve):
for pkg in self.tsInfo.conditionals.get(txmbr.name, []):
self.tsInfo.remove(pkg.pkgtup)
@@ -153364,7 +153380,7 @@ index 99039e0..198dc6d 100644
# look it up in the self.localPackages first:
for po in self.localPackages:
if po.pkgtup == pkgtup:
-@@ -3049,7 +3809,7 @@ class YumBase(depsolve.Depsolve):
+@@ -3049,7 +3803,7 @@ class YumBase(depsolve.Depsolve):
pkgs = self.pkgSack.searchPkgTuple(pkgtup)
if len(pkgs) == 0:
@@ -153373,7 +153389,7 @@ index 99039e0..198dc6d 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 +3825,21 @@ class YumBase(depsolve.Depsolve):
+@@ -3065,13 +3819,21 @@ class YumBase(depsolve.Depsolve):
return result
def getInstalledPackageObject(self, pkgtup):
@@ -153400,7 +153416,7 @@ index 99039e0..198dc6d 100644
raise Errors.RpmDBError, _('Package tuple %s could not be found in rpmdb') % str(pkgtup)
# Dito. FIXME from getPackageObject() for len() > 1 ... :)
-@@ -3079,9 +3847,11 @@ class YumBase(depsolve.Depsolve):
+@@ -3079,9 +3841,11 @@ class YumBase(depsolve.Depsolve):
return po
def gpgKeyCheck(self):
@@ -153414,7 +153430,7 @@ index 99039e0..198dc6d 100644
gpgkeyschecked = self.conf.cachedir + '/.gpgkeyschecked.yum'
if os.path.exists(gpgkeyschecked):
return 1
-@@ -3106,9 +3876,13 @@ class YumBase(depsolve.Depsolve):
+@@ -3106,9 +3870,13 @@ class YumBase(depsolve.Depsolve):
return 1
def returnPackagesByDep(self, depstring):
@@ -153430,7 +153446,7 @@ index 99039e0..198dc6d 100644
if not depstring:
return []
-@@ -3135,9 +3909,16 @@ class YumBase(depsolve.Depsolve):
+@@ -3135,9 +3903,16 @@ class YumBase(depsolve.Depsolve):
return self.pkgSack.getProvides(depname, depflags, depver).keys()
def returnPackageByDep(self, depstring):
@@ -153450,7 +153466,7 @@ index 99039e0..198dc6d 100644
# we get all sorts of randomness here
errstring = depstring
if type(depstring) not in types.StringTypes:
-@@ -3149,16 +3930,22 @@ class YumBase(depsolve.Depsolve):
+@@ -3149,16 +3924,22 @@ class YumBase(depsolve.Depsolve):
raise Errors.YumBaseError, _('No Package found for %s') % errstring
ps = ListPackageSack(pkglist)
@@ -153477,7 +153493,7 @@ index 99039e0..198dc6d 100644
if not depstring:
return []
-@@ -3184,12 +3971,47 @@ class YumBase(depsolve.Depsolve):
+@@ -3184,12 +3965,47 @@ class YumBase(depsolve.Depsolve):
return self.rpmdb.getProvides(depname, depflags, depver).keys()
@@ -153527,7 +153543,7 @@ index 99039e0..198dc6d 100644
if len(pkglist) == 0:
-@@ -3198,14 +4020,23 @@ class YumBase(depsolve.Depsolve):
+@@ -3198,14 +4014,23 @@ class YumBase(depsolve.Depsolve):
if len(pkglist) == 1:
return pkglist[0]
@@ -153557,7 +153573,7 @@ index 99039e0..198dc6d 100644
returnlist = []
compatArchList = self.arch.get_arch_list(arch)
multiLib = []
-@@ -3222,9 +4053,9 @@ class YumBase(depsolve.Depsolve):
+@@ -3222,9 +4047,9 @@ class YumBase(depsolve.Depsolve):
singleLib.append(po)
# we now have three lists. find the best package(s) of each
@@ -153570,7 +153586,7 @@ index 99039e0..198dc6d 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 +4069,7 @@ class YumBase(depsolve.Depsolve):
+@@ -3238,7 +4063,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:
@@ -153579,7 +153595,7 @@ index 99039e0..198dc6d 100644
if best.arch == "noarch":
returnlist.append(no)
else:
-@@ -3246,7 +4077,7 @@ class YumBase(depsolve.Depsolve):
+@@ -3246,7 +4071,7 @@ class YumBase(depsolve.Depsolve):
if single: returnlist.append(single)
# similar for the non-multilib case
elif single:
@@ -153588,7 +153604,7 @@ index 99039e0..198dc6d 100644
if best.arch == "noarch":
returnlist.append(no)
else:
-@@ -3350,28 +4181,58 @@ class YumBase(depsolve.Depsolve):
+@@ -3350,28 +4175,58 @@ class YumBase(depsolve.Depsolve):
done = True
slow = next_func(slow)
@@ -153652,7 +153668,7 @@ index 99039e0..198dc6d 100644
try:
txmbrs = self.groupRemove(group_string)
except yum.Errors.GroupsError:
-@@ -3387,6 +4248,8 @@ class YumBase(depsolve.Depsolve):
+@@ -3387,6 +4242,8 @@ class YumBase(depsolve.Depsolve):
assert pattern[0] == '@'
grpid = pattern[1:]
@@ -153661,7 +153677,7 @@ index 99039e0..198dc6d 100644
thesegroups = self.comps.return_groups(grpid)
if not thesegroups:
raise Errors.GroupsError, _("No Group named %s exists") % to_unicode(grpid)
-@@ -3398,7 +4261,11 @@ class YumBase(depsolve.Depsolve):
+@@ -3398,7 +4255,11 @@ class YumBase(depsolve.Depsolve):
def _minus_deselect(self, pattern):
""" Remove things from the transaction, like kickstart. """
assert pattern[0] == '-'
@@ -153674,7 +153690,7 @@ index 99039e0..198dc6d 100644
if pat and pat[0] == '@':
pat = pat[1:]
-@@ -3437,14 +4304,61 @@ class YumBase(depsolve.Depsolve):
+@@ -3437,14 +4298,61 @@ class YumBase(depsolve.Depsolve):
if flag not in self.tsInfo.probFilterFlags:
self.tsInfo.probFilterFlags.append(flag)
@@ -153742,7 +153758,7 @@ index 99039e0..198dc6d 100644
pkgs = []
was_pattern = False
if po:
-@@ -3477,20 +4391,12 @@ class YumBase(depsolve.Depsolve):
+@@ -3477,20 +4385,12 @@ class YumBase(depsolve.Depsolve):
self.verbose_logger.debug(_('Checking for virtual provide or file-provide for %s'),
arg)
@@ -153769,7 +153785,7 @@ index 99039e0..198dc6d 100644
else:
nevra_dict = self._nevra_kwarg_parse(kwargs)
-@@ -3577,8 +4483,8 @@ class YumBase(depsolve.Depsolve):
+@@ -3577,8 +4477,8 @@ class YumBase(depsolve.Depsolve):
continue
# make sure this shouldn't be passed to update:
@@ -153780,7 +153796,7 @@ index 99039e0..198dc6d 100644
txmbrs = self.update(po=po)
tx_return.extend(txmbrs)
continue
-@@ -3587,7 +4493,7 @@ class YumBase(depsolve.Depsolve):
+@@ -3587,7 +4487,7 @@ class YumBase(depsolve.Depsolve):
# something else in the repo. Unless there is a obsoletion loop,
# at which point ignore everything.
obsoleting_pkg = None
@@ -153789,7 +153805,7 @@ index 99039e0..198dc6d 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 +4506,23 @@ class YumBase(depsolve.Depsolve):
+@@ -3600,23 +4500,23 @@ class YumBase(depsolve.Depsolve):
already_obs = pkgs[0]
if already_obs:
@@ -153820,7 +153836,7 @@ index 99039e0..198dc6d 100644
continue
# make sure we don't have a name.arch of this already installed
-@@ -3630,7 +4536,7 @@ class YumBase(depsolve.Depsolve):
+@@ -3630,7 +4530,7 @@ class YumBase(depsolve.Depsolve):
found = True
break
if not found:
@@ -153829,7 +153845,7 @@ index 99039e0..198dc6d 100644
txmbrs = self.update(po=po)
tx_return.extend(txmbrs)
continue
-@@ -3719,19 +4625,47 @@ class YumBase(depsolve.Depsolve):
+@@ -3719,19 +4619,47 @@ class YumBase(depsolve.Depsolve):
return txmbr
def update(self, po=None, requiringPo=None, update_to=False, **kwargs):
@@ -153884,7 +153900,7 @@ index 99039e0..198dc6d 100644
tx_return = []
if not po and not kwargs: # update everything (the easy case)
self.verbose_logger.log(logginglevels.DEBUG_2, _('Updating Everything'))
-@@ -3765,7 +4699,14 @@ class YumBase(depsolve.Depsolve):
+@@ -3765,7 +4693,14 @@ class YumBase(depsolve.Depsolve):
if new is None:
continue
tx_return.extend(self.update(po=new))
@@ -153900,7 +153916,7 @@ index 99039e0..198dc6d 100644
return tx_return
# complications
-@@ -3787,7 +4728,7 @@ class YumBase(depsolve.Depsolve):
+@@ -3787,7 +4722,7 @@ class YumBase(depsolve.Depsolve):
return self._minus_deselect(kwargs['pattern'])
if kwargs['pattern'] and kwargs['pattern'][0] == '@':
@@ -153909,7 +153925,7 @@ index 99039e0..198dc6d 100644
arg = kwargs['pattern']
if not update_to:
-@@ -3843,7 +4784,7 @@ class YumBase(depsolve.Depsolve):
+@@ -3843,7 +4778,7 @@ class YumBase(depsolve.Depsolve):
availpkgs = self._compare_providers(availpkgs, requiringPo)
availpkgs = map(lambda x: x[0], availpkgs)
elif not availpkgs:
@@ -153918,7 +153934,7 @@ index 99039e0..198dc6d 100644
# for any thing specified
# get the list of available pkgs matching it (or take the po)
-@@ -3920,6 +4861,18 @@ class YumBase(depsolve.Depsolve):
+@@ -3920,6 +4855,18 @@ class YumBase(depsolve.Depsolve):
tx_return.append(txmbr)
for available_pkg in availpkgs:
@@ -153937,7 +153953,7 @@ index 99039e0..198dc6d 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 +4938,18 @@ class YumBase(depsolve.Depsolve):
+@@ -3985,11 +4932,18 @@ class YumBase(depsolve.Depsolve):
return tx_return
def remove(self, po=None, **kwargs):
@@ -153961,7 +153977,7 @@ index 99039e0..198dc6d 100644
if not po and not kwargs:
raise Errors.RemoveError, 'Nothing specified to remove'
-@@ -4055,17 +5015,19 @@ class YumBase(depsolve.Depsolve):
+@@ -4055,17 +5009,19 @@ class YumBase(depsolve.Depsolve):
return tx_return
def installLocal(self, pkg, po=None, updateonly=False):
@@ -153991,7 +154007,7 @@ index 99039e0..198dc6d 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 +5145,15 @@ class YumBase(depsolve.Depsolve):
+@@ -4183,16 +5139,15 @@ class YumBase(depsolve.Depsolve):
return tx_return
def reinstallLocal(self, pkg, po=None):
@@ -154016,7 +154032,7 @@ index 99039e0..198dc6d 100644
if not po:
try:
po = YumUrlPackage(self, ts=self.rpmdb.readOnlyTS(), url=pkg,
-@@ -4215,9 +5176,19 @@ class YumBase(depsolve.Depsolve):
+@@ -4215,9 +5170,19 @@ class YumBase(depsolve.Depsolve):
return self.reinstall(po=po)
def reinstall(self, po=None, **kwargs):
@@ -154039,7 +154055,7 @@ index 99039e0..198dc6d 100644
self._add_prob_flags(rpm.RPMPROB_FILTER_REPLACEPKG,
rpm.RPMPROB_FILTER_REPLACENEWFILES,
rpm.RPMPROB_FILTER_REPLACEOLDFILES)
-@@ -4259,16 +5230,15 @@ class YumBase(depsolve.Depsolve):
+@@ -4259,16 +5224,15 @@ class YumBase(depsolve.Depsolve):
return tx_mbrs
def downgradeLocal(self, pkg, po=None):
@@ -154064,7 +154080,7 @@ index 99039e0..198dc6d 100644
if not po:
try:
po = YumUrlPackage(self, ts=self.rpmdb.readOnlyTS(), url=pkg,
-@@ -4309,13 +5279,19 @@ class YumBase(depsolve.Depsolve):
+@@ -4309,13 +5273,19 @@ class YumBase(depsolve.Depsolve):
return False
def downgrade(self, po=None, **kwargs):
@@ -154091,7 +154107,7 @@ index 99039e0..198dc6d 100644
if not po and not kwargs:
raise Errors.DowngradeError, 'Nothing specified to downgrade'
-@@ -4421,6 +5397,9 @@ class YumBase(depsolve.Depsolve):
+@@ -4421,6 +5391,9 @@ class YumBase(depsolve.Depsolve):
warned_nas.add(na)
continue
@@ -154101,7 +154117,7 @@ index 99039e0..198dc6d 100644
if pkg.verGE(lipkg):
if na not in warned_nas:
msg = _('Only Upgrade available on package: %s') % pkg
-@@ -4457,7 +5436,7 @@ class YumBase(depsolve.Depsolve):
+@@ -4457,7 +5430,7 @@ class YumBase(depsolve.Depsolve):
if e and v and r:
evr = '%s:%s-%s' % (e, v, r)
elif v and r:
@@ -154110,7 +154126,7 @@ index 99039e0..198dc6d 100644
elif e and v:
evr = '%s:%s' % (e, v)
elif v: # e and r etc. is just too weird to print
-@@ -4500,12 +5479,24 @@ class YumBase(depsolve.Depsolve):
+@@ -4500,12 +5473,24 @@ class YumBase(depsolve.Depsolve):
return returndict
@@ -154138,7 +154154,7 @@ index 99039e0..198dc6d 100644
old_conf_obs = self.conf.obsoletes
self.conf.obsoletes = False
done = False
-@@ -4515,19 +5506,46 @@ class YumBase(depsolve.Depsolve):
+@@ -4515,19 +5500,46 @@ class YumBase(depsolve.Depsolve):
done = True
for pkg in transaction.trans_data:
if pkg.state == 'Downgrade':
@@ -154185,7 +154201,7 @@ index 99039e0..198dc6d 100644
if self.install(pkgtup=pkg.pkgtup):
done = True
for pkg in transaction.trans_data:
-@@ -4538,8 +5556,14 @@ class YumBase(depsolve.Depsolve):
+@@ -4538,8 +5550,14 @@ class YumBase(depsolve.Depsolve):
return done
def history_undo(self, transaction):
@@ -154202,7 +154218,7 @@ index 99039e0..198dc6d 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 +5640,7 @@ class YumBase(depsolve.Depsolve):
+@@ -4616,7 +5634,7 @@ class YumBase(depsolve.Depsolve):
except urlgrabber.grabber.URLGrabError, e:
raise Errors.YumBaseError(_('GPG key retrieval failed: ') +
@@ -154211,7 +154227,7 @@ index 99039e0..198dc6d 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 +5673,7 @@ class YumBase(depsolve.Depsolve):
+@@ -4649,7 +5667,7 @@ class YumBase(depsolve.Depsolve):
keys_info = misc.getgpgkeyinfo(rawkey, multiple=True)
except ValueError, e:
raise Errors.YumBaseError(_('Invalid GPG Key from %s: %s') %
@@ -154220,7 +154236,7 @@ index 99039e0..198dc6d 100644
keys = []
for keyinfo in keys_info:
thiskey = {}
-@@ -4674,39 +5698,49 @@ class YumBase(depsolve.Depsolve):
+@@ -4674,39 +5692,49 @@ class YumBase(depsolve.Depsolve):
if pkgs:
pkgs = sorted(pkgs)[-1]
msg = (_('Importing %s key 0x%s:\n'
@@ -154288,7 +154304,7 @@ index 99039e0..198dc6d 100644
user_cb_fail = False
for keyurl in keyurls:
keys = self._retrievePublicKey(keyurl, repo)
-@@ -4725,7 +5759,9 @@ class YumBase(depsolve.Depsolve):
+@@ -4725,7 +5753,9 @@ class YumBase(depsolve.Depsolve):
# Try installing/updating GPG key
self._getKeyImportMessage(info, keyurl)
rc = False
@@ -154299,7 +154315,7 @@ index 99039e0..198dc6d 100644
rc = True
# grab the .sig/.asc for the keyurl, if it exists
-@@ -4751,8 +5787,8 @@ class YumBase(depsolve.Depsolve):
+@@ -4751,8 +5781,8 @@ class YumBase(depsolve.Depsolve):
ts = self.rpmdb.readOnlyTS()
result = ts.pgpImportPubkey(misc.procgpgkey(info['raw_key']))
if result != 0:
@@ -154310,7 +154326,7 @@ index 99039e0..198dc6d 100644
self.logger.info(_('Key imported successfully'))
key_installed = True
-@@ -4760,18 +5796,20 @@ class YumBase(depsolve.Depsolve):
+@@ -4760,18 +5790,20 @@ class YumBase(depsolve.Depsolve):
raise Errors.YumBaseError, _("Didn't install any keys")
if not key_installed:
@@ -154336,7 +154352,7 @@ index 99039e0..198dc6d 100644
def _getAnyKeyForRepo(self, repo, destdir, keyurl_list, is_cakey=False, callback=None):
"""
-@@ -4788,6 +5826,18 @@ class YumBase(depsolve.Depsolve):
+@@ -4788,6 +5820,18 @@ class YumBase(depsolve.Depsolve):
"""
key_installed = False
@@ -154355,7 +154371,7 @@ index 99039e0..198dc6d 100644
user_cb_fail = False
for keyurl in keyurl_list:
keys = self._retrievePublicKey(keyurl, repo, getSig=not is_cakey)
-@@ -4819,8 +5869,11 @@ class YumBase(depsolve.Depsolve):
+@@ -4819,8 +5863,11 @@ class YumBase(depsolve.Depsolve):
if not key_installed:
self._getKeyImportMessage(info, keyurl, keytype)
rc = False
@@ -154368,7 +154384,7 @@ index 99039e0..198dc6d 100644
elif callback:
rc = callback({"repo": repo, "userid": info['userid'],
"hexkeyid": info['hexkeyid'], "keyurl": keyurl,
-@@ -4835,7 +5888,8 @@ class YumBase(depsolve.Depsolve):
+@@ -4835,7 +5882,8 @@ class YumBase(depsolve.Depsolve):
# Import the key
result = misc.import_key_to_pubring(info['raw_key'], info['hexkeyid'], gpgdir=destdir)
if not result:
@@ -154378,7 +154394,7 @@ index 99039e0..198dc6d 100644
self.logger.info(_('Key imported successfully'))
key_installed = True
# write out the key id to imported_cakeys in the repos basedir
-@@ -4851,36 +5905,35 @@ class YumBase(depsolve.Depsolve):
+@@ -4851,36 +5899,35 @@ class YumBase(depsolve.Depsolve):
pass
if not key_installed and user_cb_fail:
@@ -154431,7 +154447,7 @@ index 99039e0..198dc6d 100644
self._getAnyKeyForRepo(repo, repo.gpgcadir, repo.gpgcakey, is_cakey=True, callback=callback)
def _limit_installonly_pkgs(self):
-@@ -4927,6 +5980,7 @@ class YumBase(depsolve.Depsolve):
+@@ -4927,6 +5974,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)
@@ -154439,7 +154455,7 @@ index 99039e0..198dc6d 100644
for m in self.tsInfo.getMembers():
if m.ts_state not in ('i', 'u'):
continue
-@@ -4937,12 +5991,21 @@ class YumBase(depsolve.Depsolve):
+@@ -4937,12 +5985,21 @@ class YumBase(depsolve.Depsolve):
if not po_names.intersection(install_only_names):
continue
@@ -154465,7 +154481,7 @@ index 99039e0..198dc6d 100644
for po in installed:
if (po.version, po.release) == (cur_kernel_v, cur_kernel_r):
# don't remove running
-@@ -4959,19 +6022,22 @@ class YumBase(depsolve.Depsolve):
+@@ -4959,19 +6016,22 @@ class YumBase(depsolve.Depsolve):
txmbr.depends_on.append(rel)
def processTransaction(self, callback=None,rpmTestDisplay=None, rpmDisplay=None):
@@ -154501,7 +154517,7 @@ index 99039e0..198dc6d 100644
if not callback:
callback = callbacks.ProcessTransNoOutputCallback()
-@@ -5114,13 +6180,19 @@ class YumBase(depsolve.Depsolve):
+@@ -5114,13 +6174,19 @@ class YumBase(depsolve.Depsolve):
return results
def add_enable_repo(self, repoid, baseurls=[], mirrorlist=None, **kwargs):
@@ -154528,7 +154544,7 @@ index 99039e0..198dc6d 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 +6239,15 @@ class YumBase(depsolve.Depsolve):
+@@ -5167,9 +6233,15 @@ class YumBase(depsolve.Depsolve):
def setCacheDir(self, force=False, tmpdir=None, reuse=True,
suffix='/$basearch/$releasever'):
@@ -154547,7 +154563,7 @@ index 99039e0..198dc6d 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 +6257,7 @@ class YumBase(depsolve.Depsolve):
+@@ -5179,7 +6251,7 @@ class YumBase(depsolve.Depsolve):
try:
cachedir = misc.getCacheDir(tmpdir, reuse)
except (IOError, OSError), e:
@@ -154556,7 +154572,7 @@ index 99039e0..198dc6d 100644
cachedir = None
if cachedir is None:
-@@ -5190,6 +6268,7 @@ class YumBase(depsolve.Depsolve):
+@@ -5190,6 +6262,7 @@ class YumBase(depsolve.Depsolve):
self.prerepoconf.cachedir = cachedir
else:
self.repos.setCacheDir(cachedir)
@@ -154564,7 +154580,7 @@ index 99039e0..198dc6d 100644
self.conf.cachedir = cachedir
return True # We got a new cache dir
-@@ -5220,13 +6299,24 @@ class YumBase(depsolve.Depsolve):
+@@ -5220,13 +6293,24 @@ class YumBase(depsolve.Depsolve):
self.history.write_addon_data('config-repos', myrepos)
def verify_plugins_cb(self, verify_package):
@@ -154592,7 +154608,7 @@ index 99039e0..198dc6d 100644
if self.tsInfo._unresolvedMembers:
if auto:
self.logger.critical(_("Dependencies not solved. Will not save unresolved transaction."))
-@@ -5234,7 +6324,7 @@ class YumBase(depsolve.Depsolve):
+@@ -5234,7 +6318,7 @@ class YumBase(depsolve.Depsolve):
raise Errors.YumBaseError(_("Dependencies not solved. Will not save unresolved transaction."))
if not filename:
@@ -154601,7 +154617,7 @@ index 99039e0..198dc6d 100644
fd,filename = tempfile.mkstemp(suffix='.yumtx', prefix=prefix)
f = os.fdopen(fd, 'w')
else:
-@@ -5244,13 +6334,17 @@ class YumBase(depsolve.Depsolve):
+@@ -5244,13 +6328,17 @@ class YumBase(depsolve.Depsolve):
msg = "%s\n" % self.rpmdb.simpleVersion(main_only=True)[0]
msg += "%s\n" % self.ts.getTsFlags()
@@ -154622,7 +154638,7 @@ index 99039e0..198dc6d 100644
msg += "%s\n" % len(self.tsInfo.getMembers())
for txmbr in self.tsInfo.getMembers():
msg += txmbr._dump()
-@@ -5260,13 +6354,25 @@ class YumBase(depsolve.Depsolve):
+@@ -5260,13 +6348,25 @@ class YumBase(depsolve.Depsolve):
except (IOError, OSError), e:
self._ts_save_file = None
if auto:
@@ -154654,7 +154670,7 @@ index 99039e0..198dc6d 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 +6382,45 @@ class YumBase(depsolve.Depsolve):
+@@ -5276,26 +6376,45 @@ class YumBase(depsolve.Depsolve):
try:
data = open(filename, 'r').readlines()
except (IOError, OSError), e:
@@ -154702,7 +154718,7 @@ index 99039e0..198dc6d 100644
if ignorerpm:
msg += _(" ignoring, as requested.")
self.logger.critical(_(msg))
-@@ -5318,8 +6443,17 @@ class YumBase(depsolve.Depsolve):
+@@ -5318,8 +6437,17 @@ class YumBase(depsolve.Depsolve):
numrepos = int(data[2].strip())
repos = []
rindex=3+numrepos
@@ -154721,7 +154737,7 @@ index 99039e0..198dc6d 100644
# pkgs/txmbrs
numpkgs = int(data[rindex].strip())
-@@ -5329,6 +6463,7 @@ class YumBase(depsolve.Depsolve):
+@@ -5329,6 +6457,7 @@ class YumBase(depsolve.Depsolve):
pkgcount = 0
pkgprob = False
curpkg = None
@@ -154729,7 +154745,22 @@ index 99039e0..198dc6d 100644
for l in data[pkgstart:]:
l = l.rstrip()
# our main txmbrs
-@@ -5438,6 +6573,11 @@ class YumBase(depsolve.Depsolve):
+@@ -5356,6 +6485,7 @@ class YumBase(depsolve.Depsolve):
+ if not ignoremissing:
+ raise Errors.YumBaseError(msg)
+ else:
++ ignorenewrpm = True
+ self.logger.critical(msg)
+ else:
+ pkgcount += 1
+@@ -5432,12 +6562,18 @@ class YumBase(depsolve.Depsolve):
+ if pkgprob:
+ msg = _("Transaction members, relations are missing or ts has been modified,")
+ if ignoremissing:
++ ignorenewrpm = True
+ msg += _(" ignoring, as requested. You must redepsolve!")
+ self.logger.critical(msg)
+ else:
msg += _(" aborting.")
raise Errors.YumBaseError(msg)
@@ -154741,7 +154772,7 @@ index 99039e0..198dc6d 100644
return self.tsInfo.getMembers()
def _remove_old_deps(self):
-@@ -5470,18 +6610,6 @@ class YumBase(depsolve.Depsolve):
+@@ -5470,18 +6606,6 @@ class YumBase(depsolve.Depsolve):
if requiring == required: # if they are self-requiring skip them
continue
@@ -154760,7 +154791,7 @@ index 99039e0..198dc6d 100644
#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 +6661,24 @@ class YumBase(depsolve.Depsolve):
+@@ -5533,7 +6657,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
@@ -154785,7 +154816,7 @@ index 99039e0..198dc6d 100644
visited[curpkg] = True
all_leaves_visited = True
leaves = curpkg.requiring_packages()
-@@ -5547,4 +6692,3 @@ class YumBase(depsolve.Depsolve):
+@@ -5547,4 +6688,3 @@ class YumBase(depsolve.Depsolve):
# Debugging output
self.verbose_logger.log(logginglevels.DEBUG_2, _("%s has no user-installed revdeps."), pkg)
return False
@@ -157735,7 +157766,7 @@ index aaa4f25..61aa586 100755
continue
diff --git a/yum/misc.py b/yum/misc.py
-index 2f6ddfe..43f34f8 100644
+index 2f6ddfe..0fd3e90 100644
--- a/yum/misc.py
+++ b/yum/misc.py
@@ -8,6 +8,7 @@ import os
@@ -157872,15 +157903,19 @@ index 2f6ddfe..43f34f8 100644
return out
-@@ -1126,6 +1163,8 @@ def repo_gen_decompress(filename, generated_name, cached=False):
- dest = os.path.dirname(filename)
- dest += '/gen'
- if not os.path.exists(dest):
-+ if cached:
-+ return None
- os.makedirs(dest, mode=0755)
- dest += '/' + generated_name
+@@ -1123,11 +1160,7 @@ def repo_gen_decompress(filename, generated_name, cached=False):
+ """ This is a wrapper around decompress, where we work out a cached
+ generated name, and use check_timestamps. filename _must_ be from
+ a repo. and generated_name is the type of the file. """
+- dest = os.path.dirname(filename)
+- dest += '/gen'
+- if not os.path.exists(dest):
+- os.makedirs(dest, mode=0755)
+- dest += '/' + generated_name
++ dest = os.path.dirname(filename) + '/gen/' + generated_name
return decompress(filename, dest=dest, check_timestamps=True,fn_only=cached)
+
+ def read_in_items_from_dot_dir(thisglob, line_as_list=True):
diff --git a/yum/packageSack.py b/yum/packageSack.py
index 4af563a..47832fc 100644
--- a/yum/packageSack.py
@@ -159046,7 +159081,7 @@ index e289a7a..a4da4ab 100644
raise AttributeError, "%s has no attribute %s" % (self, attr)
diff --git a/yum/rpmtrans.py b/yum/rpmtrans.py
-index 9b265f9..61c9a0e 100644
+index 9b265f9..74a0f3f 100644
--- a/yum/rpmtrans.py
+++ b/yum/rpmtrans.py
@@ -119,7 +119,11 @@ class RPMBaseCallback:
@@ -159100,8 +159135,11 @@ index 9b265f9..61c9a0e 100644
def _transStart(self, bytes, total, h):
-@@ -621,3 +638,16 @@ class RPMTransaction:
+@@ -619,5 +636,19 @@ class RPMTransaction:
+ msg = ("Non-fatal %s scriptlet failure in rpm package %s" %
+ (scriptlet_name, package_name))
self.display.errorlog(msg)
++ self._scriptout(package_name)
# FIXME - what else should we do here? raise a failure and abort?
+ def _scriptStart(self, bytes, total, h):
@@ -159402,7 +159440,7 @@ index 2cb1acb..0586c1c 100644
for pkg in un['pkglist']:
for filedata in pkg['packages']:
diff --git a/yum/yumRepo.py b/yum/yumRepo.py
-index e5e9ece..b057961 100644
+index e5e9ece..9b9cc72 100644
--- a/yum/yumRepo.py
+++ b/yum/yumRepo.py
@@ -20,10 +20,12 @@ import time
@@ -159715,6 +159753,15 @@ index e5e9ece..b057961 100644
'http_headers': tuple(self.__headersListFromDict(cache=cache)),
'ssl_verify_peer': self.sslverify,
'ssl_verify_host': self.sslverify,
+@@ -561,7 +660,7 @@ class YumRepository(Repository, config.RepoConf):
+ cookie = self.cachedir + '/' + self.metadata_cookie_fn
+ self.setAttribute('_dir_setup_metadata_cookie', cookie)
+
+- for dir in [self.cachedir, self.pkgdir]:
++ for dir in [self.cachedir, self.cachedir + '/gen', self.pkgdir]:
+ self._dirSetupMkdir_p(dir)
+
+ # persistdir is really root-only but try the make anyway and just
@@ -714,15 +813,15 @@ class YumRepository(Repository, config.RepoConf):
local = self.metalink_filename + '.tmp'
if not self._metalinkCurrent():
@@ -159837,13 +159884,16 @@ index e5e9ece..b057961 100644
remote = package.relativepath
local = package.localPkg()
basepath = package.basepath
-@@ -857,15 +975,26 @@ class YumRepository(Repository, config.RepoConf):
+@@ -857,15 +975,29 @@ class YumRepository(Repository, config.RepoConf):
return local
misc.unlink_f(local)
- return self._getFile(url=basepath,
+ if checkfunc is None:
-+ checkfunc = lambda obj: package.verifyLocalPkg()
++ def checkfunc(obj):
++ if not package.verifyLocalPkg():
++ misc.unlink_f(local)
++ raise URLGrabError(-1, _('Package does not match intended download.'))
+
+ ret = self._getFile(url=basepath,
relative=remote,
@@ -159865,7 +159915,7 @@ index e5e9ece..b057961 100644
def getHeader(self, package, checkfunc = None, reget = 'simple',
cache = True):
-@@ -991,7 +1120,7 @@ class YumRepository(Repository, config.RepoConf):
+@@ -991,7 +1123,7 @@ class YumRepository(Repository, config.RepoConf):
def _cachingRepoXML(self, local):
""" Should we cache the current repomd.xml """
if self.cache and not os.path.exists(local):
@@ -159874,7 +159924,7 @@ index e5e9ece..b057961 100644
if self.cache or self.metadataCurrent():
return True
return False
-@@ -1020,7 +1149,7 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1020,7 +1152,7 @@ class YumRepository(Repository, config.RepoConf):
if grab_can_fail:
return None
raise Errors.RepoError, 'Error downloading file %s: %s' % (local, e)
@@ -159883,7 +159933,7 @@ index e5e9ece..b057961 100644
misc.unlink_f(tfname)
if grab_can_fail:
return None
-@@ -1047,7 +1176,7 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1047,7 +1179,7 @@ class YumRepository(Repository, config.RepoConf):
parse_can_fail = 'old_repo_XML' in self._oldRepoMDData
if parse_can_fail:
return None
@@ -159892,7 +159942,7 @@ index e5e9ece..b057961 100644
def _saveOldRepoXML(self, local):
""" If we have an older repomd.xml file available, save it out. """
-@@ -1074,7 +1203,7 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1074,7 +1206,7 @@ class YumRepository(Repository, config.RepoConf):
# We still want the old data, so we don't download twice. So we
# pretend everything is good until the revert.
if not self.timestamp_check:
@@ -159901,7 +159951,7 @@ index e5e9ece..b057961 100644
if 'old_repo_XML' not in self._oldRepoMDData:
self._oldRepoMDData = {}
-@@ -1260,6 +1389,9 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1260,6 +1392,9 @@ class YumRepository(Repository, config.RepoConf):
return True
def _check_db_version(self, mdtype, repoXML=None):
@@ -159911,7 +159961,7 @@ index e5e9ece..b057961 100644
if repoXML is None:
repoXML = self.repoXML
if mdtype in repoXML.repoData:
-@@ -1277,11 +1409,11 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1277,11 +1412,11 @@ class YumRepository(Repository, config.RepoConf):
return None
if not file_check:
@@ -159926,7 +159976,7 @@ index e5e9ece..b057961 100644
if not os.path.exists(local):
local = misc.decompress(local, fn_only=True)
compressed = True
-@@ -1302,6 +1434,17 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1302,6 +1437,17 @@ class YumRepository(Repository, config.RepoConf):
into the delete list, this means metadata can change filename
without us leaking it. """
@@ -159944,7 +159994,7 @@ index e5e9ece..b057961 100644
def _mdtype_eq(omdtype, odata, nmdtype, ndata):
""" Check if two returns from _get_mdtype_data() are equal. """
if ndata is None:
-@@ -1321,6 +1464,14 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1321,6 +1467,14 @@ class YumRepository(Repository, config.RepoConf):
return True
all_mdtypes = self.retrieved.keys()
@@ -159959,7 +160009,7 @@ index e5e9ece..b057961 100644
if mdtypes is None:
mdtypes = all_mdtypes
-@@ -1333,8 +1484,7 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1333,8 +1487,7 @@ class YumRepository(Repository, config.RepoConf):
# Inited twice atm. ... sue me
self._oldRepoMDData['new_MD_files'] = []
@@ -159969,7 +160019,7 @@ index e5e9ece..b057961 100644
for mdtype in all_mdtypes:
(nmdtype, ndata) = self._get_mdtype_data(mdtype)
-@@ -1371,43 +1521,16 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1371,43 +1524,16 @@ class YumRepository(Repository, config.RepoConf):
# No old repomd data, but we might still have uncompressed MD
if self._groupCheckDataMDValid(ndata, nmdtype, mdtype):
continue
@@ -160018,7 +160068,7 @@ index e5e9ece..b057961 100644
def _groupLoadRepoXML(self, text=None, mdtypes=None):
""" Retrieve the new repomd.xml from the repository, then check it
-@@ -1421,7 +1544,7 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1421,7 +1547,7 @@ class YumRepository(Repository, config.RepoConf):
self._commonRetrieveDataMD(mdtypes)
def _mdpolicy2mdtypes(self):
@@ -160027,7 +160077,7 @@ index e5e9ece..b057961 100644
'group:primary' : ['primary'],
'group:small' : ["primary", "updateinfo"],
'group:main' : ["primary", "group", "filelists",
-@@ -1436,6 +1559,7 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1436,6 +1562,7 @@ class YumRepository(Repository, config.RepoConf):
if not mdtypes or 'group:all' in mdtypes:
mdtypes = None
else:
@@ -160035,7 +160085,7 @@ index e5e9ece..b057961 100644
mdtypes = sorted(list(mdtypes))
return mdtypes
-@@ -1446,17 +1570,12 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1446,17 +1573,12 @@ class YumRepository(Repository, config.RepoConf):
except KeyboardInterrupt:
self._revertOldRepoXML() # Undo metadata cookie?
raise
@@ -160055,7 +160105,7 @@ index e5e9ece..b057961 100644
return self._repoXML
-@@ -1480,7 +1599,7 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1480,7 +1602,7 @@ class YumRepository(Repository, config.RepoConf):
result = self._getFile(relative='repodata/repomd.xml.asc',
copy_local=1,
local = sigfile,
@@ -160064,7 +160114,7 @@ index e5e9ece..b057961 100644
reget=None,
checkfunc=None,
cache=self.http_caching == 'all',
-@@ -1514,7 +1633,7 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1514,7 +1636,7 @@ class YumRepository(Repository, config.RepoConf):
return self._checkMD(fn, mdtype, openchecksum)
def _checkMD(self, fn, mdtype, openchecksum=False,
@@ -160073,7 +160123,7 @@ index e5e9ece..b057961 100644
""" Internal function, use .checkMD() from outside yum. """
thisdata = data # So the argument name is nicer
-@@ -1537,6 +1656,18 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1537,6 +1659,18 @@ class YumRepository(Repository, config.RepoConf):
if size is not None:
size = int(size)
@@ -160092,7 +160142,7 @@ index e5e9ece..b057961 100644
try: # get the local checksum
l_csum = self._checksum(r_ctype, file, datasize=size)
except Errors.RepoError, e:
-@@ -1551,15 +1682,13 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1551,15 +1685,13 @@ class YumRepository(Repository, config.RepoConf):
return None
raise URLGrabError(-1, 'Metadata file does not match checksum')
@@ -160109,7 +160159,7 @@ index e5e9ece..b057961 100644
""" Internal function, use .retrieveMD() from outside yum. """
# Note that this can raise Errors.RepoMDError if mdtype doesn't exist
# for this repo.
-@@ -1588,7 +1717,7 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1588,7 +1720,7 @@ class YumRepository(Repository, config.RepoConf):
else: # ain't there - raise
raise Errors.RepoError, \
"Caching enabled but no local cache of %s from %s" % (local,
@@ -160118,7 +160168,7 @@ index e5e9ece..b057961 100644
if (os.path.exists(local) or
self._preload_md_from_system_cache(os.path.basename(local))):
-@@ -1597,8 +1726,10 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1597,8 +1729,10 @@ class YumRepository(Repository, config.RepoConf):
return local # it's the same return the local one
try:
@@ -160131,7 +160181,7 @@ index e5e9ece..b057961 100644
if thisdata.size is None:
reget = None
else:
-@@ -1613,8 +1744,9 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1613,8 +1747,9 @@ class YumRepository(Repository, config.RepoConf):
checkfunc=checkfunc,
text=text,
cache=self.http_caching == 'all',
@@ -160143,7 +160193,7 @@ index e5e9ece..b057961 100644
if retrieve_can_fail:
return None
raise
-@@ -1622,9 +1754,8 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1622,9 +1757,8 @@ class YumRepository(Repository, config.RepoConf):
if retrieve_can_fail:
return None
raise Errors.RepoError, \
@@ -160154,7 +160204,7 @@ index e5e9ece..b057961 100644
return local
-@@ -1646,13 +1777,21 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1646,13 +1780,21 @@ class YumRepository(Repository, config.RepoConf):
def getGroups(self):
"""gets groups and returns group file path for the repository, if there
@@ -160179,7 +160229,7 @@ index e5e9ece..b057961 100644
self._callbacks_changed = True
def setFailureObj(self, failure_obj):
-@@ -1681,7 +1820,7 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1681,7 +1823,7 @@ class YumRepository(Repository, config.RepoConf):
print "Could not read mirrorlist %s, error was \n%s" %(url, e)
content = []
for line in content:
@@ -160188,7 +160238,7 @@ index e5e9ece..b057961 100644
continue
mirror = line.rstrip() # no more trailing \n's
mirror = mirror.replace('$ARCH', '$BASEARCH')
-@@ -1713,7 +1852,7 @@ class YumRepository(Repository, config.RepoConf):
+@@ -1713,7 +1855,7 @@ class YumRepository(Repository, config.RepoConf):
ugopts = self._default_grabopts()
try:
fo = urlgrabber.grabber.urlopen(url, **ugopts)
@@ -160197,7 +160247,7 @@ index e5e9ece..b057961 100644
print "Could not retrieve mirrorlist %s error was\n%s: %s" % (url, e.args[0], misc.to_unicode(e.args[1]))
fo = None
-@@ -1877,7 +2016,7 @@ def getMirrorList(mirrorlist, pdict = None):
+@@ -1877,7 +2019,7 @@ def getMirrorList(mirrorlist, pdict = None):
try:
fo = urlresolver.urlopen(url, proxies=pdict)
diff --git a/yum.spec b/yum.spec
index f432d12..7a6fd86 100644
--- a/yum.spec
+++ b/yum.spec
@@ -18,7 +18,7 @@
Summary: RPM package installer/updater/manager
Name: yum
Version: 3.4.3
-Release: 44%{?dist}
+Release: 45%{?dist}
License: GPLv2+
Group: System Environment/Base
Source0: http://yum.baseurl.org/download/3.4/%{name}-%{version}.tar.gz
@@ -315,6 +315,15 @@ exit 0
%endif
%changelog
+* Tue Oct 2 2012 Zdenek Pavlas <zpavlas at redhat.com> - 3.4.3-45
+- update to latest HEAD.
+- Don't skip loadts new rpmdbv check, when transaction changes. BZ 857961
+- Set ignorenewrpm to True, not False, to get it to ignore. BZ 858205.
+- Actually use verifyLocalPkg(). Helps BZ 858632.
+- Display script output when transaction fails. BZ 856969
+- Avoid mkdir repodir/gen/gen in misc.decompress()
+- completion helper: Handle ConfigError. BZ 861264.
+
* Wed Sep 12 2012 James Antill <james at fedoraproject.org> - 3.4.3-44
- update to latest HEAD.
- Write out groupid and not optionid, for environment groups.
More information about the scm-commits
mailing list