extras-repoclosure rc-modified,1.21,1.22
Michael Schwendt (mschwendt)
fedora-extras-commits at redhat.com
Fri Mar 7 20:04:16 UTC 2008
Author: mschwendt
Update of /cvs/fedora/extras-repoclosure
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv3391
Modified Files:
rc-modified
Log Message:
implement a different multi-lib problems hack, which can be disabled via options
Index: rc-modified
===================================================================
RCS file: /cvs/fedora/extras-repoclosure/rc-modified,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- rc-modified 3 Mar 2008 14:21:59 -0000 1.21
+++ rc-modified 7 Mar 2008 20:04:15 -0000 1.22
@@ -50,13 +50,15 @@
parser.add_option("-r", "--repoid", default=[], action='append',
help="specify repo ids to query, can be specified multiple times (default is all enabled)")
parser.add_option("-t", "--tempcache", default=False, action="store_true",
- help="Use a temp dir for storing/accessing yum-cache")
+ 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)")
parser.add_option("-n", "--newest", default=0, action="store_true",
help="check only the newest packages in the repos")
+ parser.add_option("", "--nomultilibhack", default=False, action="store_true",
+ help="disable multi-lib hack")
(opts, args) = parser.parse_args()
return (opts, args)
@@ -72,7 +74,9 @@
if hasattr(self.repos, 'sqlite'):
self.repos.sqlite = False
self.repos._selectSackType()
-
+
+ self.guessMultiLibProbs = True
+
def evrTupletoVer(self,tuple):
"""convert and evr tuple to a version string, return None if nothing
to convert"""
@@ -100,10 +104,41 @@
except TypeError:
self.repos.populateSack(which=[repo.id], with='filelists')
+ def isnewest(self, pkg):
+ newest = pkg.pkgtup in self.newestpkgtuplist
+
+ if not self.guessMultiLibProbs:
+ return newest
+
+ # Multi-lib hack:
+ #
+ # This is supposed to catch corner-cases, such as:
+ # Base-arch pkg was updated, but a corresponding compat-arch pkg
+ # is not included in the repo, because e.g. it was repackaged
+ # and no longer is pulled in by the multi-lib resolver.
+ # Assume, that if it the old compat-arch pkg is in the repo,
+ # there is no upgrade path from biarch installs to single-arch
+ # (the one pkg upgrades two installed pkgs with different arch)
+
+ if newest:
+ return newest # the trivial case
+
+ (n,a,e,v,r) = pkg.pkgtup
+ for provpkg in self.pkgSack.returnNewestByName(n):
+ prov_a = provpkg.pkgtup[1]
+ if prov_a=='noarch' or prov_a==a:
+ (prov_e, prov_v, prov_r) = provpkg.pkgtup[2:]
+ vercmp = rpmUtils.miscutils.compareEVR( (prov_e,prov_v,prov_r), (e,v,r) )
+ if vercmp>0: # provpkg is newer
+ return False
+ # No noarch/same-arch pkg is newer, but a basearch pkg may be newer
+ # and therefore be the only one in newestpkgtuplist.
+ return True
+
def getBrokenDeps(self, newest=False):
unresolved = {}
resolved = {}
- newestpkgtuplist = []
+ self.newestpkgtuplist = []
if newest:
if yum.__version__ >= '2.9': # TODO: check
pkgs = self.pkgSack.returnNewestByName()
@@ -111,7 +146,7 @@
pkgs = []
for l in self.pkgSack.returnNewestByName():
pkgs.extend(l)
- newestpkgtuplist = ListPackageSack(pkgs).simplePkgList()
+ self.newestpkgtuplist = ListPackageSack(pkgs).simplePkgList()
pkgs = self.pkgSack.returnNewestByNameArch()
else:
@@ -154,7 +189,7 @@
pass
if len(resolve_sack) < 1:
- if newest and pkg.pkgtup not in newestpkgtuplist:
+ if newest and not self.isnewest(pkg):
break
if not unresolved.has_key(pkg):
unresolved[pkg] = []
@@ -189,7 +224,7 @@
if resolved_by_newest:
resolved[(req,flags,ver)] = 1
else:
- if newest and pkg.pkgtup not in newestpkgtuplist:
+ if newest and not self.isnewest(pkg):
break
if not unresolved.has_key(pkg):
unresolved[pkg] = []
@@ -204,6 +239,7 @@
def main():
(opts, cruft) = parseArgs()
my = RepoClosure(arch = opts.arch, config = opts.config)
+ my.guessMultiLibProbs = not opts.nomultilibhack
if opts.repoid:
for repo in my.repos.repos.values():
More information about the fedora-extras-commits
mailing list