* 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:
|
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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user