* depinfo'nun icine koy satisfies seysini :)

* pgraph'te yarim yamalak yazilmis bir code'u duzelt
  (israrla gosterdigi icin baris'a tesekkur ederim,
   beynimin bulandigi bu saatte duzeltme motivasyonu
   sagladi :)
* install edilecekleri kafadan graph'e ekle.
* bu sayede multi-install rutini calisir!
This commit is contained in:
Eray Özkural
2005-07-29 00:06:12 +00:00
parent 7d22bf4461
commit 48801607ac
4 changed files with 48 additions and 25 deletions
+5 -15
View File
@@ -7,23 +7,13 @@ from ui import ui
from version import Version
def satisfiesDep(pkg_name, depinfo):
"""determine if a package satisfies given dependency spec"""
if not installdb.is_installed(pkg_name):
return False
"""determine if package satisfies given dependency spec in installdb"""
if not installdb.is_installed(depinfo.package):
return False
else:
(version, release) = installdb.get_version(pkg_name)
ret = True
if depinfo.versionFrom:
ret &= Version(version) >= Version(depinfo.versionFrom)
if depinfo.versionTo:
ret &= Version(version) <= Version(depinfo.versionTo)
if depinfo.releaseFrom:
ret &= Version(release) <= Version(depinfo.releaseFrom)
if depinfo.releaseTo:
ret &= Version(release) <= Version(depinfo.releaseTo)
return ret
pkg = packagedb.get_package(pkg_name)
(version, release) = (pkg.version, pkg.release)
return depinfo.satisfies(pkg_name, version, release)
def runtimeDeps(pkg):
return packagedb.get_package(pkg).runtimeDeps
@@ -33,7 +23,7 @@ def satisfiesRuntimeDeps(pkg):
for dep in deps:
if not satisfiesDep(pkg, dep):
ui.error('Package %s does not satisfy dependency %s\n' %
(pkg,dep.package))
(pkg,dep))
return False
return True
+11 -7
View File
@@ -11,30 +11,34 @@ class PGraph(digraph):
def __init__(self):
super(PGraph, self).__init__()
def add_package(self, pkg):
pkg1 = packagedb.get_package(pkg)
self.add_vertex(str(pkg), (pkg1.version, pkg1.release))
def add_dep(self, pkg, depinfo):
pkg1data = None
if not pkg in self.vertices():
pkg1 = packagedb.get_package(pkg)
pkg1data = (pkg1.version, pkg1.release)
pkg2data = None
if not pkg in self.vertices():
if not depinfo.package in self.vertices():
pkg2 = packagedb.get_package(depinfo.package)
pkg2data = (pkg2.version, pkg2.release)
self.add_edge(str(pkg), str(depinfo.package), ('d', depinfo),
(pkg1.version, pkg1.release),
(pkg2.version, pkg2.release) )
pkg1data, pkg2data )
def add_conflict(self, pkg, conflinfo):
pkg1data = None
if not pkg in self.vertices():
pkg1 = packagedb.get_package(pkg)
pkg1data = (pkg1.version, pkg1.release)
pkg2data = None
if not pkg in self.vertices():
pkg2 = packagedb.get_package(depinfo.package)
pkg2data = (pkg2.version, pkg2.release)
self.add_biedge(str(pkg), str(conflinfo.package), ('c', conflinfo)
(pkg1.version, pkg1.release),
(pkg2.version, pkg2.release) )
, pkg1data, pkg2data )
def write_graphviz_vlabel(self, f, u):
(v, r) = self.vertex_data(u)
+26
View File
@@ -111,6 +111,32 @@ class DepInfo:
if not self.package: return False
return True
def satisfies(self, pkg_name, version, release):
"""determine if a package ver. satisfies given dependency spec"""
ret = True
from version import Version
if self.versionFrom:
ret &= Version(version) >= Version(depinfo.versionFrom)
if self.versionTo:
ret &= Version(version) <= Version(depinfo.versionTo)
if self.releaseFrom:
ret &= Version(release) <= Version(depinfo.releaseFrom)
if self.releaseTo:
ret &= Version(release) <= Version(depinfo.releaseTo)
return ret
def __str__(self):
s = self.package
if self.versionFrom:
s += 'ver >= ' + self.versionFrom
if self.versionTo:
s += 'ver <= ' + self.versionTo
if self.releaseFrom:
s += 'rel >= ' + self.releaseFrom
if self.releaseTo:
s += 'rel <= ' + self.releaseTo
return s
class UpdateInfo:
def __init__(self, node = None):
if node:
+6 -3
View File
@@ -64,16 +64,19 @@ def install_pkg_names(A):
# find the "install closure" graph of G_f by package
# set A using packagedb
print A
for x in A:
G_f.add_package(x)
B = A
state = {}
#state = {}
while len(B) > 0:
Bp = set()
for x in B:
pkg = packagedb.get_package(x)
#print pkg
print pkg
for dep in pkg.runtimeDeps:
print 'checking ', dep
# we don't deal with satisfied dependencies
if not dependency.satisfiesDep(pkg, dep):
if not dependency.satisfiesDep(x, dep):
if not dep.package in G_f.vertices():
Bp.add(str(dep.package))
G_f.add_dep(x, dep)