r331 - in branches/rewrite: . src

Otavio Salvador partial-mirror-devel@lists.alioth.debian.org
Wed, 17 Nov 2004 05:24:14 -0700


Author: otavio
Date: Wed Nov 17 05:24:13 2004
New Revision: 331

Modified:
   branches/rewrite/   (props changed)
   branches/rewrite/src/PackageList.py
Log:
 r296@nurf:  otavio | 2004-11-17T12:20:05.805409Z
 Add provides handle and resolveDepends method.


Modified: branches/rewrite/src/PackageList.py
==============================================================================
--- branches/rewrite/src/PackageList.py	(original)
+++ branches/rewrite/src/PackageList.py	Wed Nov 17 05:24:13 2004
@@ -17,6 +17,7 @@
 # $Id$
 
 import re
+import apt_pkg
 
 class PackageAlreadyExists(Exception):
     """
@@ -51,6 +52,7 @@
         self._name = {}
         self._subsection = {}
         self._priority = {}
+        self._provides = {}
     
     def __len__(self):
         return len(self._name)
@@ -91,6 +93,12 @@
         self._subsection[package['Section']].append(package)
         self._priority[package['Priority']].append(package)
 
+        if package.has_key('Provides'):
+            for p in package['Provides']:
+                if not self._provides.has_key(p):
+                    self._provides[p] = []
+                self._provides[p].append(package)
+
     def remove(self, package):
         if isinstance(package, str):
             if not self._name.has_key(package):
@@ -105,7 +113,45 @@
         self._subsection[package['Section']].remove(package)
         self._priority[package['Priority']].remove(package)
             
-            
+        if package.has_key('Provides'):
+            for p in package['Provides']:
+                if not self._provides.has_key(p):
+                    self._provides[p] = []
+                self._provides[p].remove(package)
+
+
+    def resolveDepends(self, pkglist):
+        for p in self.values():
+            if p.has_key('Depends'):
+                for dependencies in p['Depends']:
+                    for pkg, ver, oper in dependencies:
+                        # We already have it included
+                        if pkg in self:
+                            break
+
+                        # We have it on full list
+                        # TODO: Add version cheking
+                        if pkg in pkglist:
+                            self.add(pkglist[pkg])
+                            break
+                            
+                        # When a package is not found, we should look
+                        # if it's not a virtual package
+                        found = False
+                        if pkglist._provides.has_key(pkg):
+                            for vpkg in pkglist._provides[pkg]:
+                                if vpkg['Package'] in self:
+                                    found = True
+                                    break
+                            else:
+                                self.add(pkglist._provides[pkg][0])
+                                found = True
+                                break
+                            if found:
+                                break
+                    else:
+                        print pkg, "unavailable. Your mirror could be broken seriously."
+                        
     def filter(self, condition):
         packages = PackageList()