* fix: add forgotten Package (and MetaData) methods

* autoxmlize Dependency
* name fixes
This commit is contained in:
Eray Özkural
2005-11-03 14:35:02 +00:00
parent 69a4787526
commit 25b3306027
6 changed files with 52 additions and 69 deletions
+2 -2
View File
@@ -136,7 +136,7 @@ def package_graph(A, ignore_installed = False):
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.runtimeDependencies:
if ignore_installed: if ignore_installed:
if dependency.installed_satisfies_dep(dep): if dependency.installed_satisfies_dep(dep):
continue continue
@@ -168,7 +168,7 @@ def configure_pending():
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.runtimeDependencies:
if dep.package in G_f.vertices(): if dep.package in G_f.vertices():
G_f.add_dep(x, dep) G_f.add_dep(x, dep)
B = Bp B = Bp
+18 -40
View File
@@ -21,39 +21,30 @@ _ = __trans.ugettext
import pisi.context as ctx import pisi.context as ctx
import pisi.packagedb as packagedb import pisi.packagedb as packagedb
from pisi.version import Version from pisi.version import Version
from pisi.xmlext import * import pisi.xmlfile as xmlfile
from pisi.xmlfile import XmlFile
from pisi.util import Checks from pisi.util import Checks
class DepInfo: class Dependency:
def __init__(self, node = None):
if node:
self.package = getNodeText(node).strip()
self.versionFrom = getNodeAttribute(node, "versionFrom")
self.versionTo = getNodeAttribute(node, "versionTo")
self.releaseFrom = getNodeAttribute(node, "releaseFrom")
self.releaseTo = getNodeAttribute(node, "releaseTo")
else:
self.versionFrom = self.versionTo = None
self.releaseFrom = self.releaseTo = None
def elt(self, xml): __metaclass__ = xmlfile.autoxml
node = xml.newNode("Dependency")
xml.addText(node, self.package) s_Package = [xmlfile.String, xmlfile.mandatory]
a_versionFrom = [xmlfile.String, xmlfile.optional]
a_versionTo = [xmlfile.String, xmlfile.optional]
a_releaseFrom = [xmlfile.String, xmlfile.optional]
a_releaseTo = [xmlfile.String, xmlfile.optional]
def __str__(self):
s = self.package
if self.versionFrom: if self.versionFrom:
node.setAttribute("versionFrom", self.versionFrom) s += 'ver >= ' + self.versionFrom
if self.versionTo: if self.versionTo:
node.setAttribute("versionTo", self.versionTo) s += 'ver <= ' + self.versionTo
if self.releaseFrom: if self.releaseFrom:
node.setAttribute("releaseFrom", self.versionFrom) s += 'rel >= ' + self.releaseFrom
if self.releaseTo: if self.releaseTo:
node.setAttribute("releaseTo", self.versionTo) s += 'rel <= ' + self.releaseTo
return node return s
def has_errors(self):
if not self.package:
return [ _("Dependency should have a package string") ]
return []
def satisfies(self, pkg_name, version, release): def satisfies(self, pkg_name, version, release):
"""determine if a package ver. satisfies given dependency spec""" """determine if a package ver. satisfies given dependency spec"""
@@ -68,18 +59,6 @@ class DepInfo:
if self.releaseTo: if self.releaseTo:
ret &= v <= Version(self.releaseTo) ret &= v <= Version(self.releaseTo)
return ret 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
def dict_satisfies_dep(dict, depinfo): def dict_satisfies_dep(dict, depinfo):
"""determine if a package in a dictionary satisfies given dependency spec""" """determine if a package in a dictionary satisfies given dependency spec"""
@@ -122,7 +101,7 @@ def satisfies_dependencies(pkg, deps, sat = installed_satisfies_dep):
return True return True
def satisfies_runtime_deps(pkg): def satisfies_runtime_deps(pkg):
deps = packagedb.get_package(pkg).runtimeDeps deps = packagedb.get_package(pkg).runtimeDependencies
return satisfies_dependencies(pkg, deps) return satisfies_dependencies(pkg, deps)
def installable(pkg): def installable(pkg):
@@ -135,4 +114,3 @@ def installable(pkg):
return True return True
else: else:
return False return False
+14 -1
View File
@@ -26,7 +26,7 @@ _ = __trans.ugettext
import pisi.context as ctx import pisi.context as ctx
import pisi.specfile as specfile import pisi.specfile as specfile
import pisi.xmlfile as xmlfile import pisi.xmlfile as xmlfile
from pisi.util import Checks import pisi.util as util
class Source: class Source:
__metaclass__ = xmlfile.autoxml __metaclass__ = xmlfile.autoxml
@@ -69,6 +69,19 @@ class Package:
def __str__(self): def __str__(self):
s = specfile.Package.__str__(self) s = specfile.Package.__str__(self)
return s return s
def pkg_dir(self):
packageDir = self.name + '-' \
+ self.version + '-' \
+ self.release
return util.join_path( ctx.config.lib_dir(), packageDir)
def installable(self):
"""calculate if pkg is installable currently"""
import pisi.dependency
deps = self.runtimeDependencies
return pisi.dependency.satisfies_dependencies(self.name, deps)
class MetaData(xmlfile.XmlFile): class MetaData(xmlfile.XmlFile):
"""Package metadata. Metadata is composed of Specfile and various """Package metadata. Metadata is composed of Specfile and various
+4 -4
View File
@@ -92,7 +92,7 @@ def install_pkg_files(package_URIs):
dep_unsatis = [] dep_unsatis = []
for name in d_t.keys(): for name in d_t.keys():
pkg = d_t[name] pkg = d_t[name]
deps = pkg.runtimeDeps deps = pkg.runtimeDependencies
for dep in deps: for dep in deps:
if not satisfiesDep(dep): if not satisfiesDep(dep):
dep_unsatis.append(dep) dep_unsatis.append(dep)
@@ -136,7 +136,7 @@ in the respective order to satisfy extra dependencies:
Bp = set() Bp = set()
for x in B: for x in B:
pkg = packagedb.get_package(x) pkg = packagedb.get_package(x)
for dep in pkg.runtimeDeps: for dep in pkg.runtimeDependencies:
if dependency.dict_satisfies_dep(d_t, dep): if dependency.dict_satisfies_dep(d_t, 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))
@@ -209,7 +209,7 @@ def install_pkg_names(A):
Bp = set() Bp = set()
for x in B: for x in B:
pkg = packagedb.get_package(x) pkg = packagedb.get_package(x)
for dep in pkg.runtimeDeps: for dep in pkg.runtimeDependencies:
ctx.ui.debug('checking %s' % str(dep)) ctx.ui.debug('checking %s' % str(dep))
# we don't deal with already *satisfied* dependencies # we don't deal with already *satisfied* dependencies
if not dependency.installed_satisfies_dep(dep): if not dependency.installed_satisfies_dep(dep):
@@ -311,7 +311,7 @@ version %s, release %s, build %s.')
Bp = set() Bp = set()
for x in B: for x in B:
pkg = packagedb.get_package(x) pkg = packagedb.get_package(x)
for dep in pkg.runtimeDeps: for dep in pkg.runtimeDependencies:
# add packages that can be upgraded # add packages that can be upgraded
if dependency.repo_satisfies_dep(dep): if dependency.repo_satisfies_dep(dep):
#TODO: distinguish must upgrade and upgradable #TODO: distinguish must upgrade and upgradable
+1 -1
View File
@@ -72,7 +72,7 @@ class PackageDB(object):
def add_package(self, package_info): def add_package(self, package_info):
name = str(package_info.name) name = str(package_info.name)
self.d[name] = package_info self.d[name] = package_info
for dep in package_info.runtimeDeps: for dep in package_info.runtimeDependencies:
dep_name = str(dep.package) dep_name = str(dep.package)
if self.dr.has_key(dep_name): if self.dr.has_key(dep_name):
self.dr[dep_name].append( (name, dep) ) self.dr[dep_name].append( (name, dep) )
+13 -21
View File
@@ -30,7 +30,8 @@ from pisi.xmlext import *
import pisi.xmlfile as xmlfile import pisi.xmlfile as xmlfile
from pisi.xmlfile import XmlFile from pisi.xmlfile import XmlFile
import pisi.context as ctx import pisi.context as ctx
from pisi.dependency import DepInfo from pisi.dependency import Dependency
import pisi.dependency
from pisi.util import Checks from pisi.util import Checks
class Error(pisi.Error): class Error(pisi.Error):
@@ -109,26 +110,6 @@ class Path:
s += ", type=" + self.fileType s += ", type=" + self.fileType
return s return s
class Dependency:
s_Package = [xmlfile.String, xmlfile.mandatory]
a_versionFrom = [xmlfile.String, xmlfile.optional]
a_versionTo = [xmlfile.String, xmlfile.optional]
a_releaseFrom = [xmlfile.String, xmlfile.optional]
a_releaseTo = [xmlfile.String, xmlfile.optional]
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 ComarProvide: class ComarProvide:
s_om = [xmlfile.String, xmlfile.mandatory] s_om = [xmlfile.String, xmlfile.mandatory]
@@ -186,6 +167,17 @@ class Package:
t_AdditionalFiles = [ [AdditionalFile], xmlfile.optional] t_AdditionalFiles = [ [AdditionalFile], xmlfile.optional]
t_History = [ [Update], xmlfile.optional] t_History = [ [Update], xmlfile.optional]
def pkg_dir(self):
packageDir = self.name + '-' \
+ self.version + '-' \
+ self.release
return util.join_path( ctx.config.lib_dir(), packageDir)
def installable(self):
"""calculate if pkg is installable currently"""
deps = self.runtimeDependencies
return pisi.dependency.satisfies_dependencies(self.name, deps)
class SpecFile(XmlFile): class SpecFile(XmlFile):
__metaclass__ = xmlfile.autoxml #needed when we specify a superclass __metaclass__ = xmlfile.autoxml #needed when we specify a superclass