From efdf2e6131dd9fde485be541859f87913546e124 Mon Sep 17 00:00:00 2001 From: "jkeating@dhcp83-49.boston.redhat.com" <> Date: Mon, 11 Dec 2006 23:23:05 -0500 Subject: [PATCH] Add the ability to get release note files from release note packages. --- pungi | 14 ++++++++++++++ pypungi/pungi.py | 50 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/pungi b/pungi index 8fa35438..479540b9 100755 --- a/pungi +++ b/pungi @@ -22,10 +22,14 @@ from ConfigParser import SafeConfigParser def main(): # Set some default variables, can be overrided in config file + # Turn this into a dict someday, to iterate over when setting defaults osdir = "os" sourcedir = "source" debugdir = "debug" isodir = "iso" + relnotefilere = "eula.txt fedora.css GPL README-BURNING-ISOS-en_US.txt RELEASE-NOTES-en_US.html ^RPM-GPG" + relnotedirre = "images stylesheet-images" + relnotepkgs = "fedora-release fedora-release-notes" (opts, args) = get_arguments() @@ -44,6 +48,15 @@ def main(): if not config.has_option('default', 'isodir'): config.set('default', 'isodir', isodir) + if not config.has_option('default', 'relnotefilere'): + config.set('default', 'relnotefilere', relnotefilere) + + if not config.has_option('default', 'relnotedirre'): + config.set('default', 'relnotedirre', relnotedirre) + + if not config.has_option('default', 'relnotepkgs'): + config.set('default', 'relnotepkgs', relnotepkgs) + # set some other defaults if not config.has_option('default', 'product_path'): config.set('default', 'product_path', config.get('default', 'product_name')) @@ -83,6 +96,7 @@ def main(): mypungi = pypungi.pungi.Pungi(config) mypungi.doBuildinstall() mypungi.doPackageorder() + mypungi.doGetRelnotes() mypungi.doSplittree() mypungi.doCreateSplitrepo() mypungi.doCreateIsos() diff --git a/pypungi/pungi.py b/pypungi/pungi.py index 03a63b68..b028b513 100755 --- a/pypungi/pungi.py +++ b/pypungi/pungi.py @@ -17,6 +17,7 @@ import sys #sys.path.append('/usr/lib/anaconda-runtime') # use our patched splittree for now import splittree import shutil +import re class Pungi: def __init__(self, config): @@ -26,6 +27,11 @@ class Pungi: self.config.get('default', 'version'), self.config.get('default', 'arch'), 'os') + self.workdir = os.path.join(self.config.get('default', 'destdir'), + 'work', + self.config.get('default', 'arch')) + self.common_files = [] + def doBuildinstall(self): # buildinstall looks for a comps file in base/ for now, copy it into place @@ -42,6 +48,49 @@ class Pungi: self.config.get('default', 'product_path'), os.path.join(self.config.get('default', 'destdir'), 'pkgorder-%s' % self.config.get('default', 'arch')))) + def doGetRelnotes(self): + docsdir = os.path.join(self.workdir, 'docs') + relnoterpms = self.config.get('default', 'relnotepkgs').split() + + fileres = [] + for pattern in self.config.get('default', 'relnotefilere').split(): + fileres.append(re.compile(pattern)) + + dirres = [] + for pattern in self.config.get('default', 'relnotedirre').split(): + dirres.append(re.compile(pattern)) + + os.makedirs(docsdir) + + # Expload the packages we list as relnote packages + pkgs = os.listdir(os.path.join(self.topdir, self.config.get('default', 'product_path'))) + + for pkg in pkgs: + pkgname = pkg.rsplit('-', 2)[0] + for relnoterpm in relnoterpms: + if pkgname == relnoterpm: + output = os.system("pushd %s; rpm2cpio %s |cpio -imud; popd" % + (docsdir, + os.path.join(self.topdir, self.config.get('default', 'product_path'), pkg))) + + # Walk the tree for our files + for dirpath, dirname, filelist in os.walk(docsdir): + for filename in filelist: + for regex in fileres: + if regex.match(filename) and not os.path.exists(os.path.join(self.topdir, filename)): + print "Copying release note file %s" % filename + shutil.copy(os.path.join(dirpath, filename), os.path.join(self.topdir, filename)) + self.common_files.append(filename) + + # Walk the tree for our dirs + for dirpath, dirname, filelist in os.walk(docsdir): + for dir in dirname: + for regex in dirres: + if regex.match(dir) and not os.path.exists(os.path.join(self.topdir, dir)): + print "Copying release note dir %s" % dir + shutil.copytree(os.path.join(dirpath, dir), os.path.join(self.topdir, dir)) + + def doSplittree(self): timber = splittree.Timber() timber.arch = self.config.get('default', 'arch') @@ -53,6 +102,7 @@ class Pungi: timber.dist_dir = self.topdir timber.src_dir = os.path.join(self.config.get('default', 'destdir'), self.config.get('default', 'version'), 'source', 'SRPMS') timber.product_path = self.config.get('default', 'product_path') + timber.common_files = self.common_files #timber.reserve_size = output = timber.main()