85 lines
2.6 KiB
Python
Executable File
85 lines
2.6 KiB
Python
Executable File
#!/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"))
|