- get_replaces

This commit is contained in:
Faik Uygur
2007-06-29 13:47:00 +00:00
parent ef6201d351
commit 563c0114b0
2 changed files with 13 additions and 32 deletions
-7
View File
@@ -244,9 +244,6 @@ def is_upgradable(name, ignore_build = False):
except KeyboardInterrupt:
raise
except Exception, e: #FIXME: what exception could we catch here, replace with that.
# it may be a replaced package
if ctx.packagedb.has_replacement(name):
return True
return False
if ignore_build or (not build) or (not pkg.build):
@@ -398,10 +395,6 @@ def upgrade_pkg_names(A = []):
(version, release, build) = ctx.installdb.get_version(x)
if ctx.packagedb.has_package(x):
pkg = ctx.packagedb.get_package(x)
elif ctx.packagedb.has_replacement(x):
Ap.append(ctx.packagedb.get_replacement(x))
replaced.append(x)
continue
else:
ctx.ui.info(_('Package %s is not available in repositories.') % x, True)
continue
+13 -25
View File
@@ -40,7 +40,7 @@ class PackageDB(object):
def __init__(self):
self.d = pisi.itembyrepodb.ItemByRepoDB('package')
self.dr = pisi.itembyrepodb.ItemByRepoDB('revdep')
self.drp = pisi.itembyrepodb.ItemByRepoDB('replacement')
self.drp = pisi.itembyrepodb.ItemByRepoDB('replaces')
def close(self):
self.d.close()
@@ -67,6 +67,16 @@ class PackageDB(object):
def which_repo(self, name, txn = None):
return self.d.which_repo(name, txn=txn)
def get_replaces(self, repo = None):
pairs = {}
for pkg_name in self.drp.list(repo):
replaces = self.drp.get_item(pkg_name, repo)
for r in replaces:
if pisi.replace.installed_package_replaced(r):
pairs[r.package] = pkg_name
return pairs
def get_rev_deps(self, name, repo = None, txn = None):
if self.dr.has_key(name, repo, txn=txn):
return self.dr.get_item(name, repo, txn=txn)
@@ -80,25 +90,6 @@ class PackageDB(object):
else:
return []
# If an installed package is replaced by any package in repository, mark this
# package for replacement in a later upgrade operation.
# @pkg: The package that replaces other packages
def mark_replaced_packages(self, pkg, repo, txn=None):
for repinfo in pkg.replaces:
# test if the package from this repo replaces an installed package
if pisi.replace.installed_package_replaced(repinfo):
replacedBy = pkg.name
self.drp.add_item(repinfo.package, replacedBy, repo, txn)
def has_replacement(self, name, repo=None, txn=None):
return self.drp.has_key(name, repo, txn=txn)
def get_replacement(self, name, repo=None, txn=None):
try:
return self.drp.get_item(name, repo, txn=txn)
except pisi.itembyrepodb.NotfoundError:
raise Error(_('Package %s has no replacement found in repository') % name)
def list_packages(self, repo=None):
return self.d.list(repo)
@@ -118,7 +109,7 @@ class PackageDB(object):
self.dr.add_item(dep_name, [ (name, dep) ], repo, txn)
if package_info.replaces:
self.mark_replaced_packages(package_info, repo, txn=txn)
self.drp.add_item(name, package_info.replaces, repo, txn)
# add component
ctx.componentdb.add_package(package_info.partOf, package_info.name, repo, txn)
@@ -128,6 +119,7 @@ class PackageDB(object):
def clear(self, txn = None):
self.d.clear()
self.dr.clear()
self.drp.clear()
def remove_package(self, name, repo = None, txn = None):
name = str(name)
@@ -149,10 +141,6 @@ class PackageDB(object):
# all the list members are removed.
self.dr.remove_item(dep_name, repo, txn=txn)
# remove replace marker info for this package
if self.drp.has_key(name, repo, txn):
self.drp.remove_item(name, repo, txn=txn)
# remove from component
ctx.componentdb.remove_package(package_info.partOf, package_info.name, repo, txn)