From 25b3306027529a4d93d4fe330f05024da4fa2d35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eray=20=C3=96zkural?= Date: Thu, 3 Nov 2005 14:35:02 +0000 Subject: [PATCH] * fix: add forgotten Package (and MetaData) methods * autoxmlize Dependency * name fixes --- pisi/api.py | 4 ++-- pisi/dependency.py | 58 ++++++++++++++-------------------------------- pisi/metadata.py | 15 +++++++++++- pisi/operations.py | 8 +++---- pisi/packagedb.py | 2 +- pisi/specfile.py | 34 +++++++++++---------------- 6 files changed, 52 insertions(+), 69 deletions(-) diff --git a/pisi/api.py b/pisi/api.py index 8438e87f..fc7e5c44 100644 --- a/pisi/api.py +++ b/pisi/api.py @@ -136,7 +136,7 @@ def package_graph(A, ignore_installed = False): for x in B: pkg = packagedb.get_package(x) #print pkg - for dep in pkg.runtimeDeps: + for dep in pkg.runtimeDependencies: if ignore_installed: if dependency.installed_satisfies_dep(dep): continue @@ -168,7 +168,7 @@ def configure_pending(): for x in B: pkg = packagedb.get_package(x) #print pkg - for dep in pkg.runtimeDeps: + for dep in pkg.runtimeDependencies: if dep.package in G_f.vertices(): G_f.add_dep(x, dep) B = Bp diff --git a/pisi/dependency.py b/pisi/dependency.py index f5b99c08..fd2ec3a6 100644 --- a/pisi/dependency.py +++ b/pisi/dependency.py @@ -21,39 +21,30 @@ _ = __trans.ugettext import pisi.context as ctx import pisi.packagedb as packagedb from pisi.version import Version -from pisi.xmlext import * -from pisi.xmlfile import XmlFile +import pisi.xmlfile as xmlfile from pisi.util import Checks -class DepInfo: - 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 +class Dependency: - def elt(self, xml): - node = xml.newNode("Dependency") - xml.addText(node, self.package) + __metaclass__ = xmlfile.autoxml + + 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: - node.setAttribute("versionFrom", self.versionFrom) + s += 'ver >= ' + self.versionFrom if self.versionTo: - node.setAttribute("versionTo", self.versionTo) + s += 'ver <= ' + self.versionTo if self.releaseFrom: - node.setAttribute("releaseFrom", self.versionFrom) + s += 'rel >= ' + self.releaseFrom if self.releaseTo: - node.setAttribute("releaseTo", self.versionTo) - return node - - def has_errors(self): - if not self.package: - return [ _("Dependency should have a package string") ] - return [] + s += 'rel <= ' + self.releaseTo + return s def satisfies(self, pkg_name, version, release): """determine if a package ver. satisfies given dependency spec""" @@ -68,18 +59,6 @@ class DepInfo: if self.releaseTo: ret &= v <= Version(self.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 def dict_satisfies_dep(dict, depinfo): """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 def satisfies_runtime_deps(pkg): - deps = packagedb.get_package(pkg).runtimeDeps + deps = packagedb.get_package(pkg).runtimeDependencies return satisfies_dependencies(pkg, deps) def installable(pkg): @@ -135,4 +114,3 @@ def installable(pkg): return True else: return False - diff --git a/pisi/metadata.py b/pisi/metadata.py index 327348c4..3c9d2a71 100644 --- a/pisi/metadata.py +++ b/pisi/metadata.py @@ -26,7 +26,7 @@ _ = __trans.ugettext import pisi.context as ctx import pisi.specfile as specfile import pisi.xmlfile as xmlfile -from pisi.util import Checks +import pisi.util as util class Source: __metaclass__ = xmlfile.autoxml @@ -69,6 +69,19 @@ class Package: def __str__(self): s = specfile.Package.__str__(self) 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): """Package metadata. Metadata is composed of Specfile and various diff --git a/pisi/operations.py b/pisi/operations.py index fe807f26..20bcf949 100644 --- a/pisi/operations.py +++ b/pisi/operations.py @@ -92,7 +92,7 @@ def install_pkg_files(package_URIs): dep_unsatis = [] for name in d_t.keys(): pkg = d_t[name] - deps = pkg.runtimeDeps + deps = pkg.runtimeDependencies for dep in deps: if not satisfiesDep(dep): dep_unsatis.append(dep) @@ -136,7 +136,7 @@ in the respective order to satisfy extra dependencies: Bp = set() for x in B: pkg = packagedb.get_package(x) - for dep in pkg.runtimeDeps: + for dep in pkg.runtimeDependencies: if dependency.dict_satisfies_dep(d_t, dep): if not dep.package in G_f.vertices(): Bp.add(str(dep.package)) @@ -209,7 +209,7 @@ def install_pkg_names(A): Bp = set() for x in B: pkg = packagedb.get_package(x) - for dep in pkg.runtimeDeps: + for dep in pkg.runtimeDependencies: ctx.ui.debug('checking %s' % str(dep)) # we don't deal with already *satisfied* dependencies if not dependency.installed_satisfies_dep(dep): @@ -311,7 +311,7 @@ version %s, release %s, build %s.') Bp = set() for x in B: pkg = packagedb.get_package(x) - for dep in pkg.runtimeDeps: + for dep in pkg.runtimeDependencies: # add packages that can be upgraded if dependency.repo_satisfies_dep(dep): #TODO: distinguish must upgrade and upgradable diff --git a/pisi/packagedb.py b/pisi/packagedb.py index bbc2e72a..da2b820d 100644 --- a/pisi/packagedb.py +++ b/pisi/packagedb.py @@ -72,7 +72,7 @@ class PackageDB(object): def add_package(self, package_info): name = str(package_info.name) self.d[name] = package_info - for dep in package_info.runtimeDeps: + for dep in package_info.runtimeDependencies: dep_name = str(dep.package) if self.dr.has_key(dep_name): self.dr[dep_name].append( (name, dep) ) diff --git a/pisi/specfile.py b/pisi/specfile.py index 1e2dbbdd..d3bdd94a 100644 --- a/pisi/specfile.py +++ b/pisi/specfile.py @@ -30,7 +30,8 @@ from pisi.xmlext import * import pisi.xmlfile as xmlfile from pisi.xmlfile import XmlFile import pisi.context as ctx -from pisi.dependency import DepInfo +from pisi.dependency import Dependency +import pisi.dependency from pisi.util import Checks class Error(pisi.Error): @@ -109,26 +110,6 @@ class Path: s += ", type=" + self.fileType 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: s_om = [xmlfile.String, xmlfile.mandatory] @@ -186,6 +167,17 @@ class Package: t_AdditionalFiles = [ [AdditionalFile], 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): __metaclass__ = xmlfile.autoxml #needed when we specify a superclass