Create dicts to map between source and binary packages.

This avoids repeating the operation many times later if we do it
on demand each time.

Signed-off-by: Bill Nottingham <notting@redhat.com>
This commit is contained in:
Bill Nottingham 2009-04-03 15:53:57 -04:00 committed by Jesse Keating
parent e437dd7f7f
commit 63adcfcc7c
1 changed files with 26 additions and 6 deletions

View File

@ -135,6 +135,9 @@ class Pungi(pypungi.PungiBase):
self.polist = [] self.polist = []
self.srpmpolist = [] self.srpmpolist = []
self.debuginfolist = [] self.debuginfolist = []
self.srpms_build = []
self.srpms_fulltree = []
self.last_po = 0
self.resolved_deps = {} # list the deps we've already resolved, short circuit. self.resolved_deps = {} # list the deps we've already resolved, short circuit.
def _inityum(self): def _inityum(self):
@ -438,33 +441,50 @@ class Pungi(pypungi.PungiBase):
print >> sys.stderr, "Error: Cannot find a source rpm for %s" % srpm print >> sys.stderr, "Error: Cannot find a source rpm for %s" % srpm
sys.exit(1) sys.exit(1)
def createSourceHashes(self):
"""Create two dicts - one that maps binary POs to source POs, and
one that maps a single source PO to all binary POs it produces.
Requires yum still configured."""
self.src_by_bin = {}
self.bin_by_src = {}
self.logger.info("Generating source <-> binary package mappings")
(dummy1, everything, dummy2) = yum.packages.parsePackages(self.ayum.pkgSack.returnPackages(), ['*'])
for po in everything:
if po.arch == 'src':
continue
srpmpo = self.getSRPMPo(po)
self.src_by_bin[po] = srpmpo
if self.bin_by_src.has_key(srpmpo):
self.bin_by_src[srpmpo].append(po)
else:
self.bin_by_src[srpmpo] = [po]
def getSRPMList(self): def getSRPMList(self):
"""Cycle through the list of package objects and """Cycle through the list of package objects and
find the sourcerpm for them. Requires yum still find the sourcerpm for them. Requires yum still
configured and a list of package objects""" configured and a list of package objects"""
for po in self.polist[self.last_po:]:
for po in self.polist: srpmpo = self.src_by_bin[po]
srpmpo = self.getSRPMPo(po)
if not srpmpo in self.srpmpolist: if not srpmpo in self.srpmpolist:
self.logger.info("Adding source package %s.%s" % (srpmpo.name, srpmpo.arch)) self.logger.info("Adding source package %s.%s" % (srpmpo.name, srpmpo.arch))
self.srpmpolist.append(srpmpo) self.srpmpolist.append(srpmpo)
self.last_po = len(self.polist)
def resolvePackageBuildDeps(self): def resolvePackageBuildDeps(self):
"""Make the package lists self hosting. Requires yum """Make the package lists self hosting. Requires yum
still configured, a list of package objects, and a still configured, a list of package objects, and a
a list of source rpms.""" a list of source rpms."""
deppass = 1 deppass = 1
checked_srpms = []
while 1: while 1:
self.logger.info("Resolving build dependencies, pass %d" % (deppass)) self.logger.info("Resolving build dependencies, pass %d" % (deppass))
prev = list(self.ayum.tsInfo.getMembers()) prev = list(self.ayum.tsInfo.getMembers())
for srpm in self.srpmpolist[len(checked_srpms):]: for srpm in self.srpmpolist[len(self.srpms_build):]:
self.getPackageDeps(srpm) self.getPackageDeps(srpm)
for txmbr in self.ayum.tsInfo: for txmbr in self.ayum.tsInfo:
if txmbr.po.arch != 'src' and txmbr.po not in self.polist: if txmbr.po.arch != 'src' and txmbr.po not in self.polist:
self.polist.append(txmbr.po) self.polist.append(txmbr.po)
self.srpms_build = list(self.srpmpolist)
# Now that we've resolved deps, refresh the source rpm list # Now that we've resolved deps, refresh the source rpm list
checked_srpms = list(self.srpmpolist)
self.getSRPMList() self.getSRPMList()
deppass = deppass + 1 deppass = deppass + 1
if len(prev) == len(self.ayum.tsInfo.getMembers()): if len(prev) == len(self.ayum.tsInfo.getMembers()):