summaryrefslogtreecommitdiff
path: root/DistUpgrade/DistUpgradeCache.py
diff options
context:
space:
mode:
Diffstat (limited to 'DistUpgrade/DistUpgradeCache.py')
-rw-r--r--DistUpgrade/DistUpgradeCache.py25
1 files changed, 25 insertions, 0 deletions
diff --git a/DistUpgrade/DistUpgradeCache.py b/DistUpgrade/DistUpgradeCache.py
index 8427bb3d..190a17b9 100644
--- a/DistUpgrade/DistUpgradeCache.py
+++ b/DistUpgrade/DistUpgradeCache.py
@@ -111,6 +111,28 @@ class MyCache(apt.Cache):
if self.has_key(pkg):
self._depcache.MarkDelete(self[pkg]._pkg,True)
+ def keepInstalledRule(self):
+ """ run after the dist-upgrade to ensure that certain
+ packages are kept installed """
+ def keepInstalled(self, pkgname):
+ if (self.has_key(pkgname)
+ and self[pkgname].isInstalled
+ and self[pkgname].markedDelete):
+ self[pkgname].markInstall()
+ # first the global list
+ for pkgname in self.config.getlist("Distro","KeepInstalledPkgs"):
+ keepInstalled(self, pkgname)
+ # the the per-metapkg rules
+ for key in self.metapkgs:
+ if self.has_key(key) and (self[key].isInstalled or
+ self[key].markedInstall):
+ for pkgname in self.config.getlist(key,"KeepInstalledPkgs"):
+ keepInstalled(self, pkgname)
+
+
+
+
+
def postUpgradeRule(self):
" run after the upgrade was done in the cache "
for (rule, action) in [("Install", self.markInstall),
@@ -149,6 +171,9 @@ class MyCache(apt.Cache):
if not self._installMetaPkgs(view):
raise SystemError, _("Can't upgrade required meta-packages")
+ # see if our KeepInstalled rules are honored
+ self.keepInstalledRule()
+
# and if we have some special rules
self.postUpgradeRule()