* 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:
+5
-15
@@ -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
@@ -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)
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user