* 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:
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
+18 -40
View File
@@ -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
+14 -1
View File
@@ -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
+4 -4
View File
@@ -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
+1 -1
View File
@@ -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) )
+13 -21
View File
@@ -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