Hata 466 için yama:
python dom'un getElementsByTagName metodu verilen tag ismini tree boyunca aşağı doğru arıyor ve her karşılaştığı yerdekini topluyor. Bu davranış yüzünden aynı tag ismini farklı yerlerde kullanınca problemler çıkıyor. xmlext'e getTagByName diye bir fonksiyon ekledim, bu sadece verilen node'un ilk seviye çocuklarında arama yapıyor, diğer fonksiyonları da bunu kullanacak şekilde değiştirdim. Bir tek metadata.py içinde PackageInfo versiyon çekmek için tree boyunca tarama davranışını kullanıyordu, onu da full path kullanacak şekilde değiştirdim. Eğer öbür türlü kalması gerekiyorsa, bu davranışta ayrı bir fonksiyon koyarız xmlext'e. repostats ve beta-light.sh ile test ettim, bir sorun yok.
This commit is contained in:
+3
-3
@@ -50,9 +50,9 @@ class PackageInfo(specfile.PackageInfo):
|
||||
def __init__(self, node = None):
|
||||
if node:
|
||||
specfile.PackageInfo.__init__(self, node)
|
||||
self.version = getNodeText(node, "Version")
|
||||
self.release = getNodeText(node, "Release")
|
||||
build_ = getNodeText(node, "Build")
|
||||
self.version = getNodeText(node, "History/Update/Version")
|
||||
self.release = getNodeText(node, "History/Update/Release")
|
||||
build_ = getNodeText(node, "History/Update/Build")
|
||||
if build_ != None:
|
||||
self.build = int(build_)
|
||||
else:
|
||||
|
||||
+12
-11
@@ -26,11 +26,12 @@ class XmlError(pisi.Error):
|
||||
|
||||
def getNodeAttribute(node, attrname):
|
||||
"""get named attribute from DOM node"""
|
||||
for i in range(node.attributes.length):
|
||||
attr = node.attributes.item(i)
|
||||
if attr.name == attrname:
|
||||
return attr.childNodes[0].data
|
||||
return None
|
||||
if not node.hasAttribute(attrname):
|
||||
return None
|
||||
return node.getAttribute(attrname)
|
||||
|
||||
def getTagByName(parent, childName):
|
||||
return [x for x in parent.childNodes if x.nodeType == x.ELEMENT_NODE if x.tagName == childName]
|
||||
|
||||
def getNodeText(node, tagpath = ""):
|
||||
"""get the first child and expect it to be text!"""
|
||||
@@ -69,13 +70,13 @@ def getNode(node, tagpath):
|
||||
# iterative code to search for the path
|
||||
|
||||
# get DOM for top node
|
||||
nodeList = node.getElementsByTagName(tags[0])
|
||||
nodeList = getTagByName(node, tags[0])
|
||||
if len(nodeList) == 0:
|
||||
return None # not found
|
||||
|
||||
node = nodeList[0] # discard other matches
|
||||
for tag in tags[1:]:
|
||||
nodeList = node.getElementsByTagName(tag)
|
||||
nodeList = getTagByName(node, tag)
|
||||
if len(nodeList) == 0:
|
||||
return None
|
||||
else:
|
||||
@@ -91,12 +92,12 @@ def getAllNodes(node, tagPath):
|
||||
if len(tags) == 0:
|
||||
return []
|
||||
|
||||
nodeList = node.getElementsByTagName(tags[0])
|
||||
nodeList = getTagByName(node, tags[0])
|
||||
if len(nodeList) == 0:
|
||||
return []
|
||||
|
||||
for tag in tags[1:]:
|
||||
results = map(lambda x: x.getElementsByTagName(tag),nodeList)
|
||||
results = map(lambda x: getTagByName(x, tag), nodeList)
|
||||
nodeList = []
|
||||
for x in results:
|
||||
nodeList.extend(x)
|
||||
@@ -135,7 +136,7 @@ def addNode(dom, node, tagpath, newnode = None):
|
||||
# iterative code to search for the path
|
||||
|
||||
# get DOM for top node
|
||||
nodeList = node.getElementsByTagName(tags[0])
|
||||
nodeList = getTagByName(node, tags[0])
|
||||
|
||||
if len(nodeList) == 0:
|
||||
return addTagPath(dom, node, tags, newnode)
|
||||
@@ -144,7 +145,7 @@ def addNode(dom, node, tagpath, newnode = None):
|
||||
tags.pop(0)
|
||||
while len(tags)>0:
|
||||
tag = tags.pop(0)
|
||||
nodeList = node.getElementsByTagName(tag)
|
||||
nodeList = getTagByName(node, tag)
|
||||
if len(nodeList) == 0: # couldn't find
|
||||
tags.insert(0, tag) # put it back in
|
||||
return addTagPath(dom, node, tags, newnode)
|
||||
|
||||
Reference in New Issue
Block a user