diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/create-rpm-pkglist.py | 124 | ||||
-rwxr-xr-x | tools/export.py | 34 |
2 files changed, 139 insertions, 19 deletions
diff --git a/tools/create-rpm-pkglist.py b/tools/create-rpm-pkglist.py new file mode 100644 index 000000000..e88de4191 --- /dev/null +++ b/tools/create-rpm-pkglist.py @@ -0,0 +1,124 @@ +#!/usr/bin/env python +# +# Copyright (c) 2010 Fabian Affolter, Bernewireless.net. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: + +# * Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# * Neither the name of the Bernewireless nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ''AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Author: Fabian Affolter <fabian at bernewireless.net> +# + +import yum +import os +import sys +from lxml import etree +from optparse import OptionParser + +__author__ = 'Fabian Affolter <fabian@bernewireless.net>' +__version__ = '0.1' + +def retrievePackages(): + """Getting the installed packages with yum.""" + yb = yum.YumBase() + yb.conf.cache = os.geteuid() != 1 + pl = yb.doPackageLists('installed') + pkglist = [] + for pkg in sorted(pl.installed): + pkgdata = pkg.name, pkg.version + pkglist.append(pkgdata) + + return pkglist + +def parse_command_line_parameters(): + """Parses command line arguments.""" + usage = "usage: %prog [options]" + version = 'Version: %prog ' + __version__ + parser = OptionParser(usage, version=version) + parser.add_option("-s", "--show", action="store_true", + help="Prints the result to STOUT") + parser.add_option("-v", "--pkgversion", action="store_true", + help="Include Package version") + parser.add_option("-f", "--filename", dest="filename", + type="string", + metavar="FILE", default="packages.xml", + help="Write the output to an XML FILE" ) + + (options, args) = parser.parse_args() + num_args = 1 + + return options, args + +def indent(elem, level=0): + """Helps clean up the XML.""" + # Stolen from http://effbot.org/zone/element-lib.htm + i = "\n" + level*" " + if len(elem): + if not elem.text or not elem.text.strip(): + elem.text = i + " " + for e in elem: + indent(e, level+1) + if not e.tail or not e.tail.strip(): + e.tail = i + " " + if not e.tail or not e.tail.strip(): + e.tail = i + else: + if level and (not elem.tail or not elem.tail.strip()): + elem.tail = i + +def transformXML(): + """Transform the package list to an XML file.""" + packagelist = retrievePackages() + root = etree.Element("PackageList") + for i,j in packagelist: + root.append( etree.Element("Package", name = i, version = j) ) + #Print the content + #print(etree.tostring(root, pretty_print=True)) + tree = etree.ElementTree(root) + return tree + +def main(): + options, args = parse_command_line_parameters() + filename = options.filename + packagelist = transformXML() + + if options.show == True: + tree = etree.parse(filename) + for node in tree.findall("//Package"): + print node.attrib["name"] + indent(packagelist.getroot()) + packagelist.write(filename, encoding="utf-8") + + if options.pkgversion == True: + tree = etree.parse(filename) + for node in tree.findall("//Package"): + print "%s-%s" % (node.attrib["name"], node.attrib["version"]) + +#FIXME : This should be changed to the standard way of optparser +#FIXME : Make an option available to strip the version number of the pkg + if options.pkgversion == None and options.show == None: + indent(packagelist.getroot()) + packagelist.write(filename, encoding="utf-8") + +if __name__ == "__main__": + main() diff --git a/tools/export.py b/tools/export.py index fcb9e5a4d..c64ff90a2 100755 --- a/tools/export.py +++ b/tools/export.py @@ -10,20 +10,14 @@ from subprocess import Popen, PIPE import sys pkgname = 'bcfg2' -repo = 'https://svn.mcs.anl.gov/repos/bcfg' +ftphost = 'terra.mcs.anl.gov' +ftpdir = '/mcs/ftp/pub/bcfg' version = raw_input("Please enter the version you are tagging (e.g. 1.0.0): ") -tagstr = version.replace('.', '_') - -expath = "/tmp/%s-%s/" % (pkgname, version) -tarname = "/tmp/%s-%s.tar.gz" % (pkgname, version) +tarname = '/tmp/%s-%s.tar.gz' % (pkgname, version) def run(command): return Popen(command, shell=True, stdout=PIPE).communicate() -#FIXME: someone please figure out how to do this using the python svn bindings -cmd = "svn info | grep URL | awk '{print $2}'" -url = run(cmd)[0].strip() - # update the version majorver = version[:5] minorver = version[5:] @@ -65,20 +59,22 @@ for line in fileinput.input('solaris/Makefile', inplace=1): if line.startswith('VERS='): line = line.replace(line, 'VERS=%s-1\n' % version) sys.stdout.write(line) + # tag the release -cmd = "svn ci -m 'Version bump to %s'" % version +#FIXME: do this using python-dulwich +cmd = "git commit -asm 'Version bump to %s'" % version output = run(cmd)[0].strip() -cmd = "svn copy %s %s/tags/%s_%s -m 'tagged %s release'" % \ - (url, repo, pkgname, tagstr, version) +# NOTE: This will use the default email address key. If you want to sign the tag +# using a different key, you will need to set 'signingkey' to the proper +# value in the [user] section of your git configuration. +cmd = "git tag -s v%s -m 'tagged %s release'" % (version, version) output = run(cmd)[0].strip() -cmd = "svn export %s" % expath -output = run(cmd)[0].strip() -cmd = "svn log -v %s/tags/%s_%s > %sChangelog" % \ - (repo, pkgname, tagstr, expath) -output = run(cmd)[0].strip() -cmd = "tar czf %s %s" % (tarname, expath) +cmd = "git archive --format=tar --prefix=%s-%s/ v%s | gzip > %s" % \ + (pkgname, version, version, tarname) output = run(cmd)[0].strip() cmd = "gpg --armor --output %s.gpg --detach-sig %s" % (tarname, tarname) output = run(cmd)[0].strip() -cmd = "scp %s* terra.mcs.anl.gov:/mcs/ftp/pub/bcfg" % tarname + +# upload release to ftp +cmd = "scp %s* terra.mcs.anl.gov:/mcs/ftp/pub/bcfg/" % tarname output = run(cmd)[0].strip() |