Below is a listing of packages currently in FE where an earlier distro version contains a newer package version than in some newer distro versions. The ugly script and its config used to generate this list are attached, and can be run like "./upgradecheck.py -c fe-sources.conf". The script examines source packages only, and reports problems from the first found problem spot onwards (ie. revisions for old distros that don't have this upgrade problem are not listed). See also https://www.redhat.com/archives/fedora-extras-list/2006-May/msg00083.html which includes instructions how to fix problems in earlier distro versions only without having to rebuild all newer ones. banshee: 5: 0:0.10.9-1..fc5 6: 0:0.10.8-1 cacti: 4: 0:0.8.6h-6.fc4 5: 0:0.8.6h-6 6: 0:0.8.6h-6 fish: 4: 0:1.14.0-1.fc4 5: 0:1.12.0-1.fc5 6: 0:1.12.0-1.fc5 fuse-encfs: 5: 0:1.3.1-1.fc5 6: 0:1.3.0-1.fc6 gcfilms: 5: 0:6.2-1.fc5 6: 0:6.1-2.fc5 gcl: 3: 0:2.6.7-5.fc3 4: 0:2.6.7-4.fc4 5: 0:2.6.7-11.fc5 6: 0:2.6.7-11.fc6 gnome-yum: 5: 0:0.1.3-1.fc5 6: 0:0.1.3-1 gtkglarea2: 3: 0:1.99.0-2.fc3 4: 0:1.99.0-2 5: 0:1.99.0-6.fc5 6: 0:1.99.0-6.fc5 iozone: 3: 0:3-1.fc3 4: 0:3-1 5: 0:3-2.fc5 6: 0:3-2.fc5 istanbul: 5: 0:0.1.1-9.fc5 6: 0:0.1.1-9 kdemultimedia-extras: 5: 6:3.5.2-5.fc5 6: 6:3.5.1-8.fc6 libtranslate: 3: 0:0.99-6.fc3 4: 0:0.99-5.fc4 5: 0:0.99-6.fc5 6: 0:0.99-6.fc6 libxml++: 5: 0:2.14.0-1.fc5 6: 0:2.12.0-2.1.fc5 lilypond: 5: 0:2.8.3-2.fc5 6: 0:2.8.3-1.fc6 mhonarc: 3: 0:2.6.12-1.fc3 4: 0:2.6.11-1.fc4 5: 0:2.6.15-4.fc5 6: 0:2.6.15-4.fc5 multitail: 5: 0:4.0.4-1.fc5 6: 0:4.0.3-1.fc6 nail: 5: 0:12.0-2.fc5 6: 0:12.0-1.fc6 nsd: 3: 0:2.3.4-5.fc3 4: 0:2.3.4-4.fc4 5: 0:2.3.4-4.fc5 6: 0:2.3.4-3.fc6 otrs: 5: 0:2.0.4-3.fc5 6: 0:2.0.4-3 perl-SOAP-Lite: 4: 0:0.67-2.1.fc4 5: 0:0.67-2.fc5 6: 0:0.67-2.fc6 pygame: 5: 0:1.7.1-7.fc5 6: 0:1.7.1-6.fc6 pylint: 5: 0:0.11.0-1.fc5 6: 0:0.10.0-1.fc5 python-astng: 5: 0:0.16.0-0.fc5 6: 0:0.15.1-1.fc5 python-myghty: 5: 0:1.0.1-2.fc5 6: 0:1.0.1-1.fc5 rssowl: 5: 0:1.2.1-2.fc5 6: 0:1.2-12.fc6 scim-qtimm: 3: 0:0.9.4-0.1.fc3 4: 0:0.9.4-0.fc4 5: (missing) 6: (missing) scponly: 5: 0:4.6-3.fc5 6: 0:4.6-1.fc5 stratagus: 5: 0:2.1-6.fc5 6: 0:2.1-5.fc6 utrac: 3: 0:0.3.0-7.fc3 4: 0:0.3.0-6.fc4 5: 0:0.3.0-6.fc5 6: 0:0.3.0-6.fc6 wine-docs: 3: 0:0.9.13-1.fc3 4: 0:0.9.13-0.1.fc4 5: 0:0.9.13-1.fc5 6: 0:0.9.13-1.fc6 xbase: 4: 0:2.0.0-4.fc4 5: 0:2.0.0-3.fc5 6: 0:2.0.0-3.fc5 xbsql: 3: 0:0.11-6.fc3 4: 0:0.11-5.fc4 5: 0:0.11-5.fc5 6: 0:0.11-5.fc5 xfce4-taskmanager: 3: 0:0.3.1-3.fc3 4: 0:0.3.1-2.fc4 5: 0:0.3.1-3.fc5 6: 0:0.3.1-3.fc5 xfce4-weather-plugin: 3: 0:0.4.9-5.fc3 4: 0:0.4.9-4.fc4 5: 0:0.4.9-5.fc5 6: 0:0.4.9-5.fc5
Attachment:
fe-sources.conf
Description: application/cisco-vpn-settings
#!/usr/bin/python -t
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Library General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
import os
import sys
import yum
import yum.Errors
from yum.misc import getCacheDir
from optparse import OptionParser
from rpmUtils.miscutils import compareEVR
def parseArgs():
usage = "usage: %s [-c <config file>] [-a <arch>] [-r <repoid>] [-r <repoid2>]" % sys.argv[0]
parser = OptionParser(usage=usage)
parser.add_option("-c", "--config", default='/etc/yum.conf',
help='config file to use (defaults to /etc/yum.conf)')
parser.add_option("-t", "--tempcache", default=False, action="store_true",
help="Use a temp dir for storing/accessing yum-cache")
parser.add_option("-d", "--cachedir", default='',
help="specify a custom directory for storing/accessing yum-cache")
parser.add_option("-q", "--quiet", default=0, action="store_true",
help="quiet (no output to stderr)")
(opts, args) = parser.parse_args()
return (opts, args)
class MySolver(yum.YumBase):
def __init__(self, arch = None, config = "/etc/yum.conf"):
yum.YumBase.__init__(self)
self.arch = arch
self.doConfigSetup(fn = config)
if hasattr(self.repos, 'sqlite'):
self.repos.sqlite = False
self.repos._selectSackType()
def readMetadata(self):
self.doRepoSetup()
self.doSackSetup(("src", ))
for repo in self.repos.listEnabled():
self.repos.populateSack(which=[repo.id], with='filelists')
def log(self, value, msg):
pass
def evrstr(evr):
return evr and "%s:%s-%s" % evr or "(missing)"
def main():
(opts, cruft) = parseArgs()
dists = ('3', '4', '5', '6')
solvers = {}
for dist in dists:
solver = MySolver(config = opts.config)
for repo in solver.repos.repos.values():
if repo.id not in ("extras-%s-source" % dist, ):
repo.disable()
else:
repo.enable()
solvers[dist] = solver
if os.geteuid() != 0 or opts.tempcache or opts.cachedir != '':
if opts.cachedir != '':
cachedir = opts.cachedir
else:
cachedir = getCacheDir()
if cachedir is None:
print "Error: Could not make cachedir, exiting"
sys.exit(50)
for repo in solvers.values():
repo.repos.setCacheDir(cachedir)
if not opts.quiet:
print 'Reading in repository metadata - please wait....'
try:
for repo in solvers.values():
repo.readMetadata()
except yum.Errors.RepoError, e:
print 'Filelists not available for repo: %s' % repo
print 'Some dependencies may not be complete for this repository'
print 'Run as root to get all dependencies or use -t to enable a user temp cache'
pkgdict = {'3':{},
'4':{},
'5':{},
'6':{},
}
allnames = []
for dist in dists:
for l in solvers[dist].pkgSack.returnNewestByName():
for pkg in l:
allnames.append(pkg.name)
pkgdict[dist][pkg.name] = (pkg.epoch, pkg.version, pkg.release)
allnames = sorted(set(allnames))
for name in allnames:
evrs = map(lambda x: pkgdict[x].get(name), dists)
last = None # last seen EVR
bork = None # index of first repo w/ problem
ix = 0
for evr in evrs:
if not evr: # missing
pass # TODO: detect holes in continuum
elif last is None: # first one seen
last = evr
elif compareEVR(last, evr) > 0: # versioning problem
bork = ix - 1
break
ix = ix + 1
if bork is not None:
ix = bork
print name + ":"
for evr in evrs[ix:]: # onwards from the problem spot
print " %s: %s" % (dists[ix], evrstr(evr))
ix = ix + 1
print
if __name__ == "__main__":
main()