Compare commits
28 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6d0388921c | ||
|
|
605e507300 | ||
|
|
f14f2b26c6 | ||
|
|
c1c8e4faf3 | ||
|
|
eb9900ac1a | ||
|
|
1558c1c899 | ||
|
|
0c6bada47c | ||
|
|
56fa7022d4 | ||
|
|
89bc912db7 | ||
|
|
55dc3db0ee | ||
|
|
c4c6a002e6 | ||
|
|
31cab97c3b | ||
|
|
d7f313512e | ||
|
|
ec16d690a4 | ||
|
|
e33be8cea5 | ||
|
|
26a29d4ff7 | ||
|
|
583723b96a | ||
|
|
270f3be860 | ||
|
|
ddff029bb3 | ||
|
|
75057add79 | ||
|
|
7d4bfae15e | ||
|
|
91f6da803f | ||
|
|
3624839cc2 | ||
|
|
d98eeee7d8 | ||
|
|
1acc8e5e6d | ||
|
|
93fed308e2 | ||
|
|
1be1f4268b | ||
|
|
d5b7fb97da |
8 changed files with 1603 additions and 370 deletions
22
BZ-870691-repos-with-no-url.patch
Normal file
22
BZ-870691-repos-with-no-url.patch
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
commit 40d9d5f4c3a00b2efa6ee0b64fe4d1ec52d46a69
|
||||
Author: Zdeněk Pavlas <zpavlas@redhat.com>
|
||||
Date: Mon Oct 29 09:22:02 2012 +0100
|
||||
|
||||
ui_id: prevent TB on invalid repos with no URLs. BZ 870691.
|
||||
|
||||
diff --git a/yum/yumRepo.py b/yum/yumRepo.py
|
||||
index e362c43..414f1d9 100644
|
||||
--- a/yum/yumRepo.py
|
||||
+++ b/yum/yumRepo.py
|
||||
@@ -381,8 +381,10 @@ class YumRepository(Repository, config.RepoConf):
|
||||
val = ini['metalink']
|
||||
elif 'mirrorlist' in ini:
|
||||
val = ini['mirrorlist']
|
||||
- else:
|
||||
+ elif 'baseurl' in ini:
|
||||
val = ini['baseurl']
|
||||
+ else:
|
||||
+ val = ''
|
||||
ret = self.id
|
||||
if '$releasever' in val:
|
||||
ret += '/'
|
||||
208
BZ-881756-include-langpacks.patch
Normal file
208
BZ-881756-include-langpacks.patch
Normal file
|
|
@ -0,0 +1,208 @@
|
|||
From 6ef7823406da1e044ca188a9c96fe867a5e8c36f Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Mach <dmach@redhat.com>
|
||||
Date: Tue, 16 Oct 2012 07:10:13 -0400
|
||||
Subject: Include langpacks when reading and writing comps.
|
||||
|
||||
The <langpacks> comps section defines patterns used by the yum-langpacks plugin.
|
||||
We want to keep them when writing comps.
|
||||
---
|
||||
yum/comps.py | 93 +++++++++++++++++++++++++++++++++++++++++++++++++--------
|
||||
1 files changed, 80 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/yum/comps.py b/yum/comps.py
|
||||
index 4e765ef..fe5649d 100755
|
||||
--- a/yum/comps.py
|
||||
+++ b/yum/comps.py
|
||||
@@ -16,14 +16,14 @@
|
||||
|
||||
import types
|
||||
import sys
|
||||
-from constants import *
|
||||
-from Errors import CompsException
|
||||
+from yum.constants import *
|
||||
+from yum.Errors import CompsException
|
||||
#FIXME - compsexception isn't caught ANYWHERE so it's pointless to raise it
|
||||
# switch all compsexceptions to grouperrors after api break
|
||||
import fnmatch
|
||||
import re
|
||||
from yum.i18n import to_unicode
|
||||
-from misc import get_my_lang_code
|
||||
+from yum.misc import get_my_lang_code
|
||||
from yum.misc import cElementTree_iterparse as iterparse
|
||||
|
||||
lang_attr = '{http://www.w3.org/XML/1998/namespace}lang'
|
||||
@@ -281,7 +281,6 @@ class Group(CompsObj):
|
||||
|
||||
return msg
|
||||
|
||||
-
|
||||
class Environment(CompsObj):
|
||||
""" Environment object parsed from group data in each repo, and merged """
|
||||
|
||||
@@ -512,13 +511,61 @@ class Category(CompsObj):
|
||||
msg += """ </category>\n"""
|
||||
|
||||
return msg
|
||||
-
|
||||
+
|
||||
+class Langpacks(CompsObj):
|
||||
+ def __init__(self, elem=None):
|
||||
+ self.langpacks = []
|
||||
+ self.name = "" # prevent CompsObj.__str__() throwing an AttributeError
|
||||
+ if elem is not None:
|
||||
+ self.parse(elem)
|
||||
+
|
||||
+ def __getitem__(self, indx):
|
||||
+ return self.langpacks[indx]
|
||||
+
|
||||
+ def __iter__(self):
|
||||
+ for i in self.langpacks:
|
||||
+ yield i
|
||||
+
|
||||
+ def __len__(self):
|
||||
+ return len(self.langpacks)
|
||||
+
|
||||
+ def add(self, name, install):
|
||||
+ langpack = {
|
||||
+ "name": name,
|
||||
+ "install": install,
|
||||
+ }
|
||||
+ self.langpacks.append(langpack)
|
||||
+
|
||||
+ def parse(self, elem):
|
||||
+ for child in elem:
|
||||
+ if child.tag == "match":
|
||||
+ langpack = {
|
||||
+ "name": child.attrib.get("name"),
|
||||
+ "install": child.attrib.get("install"),
|
||||
+ }
|
||||
+ self.langpacks.append(langpack)
|
||||
+ else:
|
||||
+ raise CompsException("Unexpected element in <langpacks>: %s" % child.tag)
|
||||
+
|
||||
+ self.name = elem.attrib.get("name")
|
||||
+ self.install = elem.attrib.get("install")
|
||||
+
|
||||
+ def xml(self):
|
||||
+ """write out an xml stanza for the Langpacks object"""
|
||||
+ if not self.langpacks:
|
||||
+ return ''
|
||||
+ msg = ' <langpacks>\n'
|
||||
+ for i in self:
|
||||
+ msg += ' <match name="%s" install="%s"/>\n' % (i["name"], i["install"])
|
||||
+ msg += ' </langpacks>\n'
|
||||
+ return msg
|
||||
|
||||
class Comps(object):
|
||||
def __init__(self, overwrite_groups=False):
|
||||
self._groups = {}
|
||||
self._environments = {}
|
||||
self._categories = {}
|
||||
+ self._langpacks = Langpacks()
|
||||
self.compscount = 0
|
||||
self.overwrite_groups = overwrite_groups
|
||||
self.compiled = False # have groups been compiled into avail/installed
|
||||
@@ -529,7 +576,7 @@ class Comps(object):
|
||||
grps = self._groups.values()
|
||||
grps.sort(key=lambda x: (x.display_order, x.name))
|
||||
return grps
|
||||
-
|
||||
+
|
||||
def get_environments(self):
|
||||
environments = self._environments.values()
|
||||
environments.sort(key=lambda x: (x.display_order, x.name))
|
||||
@@ -539,10 +586,14 @@ class Comps(object):
|
||||
cats = self._categories.values()
|
||||
cats.sort(key=lambda x: (x.display_order, x.name))
|
||||
return cats
|
||||
+
|
||||
+ def get_langpacks(self):
|
||||
+ return self._langpacks
|
||||
|
||||
groups = property(get_groups)
|
||||
environments = property(get_environments)
|
||||
categories = property(get_categories)
|
||||
+ langpacks = property(get_langpacks)
|
||||
|
||||
def has_group(self, grpid):
|
||||
exists = self.return_groups(grpid)
|
||||
@@ -703,6 +754,9 @@ class Comps(object):
|
||||
else:
|
||||
self._categories[category.categoryid] = category
|
||||
|
||||
+ def add_langpack(self, name, install):
|
||||
+ self._langpacks.add(name, install)
|
||||
+
|
||||
def add(self, srcfile = None):
|
||||
if not srcfile:
|
||||
raise CompsException
|
||||
@@ -732,6 +786,8 @@ class Comps(object):
|
||||
if elem.tag == "category":
|
||||
category = Category(elem)
|
||||
self.add_category(category)
|
||||
+ if elem.tag == "langpacks":
|
||||
+ self._langpacks.parse(elem)
|
||||
except SyntaxError, e:
|
||||
raise CompsException, "comps file is empty/damaged"
|
||||
|
||||
@@ -791,7 +847,7 @@ class Comps(object):
|
||||
"""returns the xml of the comps files in this class, merged"""
|
||||
|
||||
if not self._groups and not self._categories and \
|
||||
- not self._environments:
|
||||
+ not self._environments and not len(self._langpacks):
|
||||
return ""
|
||||
|
||||
msg = """<?xml version="1.0" encoding="UTF-8"?>
|
||||
@@ -805,7 +861,7 @@ class Comps(object):
|
||||
msg += c.xml()
|
||||
for e in self.get_environments():
|
||||
msg += e.xml()
|
||||
-
|
||||
+ msg += self.get_langpacks().xml()
|
||||
msg += """\n</comps>\n"""
|
||||
|
||||
return msg
|
||||
@@ -820,23 +876,34 @@ def main():
|
||||
for srcfile in sys.argv[1:]:
|
||||
p.add(srcfile)
|
||||
|
||||
+ print
|
||||
+ print "===== GROUPS ====="
|
||||
for group in p.groups:
|
||||
- print group
|
||||
+ print "%s (id: %s)" % (group, group.groupid)
|
||||
for pkg in group.packages:
|
||||
print ' ' + pkg
|
||||
-
|
||||
+
|
||||
+ print
|
||||
+ print "===== ENVIRONMENTS ====="
|
||||
for environment in p.environments:
|
||||
- print environment.name
|
||||
+ print "%s (id: %s)" % (environment.name, environment.environmentid)
|
||||
for group in environment.groups:
|
||||
print ' ' + group
|
||||
for group in environment.options:
|
||||
print ' *' + group
|
||||
|
||||
+ print
|
||||
+ print "===== CATEGORIES ====="
|
||||
for category in p.categories:
|
||||
- print category.name
|
||||
+ print "%s (id: %s)" % (category.name, category.categoryid)
|
||||
for group in category.groups:
|
||||
print ' ' + group
|
||||
-
|
||||
+
|
||||
+ print
|
||||
+ print "===== LANGPACKS ====="
|
||||
+ for langpack in p.langpacks:
|
||||
+ print ' %s (%s)' % (langpack["name"], langpack["install"])
|
||||
+
|
||||
except IOError:
|
||||
print >> sys.stderr, "newcomps.py: No such file:\'%s\'" % sys.argv[1]
|
||||
sys.exit(1)
|
||||
--
|
||||
1.7.4.4
|
||||
|
||||
20
BZ-885139-not-enough-arguments.patch
Normal file
20
BZ-885139-not-enough-arguments.patch
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
commit 4687ffe032c1a4060da3ef670301df06d0faeb32
|
||||
Author: Zdeněk Pavlas <zpavlas@redhat.com>
|
||||
Date: Mon Dec 10 08:55:41 2012 +0100
|
||||
|
||||
selectGroup(): Fix a typo. BZ 885139
|
||||
|
||||
diff --git a/yum/__init__.py b/yum/__init__.py
|
||||
index 6401645..63053af 100644
|
||||
--- a/yum/__init__.py
|
||||
+++ b/yum/__init__.py
|
||||
@@ -3692,7 +3692,8 @@ much more problems).
|
||||
if not upgrade and len(txmbrs_used) == old_txmbrs:
|
||||
self.logger.critical(_('Warning: Group %s does not have any packages to install.'), thisgroup.groupid)
|
||||
if count_cond_test:
|
||||
- self.logger.critical(_('Group %s does have %u conditional packages, which may get installed.'), count_cond_test)
|
||||
+ self.logger.critical(_('Group %s does have %u conditional packages, which may get installed.'),
|
||||
+ thisgroup.groupid, count_cond_test)
|
||||
return txmbrs_used
|
||||
|
||||
def deselectGroup(self, grpid, force=False):
|
||||
241
BZ-908870-MD-files-bad.patch
Normal file
241
BZ-908870-MD-files-bad.patch
Normal file
|
|
@ -0,0 +1,241 @@
|
|||
commit 83fcbe745c3ee8f5f0fa29626a86c824db059b22
|
||||
Author: James Antill <james@and.org>
|
||||
Date: Thu Feb 7 12:58:07 2013 -0500
|
||||
|
||||
Fix problems with mirrors like wtfnix.com, delete bad MD files.
|
||||
|
||||
diff --git a/yum/yumRepo.py b/yum/yumRepo.py
|
||||
index dfcf8f9..efbc42a 100644
|
||||
--- a/yum/yumRepo.py
|
||||
+++ b/yum/yumRepo.py
|
||||
@@ -940,6 +941,7 @@ Insufficient space in download directory %s
|
||||
range=(start, end),
|
||||
)
|
||||
except URLGrabError, e:
|
||||
+ self._del_dl_file(local, size)
|
||||
errstr = "failed to retrieve %s from %s\nerror was %s" % (relative, self, e)
|
||||
if self.mirrorurls:
|
||||
errstr +="\n You could try running: yum clean expire-cache"
|
||||
@@ -961,6 +963,7 @@ Insufficient space in download directory %s
|
||||
**kwargs
|
||||
)
|
||||
except URLGrabError, e:
|
||||
+ self._del_dl_file(local, size)
|
||||
errstr = "failure: %s from %s: %s" % (relative, self, e)
|
||||
errors = getattr(e, 'errors', None)
|
||||
raise Errors.NoMoreMirrorsRepoError(errstr, errors)
|
||||
@@ -1652,6 +1655,18 @@ Insufficient space in download directory %s
|
||||
raise URLGrabError(-1, 'repomd.xml does not match metalink for %s' %
|
||||
self)
|
||||
|
||||
+ def _del_dl_file(self, local, size):
|
||||
+ """ Delete a downloaded file if it's the correct size. """
|
||||
+
|
||||
+ sd = misc.stat_f(local)
|
||||
+ if not sd: # File doesn't exist...
|
||||
+ return
|
||||
+
|
||||
+ if size and sd.st_size < size:
|
||||
+ return # Still more to get...
|
||||
+
|
||||
+ # Is the correct size, or too big ... delete it so we'll try again.
|
||||
+ misc.unlink_f(local)
|
||||
|
||||
def checkMD(self, fn, mdtype, openchecksum=False):
|
||||
"""check the metadata type against its checksum"""
|
||||
@@ -1681,7 +1696,7 @@ Insufficient space in download directory %s
|
||||
if size is not None:
|
||||
size = int(size)
|
||||
|
||||
- if fast:
|
||||
+ if fast and skip_old_DBMD_check:
|
||||
fsize = misc.stat_f(file)
|
||||
if fsize is None: # File doesn't exist...
|
||||
return None
|
||||
@@ -1756,16 +1771,21 @@ Insufficient space in download directory %s
|
||||
|
||||
try:
|
||||
def checkfunc(obj):
|
||||
- self.checkMD(obj, mdtype)
|
||||
+ try:
|
||||
+ self.checkMD(obj, mdtype)
|
||||
+ except URLGrabError:
|
||||
+ # Don't share MD among mirrors, in theory we could use:
|
||||
+ # self._del_dl_file(local, int(thisdata.size))
|
||||
+ # ...but this is safer.
|
||||
+ misc.unlink_f(obj.filename)
|
||||
+ raise
|
||||
self.retrieved[mdtype] = 1
|
||||
text = "%s/%s" % (self, mdtype)
|
||||
if thisdata.size is None:
|
||||
reget = None
|
||||
else:
|
||||
reget = 'simple'
|
||||
- if os.path.exists(local):
|
||||
- if os.stat(local).st_size >= int(thisdata.size):
|
||||
- misc.unlink_f(local)
|
||||
+ self._del_dl_file(local, int(thisdata.size))
|
||||
local = self._getFile(relative=remote,
|
||||
local=local,
|
||||
copy_local=1,
|
||||
commit c148eb10b798270b3d15087433c8efb2a79a69d0
|
||||
Author: James Antill <james@and.org>
|
||||
Date: Mon Feb 18 16:17:06 2013 -0500
|
||||
|
||||
Use xattr data as well as file size for "fast checksumming".
|
||||
|
||||
diff --git a/yum/yumRepo.py b/yum/yumRepo.py
|
||||
index efbc42a..8c38093 100644
|
||||
--- a/yum/yumRepo.py
|
||||
+++ b/yum/yumRepo.py
|
||||
@@ -52,15 +52,54 @@ import stat
|
||||
import errno
|
||||
import tempfile
|
||||
|
||||
-# If you want yum to _always_ check the MD .sqlite files then set this to
|
||||
-# False (this doesn't affect .xml files or .sqilte files derived from them).
|
||||
-# With this as True yum will only check when a new repomd.xml or
|
||||
-# new MD is downloaded.
|
||||
-# Note that with atomic MD, we can't have old MD lying around anymore so
|
||||
-# the only way we need this check is if someone does something like:
|
||||
-# cp primary.sqlite /var/cache/yum/blah
|
||||
-# ...at which point you lose.
|
||||
-skip_old_DBMD_check = True
|
||||
+# This is unused now, probably nothing uses it but it was global/public.
|
||||
+skip_old_DBMD_check = False
|
||||
+
|
||||
+try:
|
||||
+ import xattr
|
||||
+ if not hasattr(xattr, 'get') or not hasattr(xattr, 'set'):
|
||||
+ xattr = None # This is a "newer" API.
|
||||
+except ImportError:
|
||||
+ xattr = None
|
||||
+
|
||||
+# The problem we are trying to solve here is that:
|
||||
+#
|
||||
+# 1. We rarely want to be downloading MD/pkgs/etc.
|
||||
+# 2. We want to check those files are valid (match checksums) when we do
|
||||
+# download them.
|
||||
+# 3. We _really_ don't want to checksum all the files everytime we
|
||||
+# run (100s of MBs).
|
||||
+# 4. We can continue to download files from bad mirrors, or retry files due to
|
||||
+# C-c etc.
|
||||
+#
|
||||
+# ...we used to solve this by just checking the file size, and assuming the
|
||||
+# files had been downloaded and checksumed as correct if that matched. But that
|
||||
+# was error prone on bad mirrors, so now we store the checksum in an
|
||||
+# xattr ... this does mean that if you can't store xattrs (Eg. NFS) you will
|
||||
+# rechecksum everything constantly.
|
||||
+
|
||||
+def _xattr_get_chksum(filename, chktype):
|
||||
+ if not xattr:
|
||||
+ return None
|
||||
+
|
||||
+ try:
|
||||
+ ret = xattr.get(filename, 'user.yum.checksum.' + chktype)
|
||||
+ except: # Documented to be "EnvironmentError", but make sure
|
||||
+ return None
|
||||
+
|
||||
+ return ret
|
||||
+
|
||||
+def _xattr_set_chksum(filename, chktype, chksum):
|
||||
+ if not xattr:
|
||||
+ return None
|
||||
+
|
||||
+ try:
|
||||
+ xattr.set(filename, 'user.yum.checksum.' + chktype, chksum)
|
||||
+ except:
|
||||
+ return False # Data too long. = IOError ... ignore everything.
|
||||
+
|
||||
+ return True
|
||||
+
|
||||
|
||||
warnings.simplefilter("ignore", Errors.YumFutureDeprecationWarning)
|
||||
|
||||
@@ -228,7 +267,7 @@ class YumPackageSack(packageSack.PackageSack):
|
||||
# get rid of all this stuff we don't need now
|
||||
del repo.cacheHandler
|
||||
|
||||
- def _check_uncompressed_db_gen(self, repo, mdtype, fast=True):
|
||||
+ def _check_uncompressed_db_gen(self, repo, mdtype):
|
||||
"""return file name of db in gen/ dir if good, None if not"""
|
||||
|
||||
mydbdata = repo.repoXML.getData(mdtype)
|
||||
@@ -238,7 +277,7 @@ class YumPackageSack(packageSack.PackageSack):
|
||||
db_un_fn = mdtype + '.sqlite'
|
||||
|
||||
if not repo._checkMD(compressed_fn, mdtype, data=mydbdata,
|
||||
- check_can_fail=fast, fast=fast):
|
||||
+ check_can_fail=True):
|
||||
return None
|
||||
|
||||
ret = misc.repo_gen_decompress(compressed_fn, db_un_fn,
|
||||
@@ -261,8 +300,7 @@ class YumPackageSack(packageSack.PackageSack):
|
||||
result = None
|
||||
|
||||
if os.path.exists(db_un_fn):
|
||||
- if skip_old_DBMD_check and repo._using_old_MD:
|
||||
- return db_un_fn
|
||||
+
|
||||
|
||||
try:
|
||||
repo.checkMD(db_un_fn, mdtype, openchecksum=True)
|
||||
@@ -296,7 +334,6 @@ class YumRepository(Repository, config.RepoConf):
|
||||
# eventually want
|
||||
self.repoMDFile = 'repodata/repomd.xml'
|
||||
self._repoXML = None
|
||||
- self._using_old_MD = None
|
||||
self._oldRepoMDData = {}
|
||||
self.cache = 0
|
||||
self.mirrorlistparsed = 0
|
||||
@@ -1407,7 +1444,6 @@ Insufficient space in download directory %s
|
||||
self._revertOldRepoXML()
|
||||
return False
|
||||
|
||||
- self._using_old_MD = caching
|
||||
if caching:
|
||||
return False # Skip any work.
|
||||
|
||||
@@ -1673,7 +1709,7 @@ Insufficient space in download directory %s
|
||||
return self._checkMD(fn, mdtype, openchecksum)
|
||||
|
||||
def _checkMD(self, fn, mdtype, openchecksum=False,
|
||||
- data=None, check_can_fail=False, fast=False):
|
||||
+ data=None, check_can_fail=False):
|
||||
""" Internal function, use .checkMD() from outside yum. """
|
||||
|
||||
thisdata = data # So the argument name is nicer
|
||||
@@ -1696,17 +1732,15 @@ Insufficient space in download directory %s
|
||||
if size is not None:
|
||||
size = int(size)
|
||||
|
||||
- if fast and skip_old_DBMD_check:
|
||||
+ l_csum = _xattr_get_chksum(file, r_ctype)
|
||||
+ if l_csum:
|
||||
fsize = misc.stat_f(file)
|
||||
- if fsize is None: # File doesn't exist...
|
||||
- return None
|
||||
- if size is None:
|
||||
- return 1
|
||||
- if size == fsize.st_size:
|
||||
- return 1
|
||||
- if check_can_fail:
|
||||
- return None
|
||||
- raise URLGrabError(-1, 'Metadata file does not match size')
|
||||
+ if fsize is not None: # We just got an xattr, so it should be there
|
||||
+ if size is None and l_csum == r_csum:
|
||||
+ return 1
|
||||
+ if size == fsize.st_size and l_csum == r_csum:
|
||||
+ return 1
|
||||
+ # Anything goes wrong, run the checksums as normal...
|
||||
|
||||
try: # get the local checksum
|
||||
l_csum = self._checksum(r_ctype, file, datasize=size)
|
||||
@@ -1716,6 +1750,7 @@ Insufficient space in download directory %s
|
||||
raise URLGrabError(-3, 'Error performing checksum')
|
||||
|
||||
if l_csum == r_csum:
|
||||
+ _xattr_set_chksum(file, r_ctype, l_csum)
|
||||
return 1
|
||||
else:
|
||||
if check_can_fail:
|
||||
34
BZ-920758-keep-installedFileRequires-inc-sync.patch
Normal file
34
BZ-920758-keep-installedFileRequires-inc-sync.patch
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
diff -up yum-3.4.3/yum/depsolve.py.old yum-3.4.3/yum/depsolve.py
|
||||
--- yum-3.4.3/yum/depsolve.py.old 2013-04-04 18:21:22.477786494 +0200
|
||||
+++ yum-3.4.3/yum/depsolve.py 2013-04-04 18:22:48.742547795 +0200
|
||||
@@ -918,6 +918,9 @@ class Depsolve(object):
|
||||
self._last_req = None
|
||||
self.pkgSack.delPackage(otxmbr.po)
|
||||
self.up.delPackage(otxmbr.pkgtup)
|
||||
+ # Update the cache and recheck file requires
|
||||
+ (self.installedFileRequires or {}).pop(otxmbr.pkgtup, None)
|
||||
+ CheckRemoves = True
|
||||
|
||||
if CheckDeps:
|
||||
if self.dsCallback: self.dsCallback.restartLoop()
|
||||
@@ -1177,10 +1180,10 @@ class Depsolve(object):
|
||||
|
||||
# get file requirements from new packages
|
||||
for txmbr in self._tsInfo.getMembersWithState(output_states=TS_INSTALL_STATES):
|
||||
+ files = []
|
||||
for name, flag, evr in txmbr.po.requires:
|
||||
if name.startswith('/'):
|
||||
- pt = txmbr.po.pkgtup
|
||||
- self.installedFileRequires.setdefault(pt, []).append(name)
|
||||
+ files.append(name)
|
||||
# check if file requires was already unresolved in update
|
||||
if name in self.installedUnresolvedFileRequires:
|
||||
already_broken = False
|
||||
@@ -1194,6 +1197,7 @@ class Depsolve(object):
|
||||
nfileRequires.add(name)
|
||||
fileRequires.add(name)
|
||||
reverselookup.setdefault(name, []).append(txmbr.po.pkgtup)
|
||||
+ self.installedFileRequires[txmbr.po.pkgtup] = files
|
||||
|
||||
todel = []
|
||||
for fname in self.installedFileProviders:
|
||||
44
BZ-927240-fix-package-download-and-verify.patch
Normal file
44
BZ-927240-fix-package-download-and-verify.patch
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
commit fe21657d863708d48fe2ec4e056c37a1b676661c
|
||||
Author: Zdeněk Pavlas <zpavlas@redhat.com>
|
||||
Date: Wed Nov 14 09:51:26 2012 +0100
|
||||
|
||||
can't verify package before it's downloaded
|
||||
|
||||
diff --git a/yum/yumRepo.py b/yum/yumRepo.py
|
||||
index 6bf520f..4f5f7a6 100644
|
||||
--- a/yum/yumRepo.py
|
||||
+++ b/yum/yumRepo.py
|
||||
@@ -993,7 +993,8 @@ Insufficient space in download directory %s
|
||||
**kwargs
|
||||
)
|
||||
|
||||
- if not package.verifyLocalPkg(): # Don't return as "success" when bad.
|
||||
+ if not kwargs.get('async') and not package.verifyLocalPkg():
|
||||
+ # Don't return as "success" when bad.
|
||||
msg = "Downloaded package %s, from %s, but it was invalid."
|
||||
msg = msg % (package, package.repo.id)
|
||||
raise Errors.RepoError, msg
|
||||
|
||||
downloadPkgs: skip duplicated packages
|
||||
|
||||
diff -up yum-3.4.3/yum/__init__.py.old yum-3.4.3/yum/__init__.py
|
||||
--- yum-3.4.3/yum/__init__.py.old 2013-03-25 14:45:17.125277817 +0100
|
||||
+++ yum-3.4.3/yum/__init__.py 2013-03-25 14:48:31.158718960 +0100
|
||||
@@ -2226,11 +2226,17 @@ much more problems).
|
||||
repo_cached = False
|
||||
remote_pkgs = []
|
||||
remote_size = 0
|
||||
+ beenthere = set() # only once, please. BZ 468401
|
||||
for po in pkglist:
|
||||
if hasattr(po, 'pkgtype') and po.pkgtype == 'local':
|
||||
continue
|
||||
|
||||
local = po.localPkg()
|
||||
+ if local in beenthere:
|
||||
+ # This is definitely a depsolver bug. Make it fatal?
|
||||
+ self.verbose_logger.warn(_("ignoring a dupe of %s") % po)
|
||||
+ continue
|
||||
+ beenthere.add(local)
|
||||
if os.path.exists(local):
|
||||
if not self.verifyPkg(local, po, False):
|
||||
if po.repo.cache:
|
||||
1307
yum-HEAD.patch
1307
yum-HEAD.patch
File diff suppressed because it is too large
Load diff
95
yum.spec
95
yum.spec
|
|
@ -18,7 +18,7 @@
|
|||
Summary: RPM package installer/updater/manager
|
||||
Name: yum
|
||||
Version: 3.4.3
|
||||
Release: 37%{?dist}
|
||||
Release: 54%{?dist}
|
||||
License: GPLv2+
|
||||
Group: System Environment/Base
|
||||
Source0: http://yum.baseurl.org/download/3.4/%{name}-%{version}.tar.gz
|
||||
|
|
@ -32,6 +32,12 @@ Patch7: yum-ppc64-preferred.patch
|
|||
Patch8: BZ-803346-no-only-update.patch
|
||||
Patch20: yum-manpage-files.patch
|
||||
Patch21: yum-completion-helper.patch
|
||||
Patch22: BZ-881756-include-langpacks.patch
|
||||
Patch23: BZ-885139-not-enough-arguments.patch
|
||||
Patch24: BZ-908870-MD-files-bad.patch
|
||||
Patch25: BZ-870691-repos-with-no-url.patch
|
||||
Patch26: BZ-927240-fix-package-download-and-verify.patch
|
||||
Patch27: BZ-920758-keep-installedFileRequires-inc-sync.patch
|
||||
|
||||
URL: http://yum.baseurl.org/
|
||||
BuildArchitectures: noarch
|
||||
|
|
@ -56,6 +62,9 @@ Requires: python-sqlite
|
|||
Requires: python-urlgrabber >= 3.9.0-8
|
||||
Requires: yum-metadata-parser >= 1.1.0
|
||||
Requires: pygpgme
|
||||
# rawhide is >= 0.5.3-7.fc18 ... as this is added.
|
||||
Requires: pyliblzma
|
||||
Requires: pyxattr
|
||||
|
||||
Conflicts: rpm >= 5-0
|
||||
# Zif is a re-implementation of yum in C, however:
|
||||
|
|
@ -91,6 +100,8 @@ Provides: yum-protect-packages = 1.1.27-0.yum
|
|||
Provides: yum-plugin-protect-packages = 1.1.27-0.yum
|
||||
Obsoletes: yum-plugin-download-order <= 0.2-2
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
Obsoletes: yum-plugin-downloadonly <= 1.1.31-7.fc18
|
||||
Provides: yum-plugin-downloadonly = 3.4.3-44.yum
|
||||
|
||||
|
||||
%description
|
||||
|
|
@ -120,7 +131,7 @@ can notify you when they are available via email, syslog or dbus.
|
|||
%package cron
|
||||
Summary: Files needed to run yum updates as a cron job
|
||||
Group: System Environment/Base
|
||||
Requires: yum >= 3.0 vixie-cron crontabs yum-plugin-downloadonly findutils
|
||||
Requires: yum >= 3.0 cronie crontabs findutils
|
||||
Requires(post): /sbin/chkconfig
|
||||
Requires(post): /sbin/service
|
||||
Requires(preun): /sbin/chkconfig
|
||||
|
|
@ -141,6 +152,12 @@ Install this package if you want auto yum updates nightly via cron.
|
|||
%patch8 -p1
|
||||
%patch20 -p1
|
||||
%patch21 -p1
|
||||
%patch22 -p1
|
||||
%patch23 -p1
|
||||
%patch24 -p1
|
||||
%patch25 -p1
|
||||
%patch26 -p1
|
||||
%patch27 -p1
|
||||
%patch1 -p1
|
||||
|
||||
%build
|
||||
|
|
@ -272,6 +289,7 @@ exit 0
|
|||
%{_sysconfdir}/bash_completion.d
|
||||
%dir %{_datadir}/yum-cli
|
||||
%{_datadir}/yum-cli/*
|
||||
%exclude %{_datadir}/yum-cli/completion-helper.py?
|
||||
%if %{yum_updatesd}
|
||||
%exclude %{_datadir}/yum-cli/yumupd.py*
|
||||
%endif
|
||||
|
|
@ -315,6 +333,69 @@ exit 0
|
|||
%endif
|
||||
|
||||
%changelog
|
||||
* Thu Apr 4 2013 Zdenek Pavlas <zpavlas@redhat.com> - 3.4.3-54
|
||||
- Fix a depsolver traceback. BZ 920758
|
||||
|
||||
* Mon Mar 25 2013 Zdenek Pavlas <zpavlas@redhat.com> - 3.4.3-53
|
||||
- fix getPackage() calling verifyLocalPkg() too early
|
||||
- downloadPkgs(): skip duplicated packages, issue warning.
|
||||
|
||||
* Mon Mar 11 2013 Zdenek Pavlas <zpavlas@redhat.com> - 3.4.3-52
|
||||
- ui_id: prevent TB on invalid repos with no URLs. BZ 870691
|
||||
|
||||
* Tue Feb 19 2013 James Antill <james at fedoraproject.org> - 3.4.3-51
|
||||
- Fix non-removal of corrupt metadata files. BZ 908870.
|
||||
|
||||
* Tue Feb 19 2013 Zdenek Pavlas <zpavlas@redhat.com> - 3.4.3-50
|
||||
- Revert last commit, bump the obsoleted range. BZ 905438
|
||||
|
||||
* Wed Feb 6 2013 Zdenek Pavlas <zpavlas@redhat.com> - 3.4.3-49
|
||||
- Conflict with yum-plugin-downloadonly. BZ 905438
|
||||
|
||||
* Wed Jan 16 2013 Zdeněk Pavlas <zpavlas@redhat.com> - 3.4.3-48
|
||||
- Fix a typo in select_groups(). BZ 885139
|
||||
|
||||
* Thu Dec 6 2012 Zdeněk Pavlas <zpavlas@redhat.com> - 3.4.3-47
|
||||
- Include langpacks when reading and writing comps. BZ 881756
|
||||
|
||||
* Tue Oct 23 2012 James Antill <james at fedoraproject.org> - 3.4.3-46
|
||||
- update to latest HEAD.
|
||||
- Minor upstream fixes, mainly for ppc64p7.
|
||||
|
||||
* 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.
|
||||
|
||||
* Fri Sep 7 2012 James Antill <james at fedoraproject.org> - 3.4.3-43
|
||||
- update to latest HEAD.
|
||||
- Use .ui_id explicitly for backcompat. on strings, *sigh*.
|
||||
|
||||
* Fri Aug 31 2012 Jesse Keating <jkeating@redhat.com> - 3.4.3-42
|
||||
- Fix HEAD patch, add a self. to function call
|
||||
|
||||
* Fri Aug 31 2012 James Antill <james at fedoraproject.org> - 3.4.3-41
|
||||
- update to latest HEAD.
|
||||
- Don't statvfs when we aren't going to copy, and using relative.
|
||||
|
||||
* Thu Aug 30 2012 James Antill <james at fedoraproject.org> - 3.4.3-40
|
||||
- update to latest HEAD.
|
||||
- Fix rel-eng problems when repo.repofile is None.
|
||||
- Remove statvfs check for local files when we don't copy.
|
||||
|
||||
* Wed Aug 29 2012 Zdenek Pavlas <zpavlas at redhat.com> - 3.4.3-38
|
||||
- update to latest HEAD.
|
||||
- fix a race in group_gz download
|
||||
- send 'private' mirror flags to urlgrabber.
|
||||
|
||||
* Wed Aug 29 2012 James Antill <james at fedoraproject.org> - 3.4.3-37
|
||||
- update to latest HEAD.
|
||||
- Fix problem on metalink downloads due to weird python issue.
|
||||
|
|
@ -326,13 +407,13 @@ exit 0
|
|||
- Add releasever/arch to repoids on output, if used in urls.
|
||||
- Merge mirror errors fix.
|
||||
|
||||
* Thu Aug 23 2012 Zdenek Pavlas <zpavlas at redhat.com> - 3.4.3-34
|
||||
- Some users skip setupProgressCallbacks(). BZ 850913.
|
||||
* Mon Aug 27 2012 Zdenek Pavlas <zpavlas at redhat.com> - 3.4.3-34
|
||||
- update to latest HEAD.
|
||||
- customized multi_progress_obj option
|
||||
- improved reporting of mirror group failures
|
||||
|
||||
* Wed Aug 22 2012 Zdenek Pavlas <zpavlas at redhat.com> - 3.4.3-33
|
||||
- update to latest HEAD.
|
||||
- Set multi_progress_obj option
|
||||
- Show full URLs and mirror errors when _getFile() fails.
|
||||
- Fix a typo in checkfunc. BZ 850550
|
||||
|
||||
* Thu Aug 16 2012 James Antill <james at fedoraproject.org> - 3.4.3-32
|
||||
- update to latest HEAD.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue