mirror of
https://git.yoctoproject.org/poky
synced 2026-05-31 12:49:46 +00:00
bitbake: Update to bitbake 1.8 branch head
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@3892 311d38ba-8fff-0310-9ca6-ca027cbcb966
This commit is contained in:
@@ -46,7 +46,6 @@ __all__ = [
|
||||
"pkgcmp",
|
||||
"dep_parenreduce",
|
||||
"dep_opconvert",
|
||||
"digraph",
|
||||
|
||||
# fetch
|
||||
"decodeurl",
|
||||
@@ -1128,184 +1127,6 @@ def dep_opconvert(mysplit, myuse):
|
||||
mypos += 1
|
||||
return newsplit
|
||||
|
||||
class digraph:
|
||||
"""beautiful directed graph object"""
|
||||
|
||||
def __init__(self):
|
||||
self.dict={}
|
||||
#okeys = keys, in order they were added (to optimize firstzero() ordering)
|
||||
self.okeys=[]
|
||||
self.__callback_cache=[]
|
||||
|
||||
def __str__(self):
|
||||
str = ""
|
||||
for key in self.okeys:
|
||||
str += "%s:\t%s\n" % (key, self.dict[key][1])
|
||||
return str
|
||||
|
||||
def addnode(self,mykey,myparent):
|
||||
if not mykey in self.dict:
|
||||
self.okeys.append(mykey)
|
||||
if myparent==None:
|
||||
self.dict[mykey]=[0,[]]
|
||||
else:
|
||||
self.dict[mykey]=[0,[myparent]]
|
||||
self.dict[myparent][0]=self.dict[myparent][0]+1
|
||||
return
|
||||
if myparent and (not myparent in self.dict[mykey][1]):
|
||||
self.dict[mykey][1].append(myparent)
|
||||
self.dict[myparent][0]=self.dict[myparent][0]+1
|
||||
|
||||
def delnode(self,mykey, ref = 1):
|
||||
"""Delete a node
|
||||
|
||||
If ref is 1, remove references to this node from other nodes.
|
||||
If ref is 2, remove nodes that reference this node."""
|
||||
if not mykey in self.dict:
|
||||
return
|
||||
for x in self.dict[mykey][1]:
|
||||
self.dict[x][0]=self.dict[x][0]-1
|
||||
del self.dict[mykey]
|
||||
while 1:
|
||||
try:
|
||||
self.okeys.remove(mykey)
|
||||
except ValueError:
|
||||
break
|
||||
if ref:
|
||||
__kill = []
|
||||
for k in self.okeys:
|
||||
if mykey in self.dict[k][1]:
|
||||
if ref == 1 or ref == 2:
|
||||
self.dict[k][1].remove(mykey)
|
||||
if ref == 2:
|
||||
__kill.append(k)
|
||||
for l in __kill:
|
||||
self.delnode(l, ref)
|
||||
|
||||
def allnodes(self):
|
||||
"returns all nodes in the dictionary"
|
||||
keys = self.dict.keys()
|
||||
ret = []
|
||||
for key in keys:
|
||||
ret.append(key)
|
||||
ret.sort()
|
||||
return ret
|
||||
|
||||
def firstzero(self):
|
||||
"returns first node with zero references, or NULL if no such node exists"
|
||||
for x in self.okeys:
|
||||
if self.dict[x][0]==0:
|
||||
return x
|
||||
return None
|
||||
|
||||
def firstnonzero(self):
|
||||
"returns first node with nonzero references, or NULL if no such node exists"
|
||||
for x in self.okeys:
|
||||
if self.dict[x][0]!=0:
|
||||
return x
|
||||
return None
|
||||
|
||||
|
||||
def allzeros(self):
|
||||
"returns all nodes with zero references, or NULL if no such node exists"
|
||||
zerolist = []
|
||||
for x in self.dict.keys():
|
||||
if self.dict[x][0]==0:
|
||||
zerolist.append(x)
|
||||
return zerolist
|
||||
|
||||
def hasallzeros(self):
|
||||
"returns 0/1, Are all nodes zeros? 1 : 0"
|
||||
zerolist = []
|
||||
for x in self.dict.keys():
|
||||
if self.dict[x][0]!=0:
|
||||
return 0
|
||||
return 1
|
||||
|
||||
def empty(self):
|
||||
if len(self.dict)==0:
|
||||
return 1
|
||||
return 0
|
||||
|
||||
def hasnode(self,mynode):
|
||||
return mynode in self.dict
|
||||
|
||||
def getparents(self, item):
|
||||
if not self.hasnode(item):
|
||||
return []
|
||||
parents = self.dict[item][1]
|
||||
ret = []
|
||||
for parent in parents:
|
||||
ret.append(parent)
|
||||
ret.sort()
|
||||
return ret
|
||||
|
||||
def getchildren(self, item):
|
||||
if not self.hasnode(item):
|
||||
return []
|
||||
children = [i for i in self.okeys if item in self.getparents(i)]
|
||||
return children
|
||||
|
||||
def walkdown(self, item, callback, debug = None, usecache = False):
|
||||
if not self.hasnode(item):
|
||||
return 0
|
||||
|
||||
if usecache:
|
||||
if self.__callback_cache.count(item):
|
||||
if debug:
|
||||
print "hit cache for item: %s" % item
|
||||
return 1
|
||||
|
||||
parents = self.getparents(item)
|
||||
children = self.getchildren(item)
|
||||
for p in parents:
|
||||
if p in children:
|
||||
# print "%s is both parent and child of %s" % (p, item)
|
||||
if usecache:
|
||||
self.__callback_cache.append(p)
|
||||
ret = callback(self, p)
|
||||
if ret == 0:
|
||||
return 0
|
||||
continue
|
||||
if item == p:
|
||||
print "eek, i'm my own parent!"
|
||||
return 0
|
||||
if debug:
|
||||
print "item: %s, p: %s" % (item, p)
|
||||
ret = self.walkdown(p, callback, debug, usecache)
|
||||
if ret == 0:
|
||||
return 0
|
||||
if usecache:
|
||||
self.__callback_cache.append(item)
|
||||
return callback(self, item)
|
||||
|
||||
def walkup(self, item, callback):
|
||||
if not self.hasnode(item):
|
||||
return 0
|
||||
|
||||
parents = self.getparents(item)
|
||||
children = self.getchildren(item)
|
||||
for c in children:
|
||||
if c in parents:
|
||||
ret = callback(self, item)
|
||||
if ret == 0:
|
||||
return 0
|
||||
continue
|
||||
if item == c:
|
||||
print "eek, i'm my own child!"
|
||||
return 0
|
||||
ret = self.walkup(c, callback)
|
||||
if ret == 0:
|
||||
return 0
|
||||
return callback(self, item)
|
||||
|
||||
def copy(self):
|
||||
mygraph=digraph()
|
||||
for x in self.dict.keys():
|
||||
mygraph.dict[x]=self.dict[x][:]
|
||||
mygraph.okeys=self.okeys[:]
|
||||
return mygraph
|
||||
|
||||
if __name__ == "__main__":
|
||||
import doctest, bb
|
||||
doctest.testmod(bb)
|
||||
|
||||
Reference in New Issue
Block a user