#!/usr/bin/python import os import os.path def makeMaintainerXML(leads): maintainer_template = """ %(user)s %(name)s %(email)s lead """ return "" + \ "".join([maintainer_template % l for l in leads]) + \ "" def makeLeadXML(leads): lead_template = """ %(name)s %(user)s %(email)s %(active)s """ return "".join([lead_template % l for l in leads]) INDENT_STRING = " " def buildContentsXMLFordir(dir_or_file, roles, depth=0, dir_role=None, all_files=False): """ Returns a list of strings, each of which is either a XML element for the given file or a element which contains other elements. """ try: entries = os.listdir(dir_or_file) dir_role_s = '' if dir_role: dir_role_s = ' role="%s"' % (dir_role) lines = ['%s' % (INDENT_STRING * depth, os.path.basename(dir_or_file), dir_role_s)] for entry in entries: lines += buildContentsXMLFordir(dir_or_file + os.sep + entry, roles, depth + 1, dir_role, all_files) lines.append('%s' % (INDENT_STRING * depth)) return lines except OSError: try: extension = dir_or_file.split(".")[-1] except: if not all_files: return [] if all_files and dir_role: return ['%s' % (INDENT_STRING * depth, os.path.basename(dir_or_file), dir_role)] elif extension in roles: # Ends in an extension we care about return ['%s' % (INDENT_STRING * depth, os.path.basename(dir_or_file), roles[extension])] else: return [] def buildContentsXML(roles, *dirs): lines = [] for directory in dirs: lines.append("\n".join(buildContentsXMLFordir(directory, roles, 1))) return "\n".join(lines) def buildDocsXML(*dirs): lines = [] for directory in dirs: lines.append("\n".join(buildContentsXMLFordir(directory, {}, 1, 'doc', all_files=True))) return "\n".join(lines) if __name__ == "__main__": def usage(progname): print "Usage: %s " % (progname) import sys import time try: import xmlconfig except: print "Could not import XML configuration module xmlconfig" sys.exit(1) # Expect sys.argv[2] to be the name of the XML file template to # use for processing. try: template_f = open(sys.argv[2], 'r') except Exception, e: usage(sys.argv[0]) print "Could not open template file:", str(e) sys.exit(1) # Expect sys.argv[1] to be the version number to include in the # package.xml file. try: version = sys.argv[1] except: usage(sys.argv[0]) sys.exit(2) # Expect sys.argv[3] to be the name of the release notes file. try: release_file = sys.argv[3] release_file_h = open(release_file, 'r') release_notes = release_file_h.read().strip() release_file_h.close() except Exception, e: usage(sys.argv[0]) print str(e) sys.exit(3) data = xmlconfig.__dict__.copy() contentsXml = buildContentsXML({'php': 'php'}, *xmlconfig.contents_dirs) docsXml = buildDocsXML(*xmlconfig.docs_dirs) contents = '\n' + contentsXml + \ "\n" + docsXml + '\n ' contents_v1 = '\n' + contentsXml + \ "\n" + docsXml + '\n ' data['contents'] = contents data['contents_version_1'] = contents_v1 data['leads'] = makeLeadXML(xmlconfig.leads) data['maintainers'] = makeMaintainerXML(xmlconfig.leads) data['date'] = time.strftime("%Y-%m-%d") data['version'] = version data['uri'] = "%s%s-%s.tgz" % (data['package_base_uri'], data['package_name'], version) data['release_notes'] = release_notes template_data = template_f.read() print template_data % data