[yum-cvs] yum/yum depsolve.py,1.141,1.142
Jeremy Katz
katzj at linux.duke.edu
Mon Mar 19 20:29:05 UTC 2007
Update of /home/groups/yum/cvs/yum/yum
In directory login1.linux.duke.edu:/tmp/cvs-serv11035/yum
Modified Files:
depsolve.py
Log Message:
remove the busted attempt at depsolving since it keeps throwing off my searches
Index: depsolve.py
===================================================================
RCS file: /home/groups/yum/cvs/yum/yum/depsolve.py,v
retrieving revision 1.141
retrieving revision 1.142
diff -u -r1.141 -r1.142
--- depsolve.py 19 Mar 2007 20:21:11 -0000 1.141
+++ depsolve.py 19 Mar 2007 20:29:03 -0000 1.142
@@ -800,228 +800,6 @@
return CheckDeps, conflicts
-class AnacondaDepsolver(Depsolve):
-
- def __init__(self):
- Depsolve.__init__(self)
- self.deps = {}
- self.path = []
- self.loops = []
-
- def isPackageInstalled(self, pkgname):
- # FIXME: this sucks. we should probably suck it into yum proper
- # but it'll need a bit of cleanup first.
- installed = False
- if self.rpmdb.installed(name = pkgname):
- installed = True
-
- lst = self.tsInfo.matchNaevr(name = pkgname)
- for txmbr in lst:
- if txmbr.output_state in TS_INSTALL_STATES:
- return True
- if installed and len(lst) > 0:
- # if we get here, then it was installed, but it's in the tsInfo
- # for an erase or obsoleted --> not going to be installed at end
- return False
- return installed
-
- def _provideToPkg(self, req):
- best = None
- (r, f, v) = req
-
- for pkgtup in self.rpmdb.whatProvides(r, f, v):
- # check the rpmdb first for something providing it that's not
- # set to be removed
- txmbrs = self.tsInfo.getMembers(pkgtup)
- if not txmbrs:
- po = self.getInstalledPackageObject(pkgtup)
- self.deps[req] = po
- return po
- for txmbr in txmbrs:
- if txmbr.output_state not in TS_REMOVE_STATES:
- po = self.getInstalledPackageObject(pkgtup)
- self.deps[req] = po
- return po
-
- satisfiers = []
- for po in self.whatProvides(r, f, v):
- # if we already have something to be installed which
- # does the provide then that's obviously the one we want to use.
- # this takes care of the case that we select, eg, kernel-smp
- # and then have something which requires kernel
- if self.tsInfo.getMembers(po.pkgtup):
- self.deps[req] = po
- return po
- if po not in satisfiers:
- satisfiers.append(po)
-
- if satisfiers:
- best = self.bestPackagesFromList(satisfiers)[0]
- self.deps[req] = best
- return best
- return None
-
- def _undoDepInstalls(self):
- # clean up after ourselves in the case of failures
- for txmbr in self.tsInfo:
- if txmbr.isDep:
- self.tsInfo.remove(txmbr.pkgtup)
-
- def prof_resolveDeps(self):
- fn = "anaconda.prof.0"
- import hotshot, hotshot.stats
- prof = hotshot.Profile(fn)
- rc = prof.runcall(self._resolveDeps)
- prof.close()
- print "done running depcheck"
- stats = hotshot.stats.load(fn)
- stats.strip_dirs()
- stats.sort_stats('time', 'calls')
- stats.print_stats(20)
- return rc
-
- def resolveDeps(self):
- if self.dsCallback: self.dsCallback.start()
- unresolved = self.tsInfo.getMembers()
- while len(unresolved) > 0:
- if self.dsCallback: self.dsCallback.tscheck()
- unresolved = self.tsCheck(unresolved)
- if len(unresolved) > 0:
- if self.dsCallback: self.dsCallback.restartLoop()
- self.deps = {}
- self.loops = []
- self.path = []
- self.tsInfo.changed = False
- return (2, ['Success - deps resolved'])
-
- def _checkInstall(self, txmbr):
- reqs = txmbr.po.returnPrco('requires')
- provs = txmbr.po.returnPrco('provides')
-
- ret = []
- for req in reqs:
- if req[0].startswith('rpmlib(') or req[0].startswith('config('):
- continue
- if req in provs:
- continue
- self.verbose_logger.log(logginglevels.DEBUG_2, "looking for %s as a requirement of %s" %(req, txmbr))
- dep = self.deps.get(req, None)
- if dep is None:
- dep = self._provideToPkg(req)
- if dep is None:
- # FIXME: We need to fail here.
- self.verbose_logger.warning("Unresolvable dependency %s in %s"
- %(req[0], txmbr.name))
- continue
-
- # Skip filebased requires on self, etc
- if txmbr.name == dep.name:
- continue
- # FIXME: Yum doesn't need this, right?
- #if (dep.name, txmbr.name) in whiteout.whitetup:
- # log.debug("ignoring %s>%s in whiteout" %(dep.name, txmbr.name))
- # continue
- if self.isPackageInstalled(dep.name):
- continue
- if self.tsInfo.exists(dep.pkgtup):
- pkgs = self.tsInfo.getMembers(pkgtup=dep.pkgtup)
- member = self.bestPackagesFromList(pkgs)[0]
- else:
- if dep.name != req[0]:
- self.verbose_logger.info("adding %s for %s, required by %s" %(dep.name, req[0], txmbr.name))
-
- member = self.tsInfo.addInstall(dep)
- ret.append(member)
-
- #Add relationship
- found = False
- for dependspo in txmbr.depends_on:
- if member.po == dependspo:
- found = True
- break
- if not found:
- member.setAsDep(txmbr.po)
- return ret
-
- def _checkRemove(self, txmbr):
- provs = txmbr.po.returnPrco('provides')
-
- # get the files in the package and express them as "provides"
- files = txmbr.po.filelist
- filesasprovs = map(lambda f: (f, None, None), files)
- provs.extend(filesasprovs)
-
- ret = []
- for prov in provs:
- if prov[0].startswith('rpmlib('): # ignore rpmlib() provides
- continue
- if prov[0].startswith("/usr/share/doc"): # XXX: ignore doc files
- continue
- self.verbose_logger.log(logginglevels.DEBUG_4, "looking to see what requires %s of %s" %(prov, txmbr.po))
- (r, f, v) = prov
-
- removeList = []
- # we don't care if they require exactly our version
- for pkgtup in self.rpmdb.whatRequires(r, None, v):
- if pkgtup in removeList:
- continue
- # check the rpmdb first for something still installed
- txmbrs = self.tsInfo.getMembers(pkgtup)
- toRemove = False
- for tx in txmbrs:
- if tx.output_state in TS_REMOVE_STATES:
- toRemove = True
- break
- if not toRemove:
- removeList.append(pkgtup)
-
- if len(removeList) == 0:
- continue
-
- # if something else provides this name and it's not being
- # removed, then we don't need to worry about it
- stillavail = False
- for pkgtup in self.rpmdb.whatProvides(r, None, None):
- txmbrs = self.tsInfo.getMembers(pkgtup)
- if len(txmbrs) == 0: # not in tsinfo, so must still be avail
- stillavail = True
- break
- for tx in txmbrs:
- if tx.output_state not in TS_REMOVE_STATES:
- stillavail = True # it's being installed
- break
- if stillavail:
- self.verbose_logger.log(logginglevels.DEBUG_1, "more than one package provides %s" %(r,))
- continue
-
- for pkgtup in removeList:
- po = self.getInstalledPackageObject(pkgtup)
- self.verbose_logger.info("removing %s for %s, was provided by %s" %(po, r, txmbr.po))
- tx = self.tsInfo.addErase(po)
- tx.setAsDep(po = txmbr.po)
- ret.append(tx)
-
- return ret
-
- def tsCheck(self, tocheck):
- unresolved = []
-
- for txmbr in tocheck:
- if txmbr.name == "redhat-lsb" and len(tocheck) > 2: # FIXME: this speeds things up a lot
- unresolved.append(txmbr)
- continue
- # FIXME: Not enough args
- #if self.dsCallback: self.dsCallback.pkgAdded()
- if txmbr.output_state in TS_INSTALL_STATES:
- unresolved.extend(self._checkInstall(txmbr))
- elif txmbr.output_state in TS_REMOVE_STATES:
- unresolved.extend(self._checkRemove(txmbr))
-
- return unresolved
-
- def _transactionDataFactory(self):
- return SplitMediaTransactionData()
-
class YumDepsolver(Depsolve):
def __init__(self):
Depsolve.__init__(self)
More information about the Yum-cvs-commits
mailing list