From: Paul Nasrat Date: Thu, 8 Dec 2005 19:22:11 +0000 (+0000) Subject: Split out processing into smaller methods. Make ts internal. Files and X-Git-Tag: upstream/0.9.9~256 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=26747ef0626053ced796f1ff0fb94c94f81c44ae;p=tools%2Fcreaterepo.git Split out processing into smaller methods. Make ts internal. Files and base/file/other data attributes. --- diff --git a/genpkgmetadata.py b/genpkgmetadata.py index 09970eb..73f198d 100755 --- a/genpkgmetadata.py +++ b/genpkgmetadata.py @@ -61,10 +61,11 @@ def usage(retval=1): class MetaDataGenerator: def __init__(self, cmds): self.cmds = cmds + self.ts = rpm.TransactionSet() + self.files = [] - def getFileList(self, basepath, path, ext, filelist): - """Return all files in path matching ext, store them in filelist, recurse dirs - return list object""" + def getFileList(self, basepath, path, ext): + """Return all files in path matching ext, store them in filelist, recurse dirs. Modifies self.files""" extlen = len(ext) totalpath = os.path.normpath(os.path.join(basepath, path)) @@ -76,156 +77,161 @@ class MetaDataGenerator: for d in dir_list: if os.path.isdir(totalpath + '/' + d): - filelist = self.getFileList(basepath, os.path.join(path, d), ext, filelist) + self.getFileList(basepath, os.path.join(path, d), ext ) else: if string.lower(d[-extlen:]) == '%s' % (ext): if totalpath.find(basepath) == 0: relativepath = totalpath.replace(basepath, "", 1) relativepath = relativepath.lstrip("/") - filelist.append(os.path.join(relativepath, d)) + self.files.append(os.path.join(relativepath, d)) else: raise "basepath '%s' not found in path '%s'" % (basepath, totalpath) - return filelist - - - def trimRpms(self, rpms, excludeGlobs): - # print 'Pre-Trim Len: %d' % len(rpms) + def trimRpms(self): badrpms = [] - for file in rpms: - for glob in excludeGlobs: + for file in self.files: + for glob in self.cmds['excludes']: if fnmatch.fnmatch(file, glob): # print 'excluded: %s' % file if file not in badrpms: badrpms.append(file) for file in badrpms: - if file in rpms: - rpms.remove(file) - # print 'Post-Trim Len: %d' % len(rpms) - return rpms + if file in self.files: + self.files.remove(file) - def doPkgMetadata(self, directory, ts): + def doPkgMetadata(self, directory): """all the heavy lifting for the package metadata""" # rpms we're going to be dealing with - files = [] - files = self.getFileList(self.cmds['basedir'], directory, '.rpm', files) - files = self.trimRpms(files, self.cmds['excludes']) - pkgcount = len(files) + self.getFileList(self.cmds['basedir'], directory, '.rpm') + self.trimRpms() + self.pkgcount = len(self.files) + self.openMetadataDocs() + self.writeMetadataDocs() + self.closeMetadataDocs() + + def openMetadataDocs(self): + self._setupBase() + self._setupFilelists() + self._setupOther() + + def _setupBase(self): # setup the base metadata doc - basedoc = libxml2.newDoc("1.0") - baseroot = basedoc.newChild(None, "metadata", None) - basens = baseroot.newNs('http://linux.duke.edu/metadata/common', None) - formatns = baseroot.newNs('http://linux.duke.edu/metadata/rpm', 'rpm') - baseroot.setNs(basens) + self.basedoc = libxml2.newDoc("1.0") + self.baseroot = self.basedoc.newChild(None, "metadata", None) + basens = self.baseroot.newNs('http://linux.duke.edu/metadata/common', None) + self.formatns = self.baseroot.newNs('http://linux.duke.edu/metadata/rpm', 'rpm') + self.baseroot.setNs(basens) basefilepath = os.path.join(self.cmds['basedir'], self.cmds['tempdir'], self.cmds['primaryfile']) - basefile = _gzipOpen(basefilepath, 'w') - basefile.write('\n') - basefile.write('\n' % - pkgcount) + self.basefile = _gzipOpen(basefilepath, 'w') + self.basefile.write('\n') + self.basefile.write('\n' % + self.pkgcount) + def _setupFilelists(self): # setup the file list doc - filesdoc = libxml2.newDoc("1.0") - filesroot = filesdoc.newChild(None, "filelists", None) - filesns = filesroot.newNs('http://linux.duke.edu/metadata/filelists', None) - filesroot.setNs(filesns) + self.filesdoc = libxml2.newDoc("1.0") + self.filesroot = self.filesdoc.newChild(None, "filelists", None) + filesns = self.filesroot.newNs('http://linux.duke.edu/metadata/filelists', None) + self.filesroot.setNs(filesns) filelistpath = os.path.join(self.cmds['basedir'], self.cmds['tempdir'], self.cmds['filelistsfile']) - flfile = _gzipOpen(filelistpath, 'w') - flfile.write('\n') - flfile.write('\n' % - pkgcount) - + self.flfile = _gzipOpen(filelistpath, 'w') + self.flfile.write('\n') + self.flfile.write('\n' % + self.pkgcount) + def _setupOther(self): # setup the other doc - otherdoc = libxml2.newDoc("1.0") - otherroot = otherdoc.newChild(None, "otherdata", None) - otherns = otherroot.newNs('http://linux.duke.edu/metadata/other', None) - otherroot.setNs(otherns) + self.otherdoc = libxml2.newDoc("1.0") + self.otherroot = self.otherdoc.newChild(None, "otherdata", None) + otherns = self.otherroot.newNs('http://linux.duke.edu/metadata/other', None) + self.otherroot.setNs(otherns) otherfilepath = os.path.join(self.cmds['basedir'], self.cmds['tempdir'], self.cmds['otherfile']) - otherfile = _gzipOpen(otherfilepath, 'w') - otherfile.write('\n') - otherfile.write('\n' % - pkgcount) - + self.otherfile = _gzipOpen(otherfilepath, 'w') + self.otherfile.write('\n') + self.otherfile.write('\n' % + self.pkgcount) + def writeMetadataDocs(self): current = 0 - for file in files: + for file in self.files: current+=1 try: - mdobj = dumpMetadata.RpmMetaData(ts, self.cmds['basedir'], file, self.cmds) + mdobj = dumpMetadata.RpmMetaData(self.ts, self.cmds['basedir'], file, self.cmds) if not self.cmds['quiet']: if self.cmds['verbose']: print '%d/%d - %s' % (current, len(files), file) else: sys.stdout.write('\r' + ' ' * 80) - sys.stdout.write("\r%d/%d - %s" % (current, len(files), file)) + sys.stdout.write("\r%d/%d - %s" % (current, len(self.files), file)) sys.stdout.flush() except dumpMetadata.MDError, e: errorprint('\n%s - %s' % (e, file)) continue else: try: - node = dumpMetadata.generateXML(basedoc, baseroot, formatns, mdobj, self.cmds['sumtype']) + node = dumpMetadata.generateXML(self.basedoc, self.baseroot, self.formatns, mdobj, self.cmds['sumtype']) except dumpMetadata.MDError, e: errorprint(_('\nAn error occurred creating primary metadata: %s') % e) continue else: output = node.serialize('UTF-8', self.cmds['pretty']) - basefile.write(output) - basefile.write('\n') + self.basefile.write(output) + self.basefile.write('\n') node.unlinkNode() node.freeNode() del node try: - node = dumpMetadata.fileListXML(filesdoc, filesroot, mdobj) + node = dumpMetadata.fileListXML(self.filesdoc, self.filesroot, mdobj) except dumpMetadata.MDError, e: errorprint(_('\nAn error occurred creating filelists: %s') % e) continue else: output = node.serialize('UTF-8', self.cmds['pretty']) - flfile.write(output) - flfile.write('\n') + self.flfile.write(output) + self.flfile.write('\n') node.unlinkNode() node.freeNode() del node try: - node = dumpMetadata.otherXML(otherdoc, otherroot, mdobj) + node = dumpMetadata.otherXML(self.otherdoc, self.otherroot, mdobj) except dumpMetadata.MDError, e: errorprint(_('\nAn error occurred: %s') % e) continue else: output = node.serialize('UTF-8', self.cmds['pretty']) - otherfile.write(output) - otherfile.write('\n') + self.otherfile.write(output) + self.otherfile.write('\n') node.unlinkNode() node.freeNode() del node + def closeMetadataDocs(self): if not self.cmds['quiet']: print '' # save them up to the tmp locations: if not self.cmds['quiet']: print _('Saving Primary metadata') - basefile.write('\n') - basefile.close() - basedoc.freeDoc() + self.basefile.write('\n') + self.basefile.close() + self.basedoc.freeDoc() if not self.cmds['quiet']: print _('Saving file lists metadata') - flfile.write('\n') - flfile.close() - filesdoc.freeDoc() + self.flfile.write('\n') + self.flfile.close() + self.filesdoc.freeDoc() if not self.cmds['quiet']: print _('Saving other metadata') - otherfile.write('\n') - otherfile.close() - otherdoc.freeDoc() + self.otherfile.write('\n') + self.otherfile.close() + self.otherdoc.freeDoc() def doRepoMetadata(self): """wrapper to generate the repomd.xml file that stores the info on the other files""" @@ -418,8 +424,7 @@ def main(args): usage() mdgen = MetaDataGenerator(cmds) - ts = rpm.TransactionSet() - mdgen.doPkgMetadata(directory, ts) + mdgen.doPkgMetadata(directory) mdgen.doRepoMetadata() if os.path.exists(os.path.join(cmds['basedir'], cmds['finaldir'])):