diff --git a/tools/convert_history.py b/tools/convert_history.py new file mode 100755 index 00000000..d4a64380 --- /dev/null +++ b/tools/convert_history.py @@ -0,0 +1,84 @@ +#!/usr/bin/python + +import sys +import os +import codecs +import xml.dom.minidom as mdom + +def find_pspecs(folder): + paks = [] + for root, dirs, files in os.walk(folder): + if "pspec.xml" in files: + paks.append(root) + # dont walk into the versioned stuff + if ".svn" in dirs: + dirs.remove(".svn") + return paks + +def addText(doc, parent, text): + cdata =doc.createTextNode(text) + parent.appendChild(cdata) + +def getTags(parent, childName): + return [x for x in parent.childNodes if x.nodeType == x.ELEMENT_NODE if x.tagName == childName] + +def getNodeText(node, tag, default=None): + try: + c = getTags(node, tag)[0].firstChild.data + except: + c = default + return c + +def newNode(doc, tag, text): + node = doc.createElement(tag) + cdata = doc.createTextNode(text) + node.appendChild(cdata) + return node + +def fixIndent(doc, node): + for x in node.childNodes: + if x.nodeType == x.ELEMENT_NODE: + if x.tagName == "Update": + fixIndent(doc, x) + else: + x.data = "\n" + x.data[5:] + +def fixTags(doc, hist): + for update in hist.childNodes: + if update.nodeType == update.ELEMENT_NODE: + rno = getNodeText(update, "Release") + update.setAttribute("release", rno) + if rno == "1": + comment = newNode(doc, "Comment", "First release.") + paker = getTags(getTags(doc.documentElement, "Source")[0], "Packager")[0] + name = newNode(doc, "Name", getNodeText(paker, "Name")) + email = newNode(doc, "Email", getNodeText(paker, "Email")) + else: + comment = newNode(doc, "Comment", "FIXHISTORY") + name = newNode(doc, "Name", "FIXHISTORY") + email = newNode(doc, "Email", "FIXHISTORY") + update.replaceChild(comment, getTags(update, "Release")[0]) + addText(doc, update, " ") + update.appendChild(name) + addText(doc, update, "\n ") + update.appendChild(email) + addText(doc, update, "\n ") + +def fixPspec(path): + doc = mdom.parse(path) + pisi = doc.documentElement + source = getTags(pisi, "Source")[0] + history = getTags(source, "History")[0] + item = source.removeChild(history) + addText(doc, pisi, "\n ") + fixIndent(doc, item) + fixTags(doc, item) + pisi.appendChild(item) + addText(doc, pisi, "\n") + f = codecs.open(path,'w', "utf-8") + f.write(doc.toxml()) + f.close() + +pakages = find_pspecs(sys.argv[1]) +for pak in pakages: + fixPspec(os.path.join(pak, "pspec.xml"))