r408 - branches/rewrite/src

Sergio Talens-Oliag partial-mirror-devel@lists.alioth.debian.org
Tue, 14 Dec 2004 06:57:24 -0700


Author: sto
Date: Tue Dec 14 06:57:19 2004
New Revision: 408

Modified:
   branches/rewrite/src/PackageList.py
Log:
Add recursiveResolveDepends

Modified: branches/rewrite/src/PackageList.py
==============================================================================
--- branches/rewrite/src/PackageList.py	(original)
+++ branches/rewrite/src/PackageList.py	Tue Dec 14 06:57:19 2004
@@ -123,8 +123,9 @@
                 self._provides[p].remove(package)
 
 
-    def resolveDepends(self, pkglist):
-        for p in self.values():
+    def _resolveDepends(self, plist, pkglist):
+        newdeps = []
+        for p in plist:
             for field in ('Depends', 'Pre-Depends'):
                 if p.has_key(field):
                     for dependencies in p[field]:
@@ -136,7 +137,8 @@
                             # We have it on full list
                             # TODO: Add version cheking
                             if pkg in pkglist:
-                                self.add(pkglist[pkg])
+                                if pkg not in newdeps:
+                                    newdeps.append(pkglist[pkg])
                                 break
 
                             # When a package is not found, we should look
@@ -144,18 +146,36 @@
                             found = False
                             if pkglist._provides.has_key(pkg):
                                 for vpkg in pkglist._provides[pkg]:
-                                    if vpkg['Package'] in self:
+                                    if vpkg['Package'] in self or vpkg['Package'] in newdeps:
                                         found = True
                                         break
                                 else:
-                                    self.add(pkglist._provides[pkg][0])
+                                    if pkglist._provides[pkg][0] not in newdeps:
+                                        newdeps.append(pkglist._provides[pkg][0])
                                     found = True
                                     break
                                 if found:
                                     break
                         else:
                             print pkg, "unavailable. Your mirror could be broken seriously."
-                        
+        return newdeps
+
+    def resolveDepends(self, pkglist):
+        deplist = self._resolveDepends(self.values(), pkglist)
+        if len(deplist) > 0:
+            for p in deplist:
+                self.add(p)
+      
+    def recursiveResolveDepends(self, pkglist):
+        deplist = self._resolveDepends(self.values(), pkglist)
+        while len(deplist) > 0:
+            for p in deplist:
+                try:
+                    self.add(p)
+                except PackageAlreadyExists:
+                    pass
+            deplist = self._resolveDepends(deplist, pkglist)
+    
     def filter(self, condition):
         packages = PackageList()