* 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
|
from version import Version
|
||||||
|
|
||||||
def satisfiesDep(pkg_name, depinfo):
|
def satisfiesDep(pkg_name, depinfo):
|
||||||
"""determine if a package satisfies given dependency spec"""
|
"""determine if package satisfies given dependency spec in installdb"""
|
||||||
if not installdb.is_installed(pkg_name):
|
|
||||||
return False
|
|
||||||
if not installdb.is_installed(depinfo.package):
|
if not installdb.is_installed(depinfo.package):
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
(version, release) = installdb.get_version(pkg_name)
|
pkg = packagedb.get_package(pkg_name)
|
||||||
ret = True
|
(version, release) = (pkg.version, pkg.release)
|
||||||
if depinfo.versionFrom:
|
return depinfo.satisfies(pkg_name, version, release)
|
||||||
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
|
|
||||||
|
|
||||||
def runtimeDeps(pkg):
|
def runtimeDeps(pkg):
|
||||||
return packagedb.get_package(pkg).runtimeDeps
|
return packagedb.get_package(pkg).runtimeDeps
|
||||||
@@ -33,7 +23,7 @@ def satisfiesRuntimeDeps(pkg):
|
|||||||
for dep in deps:
|
for dep in deps:
|
||||||
if not satisfiesDep(pkg, dep):
|
if not satisfiesDep(pkg, dep):
|
||||||
ui.error('Package %s does not satisfy dependency %s\n' %
|
ui.error('Package %s does not satisfy dependency %s\n' %
|
||||||
(pkg,dep.package))
|
(pkg,dep))
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|||||||
+11
-7
@@ -11,30 +11,34 @@ class PGraph(digraph):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(PGraph, self).__init__()
|
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):
|
def add_dep(self, pkg, depinfo):
|
||||||
pkg1data = None
|
pkg1data = None
|
||||||
if not pkg in self.vertices():
|
if not pkg in self.vertices():
|
||||||
pkg1 = packagedb.get_package(pkg)
|
pkg1 = packagedb.get_package(pkg)
|
||||||
|
pkg1data = (pkg1.version, pkg1.release)
|
||||||
pkg2data = None
|
pkg2data = None
|
||||||
if not pkg in self.vertices():
|
if not depinfo.package in self.vertices():
|
||||||
pkg2 = packagedb.get_package(depinfo.package)
|
pkg2 = packagedb.get_package(depinfo.package)
|
||||||
|
pkg2data = (pkg2.version, pkg2.release)
|
||||||
self.add_edge(str(pkg), str(depinfo.package), ('d', depinfo),
|
self.add_edge(str(pkg), str(depinfo.package), ('d', depinfo),
|
||||||
(pkg1.version, pkg1.release),
|
pkg1data, pkg2data )
|
||||||
(pkg2.version, pkg2.release) )
|
|
||||||
|
|
||||||
def add_conflict(self, pkg, conflinfo):
|
def add_conflict(self, pkg, conflinfo):
|
||||||
pkg1data = None
|
pkg1data = None
|
||||||
if not pkg in self.vertices():
|
if not pkg in self.vertices():
|
||||||
pkg1 = packagedb.get_package(pkg)
|
pkg1 = packagedb.get_package(pkg)
|
||||||
|
pkg1data = (pkg1.version, pkg1.release)
|
||||||
pkg2data = None
|
pkg2data = None
|
||||||
if not pkg in self.vertices():
|
if not pkg in self.vertices():
|
||||||
pkg2 = packagedb.get_package(depinfo.package)
|
pkg2 = packagedb.get_package(depinfo.package)
|
||||||
|
pkg2data = (pkg2.version, pkg2.release)
|
||||||
|
|
||||||
self.add_biedge(str(pkg), str(conflinfo.package), ('c', conflinfo)
|
self.add_biedge(str(pkg), str(conflinfo.package), ('c', conflinfo)
|
||||||
(pkg1.version, pkg1.release),
|
, pkg1data, pkg2data )
|
||||||
(pkg2.version, pkg2.release) )
|
|
||||||
|
|
||||||
|
|
||||||
def write_graphviz_vlabel(self, f, u):
|
def write_graphviz_vlabel(self, f, u):
|
||||||
(v, r) = self.vertex_data(u)
|
(v, r) = self.vertex_data(u)
|
||||||
|
|||||||
@@ -111,6 +111,32 @@ class DepInfo:
|
|||||||
if not self.package: return False
|
if not self.package: return False
|
||||||
return True
|
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:
|
class UpdateInfo:
|
||||||
def __init__(self, node = None):
|
def __init__(self, node = None):
|
||||||
if node:
|
if node:
|
||||||
|
|||||||
+6
-3
@@ -64,16 +64,19 @@ def install_pkg_names(A):
|
|||||||
# find the "install closure" graph of G_f by package
|
# find the "install closure" graph of G_f by package
|
||||||
# set A using packagedb
|
# set A using packagedb
|
||||||
print A
|
print A
|
||||||
|
for x in A:
|
||||||
|
G_f.add_package(x)
|
||||||
B = A
|
B = A
|
||||||
state = {}
|
#state = {}
|
||||||
while len(B) > 0:
|
while len(B) > 0:
|
||||||
Bp = set()
|
Bp = set()
|
||||||
for x in B:
|
for x in B:
|
||||||
pkg = packagedb.get_package(x)
|
pkg = packagedb.get_package(x)
|
||||||
#print pkg
|
print pkg
|
||||||
for dep in pkg.runtimeDeps:
|
for dep in pkg.runtimeDeps:
|
||||||
|
print 'checking ', dep
|
||||||
# we don't deal with satisfied dependencies
|
# 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():
|
if not dep.package in G_f.vertices():
|
||||||
Bp.add(str(dep.package))
|
Bp.add(str(dep.package))
|
||||||
G_f.add_dep(x, dep)
|
G_f.add_dep(x, dep)
|
||||||
|
|||||||
Reference in New Issue
Block a user