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()