- Remove Obsoletes
This commit is contained in:
@@ -126,6 +126,7 @@ class Index(xmlfile.XmlFile):
|
|||||||
for comp in self.components:
|
for comp in self.components:
|
||||||
ctx.componentdb.update_component(comp, repo, txn)
|
ctx.componentdb.update_component(comp, repo, txn)
|
||||||
ctx.packagedb.remove_repo(repo, txn=txn)
|
ctx.packagedb.remove_repo(repo, txn=txn)
|
||||||
|
ctx.packagedb.add_obsoletes(self.distribution.obsoletes, repo, txn=txn)
|
||||||
for pkg in self.packages:
|
for pkg in self.packages:
|
||||||
ctx.packagedb.add_package(pkg, repo, txn=txn)
|
ctx.packagedb.add_package(pkg, repo, txn=txn)
|
||||||
update_progress()
|
update_progress()
|
||||||
|
|||||||
@@ -226,6 +226,12 @@ def remove_conflicting_packages(conflicts):
|
|||||||
if remove(conflicts, ignore_dep=True, ignore_safety=True):
|
if remove(conflicts, ignore_dep=True, ignore_safety=True):
|
||||||
raise Error(_("Conflicts remain"))
|
raise Error(_("Conflicts remain"))
|
||||||
|
|
||||||
|
def remove_obsoleted_packages():
|
||||||
|
obsoletes = filter(ctx.installdb.is_installed, ctx.packagedb.get_obsoletes())
|
||||||
|
if obsoletes:
|
||||||
|
if remove(obsoletes, ignore_dep=True, ignore_safety=True):
|
||||||
|
raise Error(_("Obsoleted packages remaining"))
|
||||||
|
|
||||||
def check_conflicts(order, packagedb):
|
def check_conflicts(order, packagedb):
|
||||||
"""check if upgrading to the latest versions will cause havoc
|
"""check if upgrading to the latest versions will cause havoc
|
||||||
done in a simple minded way without regard for dependencies of
|
done in a simple minded way without regard for dependencies of
|
||||||
@@ -498,6 +504,8 @@ def upgrade_pkg_names(A = []):
|
|||||||
|
|
||||||
if replaces:
|
if replaces:
|
||||||
remove_replaced_packages(order, replaces)
|
remove_replaced_packages(order, replaces)
|
||||||
|
|
||||||
|
remove_obsoleted_packages()
|
||||||
|
|
||||||
for path in paths:
|
for path in paths:
|
||||||
ctx.ui.info(util.colorize(_("Installing %d / %d") % (paths.index(path)+1, len(paths)), "yellow"))
|
ctx.ui.info(util.colorize(_("Installing %d / %d") % (paths.index(path)+1, len(paths)), "yellow"))
|
||||||
|
|||||||
@@ -40,16 +40,19 @@ class PackageDB(object):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.d = pisi.itembyrepodb.ItemByRepoDB('package')
|
self.d = pisi.itembyrepodb.ItemByRepoDB('package')
|
||||||
self.dr = pisi.itembyrepodb.ItemByRepoDB('revdep')
|
self.dr = pisi.itembyrepodb.ItemByRepoDB('revdep')
|
||||||
|
self.do = pisi.itembyrepodb.ItemByRepoDB('obsoleted')
|
||||||
self.drp = pisi.itembyrepodb.ItemByRepoDB('replaces')
|
self.drp = pisi.itembyrepodb.ItemByRepoDB('replaces')
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
self.d.close()
|
self.d.close()
|
||||||
self.dr.close()
|
self.dr.close()
|
||||||
|
self.do.close()
|
||||||
self.drp.close()
|
self.drp.close()
|
||||||
|
|
||||||
def destroy(self):
|
def destroy(self):
|
||||||
self.d.destroy()
|
self.d.destroy()
|
||||||
self.dr.destroy()
|
self.dr.destroy()
|
||||||
|
self.do.destroy()
|
||||||
self.drp.destroy()
|
self.drp.destroy()
|
||||||
|
|
||||||
def has_package(self, name, repo=None, txn = None):
|
def has_package(self, name, repo=None, txn = None):
|
||||||
@@ -67,6 +70,14 @@ class PackageDB(object):
|
|||||||
def which_repo(self, name, txn = None):
|
def which_repo(self, name, txn = None):
|
||||||
return self.d.which_repo(name, txn=txn)
|
return self.d.which_repo(name, txn=txn)
|
||||||
|
|
||||||
|
def get_obsoletes(self, repo=None):
|
||||||
|
obsoletes = []
|
||||||
|
for r in self.do.list(repo):
|
||||||
|
obsoletes.extend(self.do.get_item(r, repo))
|
||||||
|
|
||||||
|
replaces = self.get_replaces(repo)
|
||||||
|
return set(str(o) for o in obsoletes) - set(replaces.keys())
|
||||||
|
|
||||||
# replacesdb holds the info about the replaced packages (ex. gaim -> pidgin)
|
# replacesdb holds the info about the replaced packages (ex. gaim -> pidgin)
|
||||||
def get_replaces(self, repo = None):
|
def get_replaces(self, repo = None):
|
||||||
pairs = {}
|
pairs = {}
|
||||||
@@ -94,6 +105,11 @@ class PackageDB(object):
|
|||||||
def list_packages(self, repo=None):
|
def list_packages(self, repo=None):
|
||||||
return self.d.list(repo)
|
return self.d.list(repo)
|
||||||
|
|
||||||
|
def add_obsoletes(self, obsoletes, repo, txn = None):
|
||||||
|
def proc(txn):
|
||||||
|
self.do.add_item(repo, obsoletes, repo, txn)
|
||||||
|
ctx.txn_proc(proc, txn)
|
||||||
|
|
||||||
def add_package(self, package_info, repo, txn = None):
|
def add_package(self, package_info, repo, txn = None):
|
||||||
name = str(package_info.name)
|
name = str(package_info.name)
|
||||||
|
|
||||||
@@ -120,6 +136,7 @@ class PackageDB(object):
|
|||||||
def clear(self, txn = None):
|
def clear(self, txn = None):
|
||||||
self.d.clear()
|
self.d.clear()
|
||||||
self.dr.clear()
|
self.dr.clear()
|
||||||
|
self.do.clear()
|
||||||
self.drp.clear()
|
self.drp.clear()
|
||||||
|
|
||||||
def remove_package(self, name, repo = None, txn = None):
|
def remove_package(self, name, repo = None, txn = None):
|
||||||
@@ -151,6 +168,7 @@ class PackageDB(object):
|
|||||||
def proc(txn):
|
def proc(txn):
|
||||||
self.d.remove_repo(repo, txn=txn)
|
self.d.remove_repo(repo, txn=txn)
|
||||||
self.dr.remove_repo(repo, txn=txn)
|
self.dr.remove_repo(repo, txn=txn)
|
||||||
|
self.do.remove_repo(repo, txn=txn)
|
||||||
self.drp.remove_repo(repo, txn=txn)
|
self.drp.remove_repo(repo, txn=txn)
|
||||||
self.d.txn_proc(proc, txn)
|
self.d.txn_proc(proc, txn)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user