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:
Gürer Özen
2005-09-16 07:39:44 +00:00
parent 1928e6b80b
commit 0fb6fe5a97
2 changed files with 15 additions and 14 deletions
+3 -3
View File
@@ -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
View File
@@ -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)