* fix: add forgotten Package (and MetaData) methods
* autoxmlize Dependency * name fixes
This commit is contained in:
+2
-2
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user