[yum-cvs] yum/yum transactioninfo.py,1.28,1.29
Paul Nasrat
pnasrat at linux.duke.edu
Tue Jan 31 22:55:28 UTC 2006
Update of /home/groups/yum/cvs/yum/yum
In directory login1.linux.duke.edu:/tmp/cvs-serv11531
Modified Files:
transactioninfo.py
Log Message:
Add sortable transaction class
Index: transactioninfo.py
===================================================================
RCS file: /home/groups/yum/cvs/yum/yum/transactioninfo.py,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -r1.28 -r1.29
--- transactioninfo.py 26 Jan 2006 23:03:51 -0000 1.28
+++ transactioninfo.py 31 Jan 2006 22:55:26 -0000 1.29
@@ -289,6 +289,58 @@
self.add(txmbr)
return txmbr
+class SortableTransactionData(TransactionData):
+ """A transaction data implementing topological sort on it's members"""
+ def __init__(self):
+ # Cache of sort
+ self._sorted = []
+ # Current dependency path
+ self.path = []
+ # List of loops
+ self.loops = []
+ # Only resort if transaction data changed
+ self.changed = True
+ TransactionData.__init__(self)
+
+ def _visit(self, txmbr):
+ self.path.append(txmbr.name)
+ txmbr.sortColour = TX_GREY
+ for po in txmbr.depends_on:
+ vertex = self.getMembers(pkgtup=po.pkgtup)[0]
+ if vertex.sortColour == TX_GREY:
+ self._doLoop(vertex.name)
+ if vertex.sortColour == TX_WHITE:
+ self._visit(vertex)
+ txmbr.sortColour = TX_BLACK
+ self._sorted.insert(0, txmbr.pkgtup)
+
+ def _doLoop(self, name):
+ self.path.append(name)
+ loop = self.path[self.path.index(self.path[-1]):]
+ if len(loop) > 2:
+ self.loops.append(loop)
+
+ def add(self, txmember):
+ txmember.sortColour = TX_WHITE
+ TransactionData.add(self, txmember)
+ self.changed = True
+
+ def remove(self, pkgtup):
+ TransactionData.remove(self, pkgtup)
+ self.changed = True
+
+ def sort(self):
+ if self._sorted and not self.changed:
+ return self._sorted
+ self._sorted = []
+ self.changed = False
+ # loop over all members
+ for txmbr in self.getMembers():
+ if txmbr.sortColour == TX_WHITE:
+ self.path = [ ]
+ self._visit(txmbr)
+ self._sorted.reverse()
+ return self._sorted
class TransactionMember:
"""Class to describe a Transaction Member (a pkg to be installed/
More information about the Yum-cvs-commits
mailing list