aboutsummaryrefslogtreecommitdiff
path: root/models/openid-php-openid-782224d/admin/packagexml.py
diff options
context:
space:
mode:
Diffstat (limited to 'models/openid-php-openid-782224d/admin/packagexml.py')
-rw-r--r--models/openid-php-openid-782224d/admin/packagexml.py155
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