diff options
Diffstat (limited to 'models/openid-php-openid-782224d/admin/packagexml.py')
-rw-r--r-- | models/openid-php-openid-782224d/admin/packagexml.py | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/models/openid-php-openid-782224d/admin/packagexml.py b/models/openid-php-openid-782224d/admin/packagexml.py new file mode 100644 index 000000000..e83240594 --- /dev/null +++ b/models/openid-php-openid-782224d/admin/packagexml.py @@ -0,0 +1,155 @@ +#!/usr/bin/python + +import os +import os.path + +def makeMaintainerXML(leads): + maintainer_template = """ + <maintainer> + <user>%(user)s</user> + <name>%(name)s</name> + <email>%(email)s</email> + <role>lead</role> + </maintainer> + """ + + return "<maintainers>" + \ + "".join([maintainer_template % l for l in leads]) + \ + "</maintainers>" + +def makeLeadXML(leads): + lead_template = """ +<lead> + <name>%(name)s</name> + <user>%(user)s</user> + <email>%(email)s</email> + <active>%(active)s</active> +</lead> + """ + + 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 <file> XML + element for the given file or a <dir> element which contains other + <file> elements. + """ + + try: + entries = os.listdir(dir_or_file) + dir_role_s = '' + if dir_role: + dir_role_s = ' role="%s"' % (dir_role) + lines = ['%s<dir name="%s"%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</dir>' % (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<file name="%s" role="%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<file name="%s" role="%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 <package version> <xml template file> <release notes file>" % (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 = '<dir name="/">\n' + contentsXml + \ + "\n" + docsXml + '\n </dir>' + + contents_v1 = '<filelist><dir name="/" baseinstalldir="Auth">\n' + contentsXml + \ + "\n" + docsXml + '\n </dir></filelist>' + + 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 |