package-helpers-cmxsl/helpers/DATA/ubuntu-release-upgrader/patch_changes/010-define_independent_solver.patch

46 lines
1.9 KiB
Diff

diff --git a/DistUpgrade/DistUpgradeQuirks.py b/DistUpgrade/DistUpgradeQuirks.py
index 4c599207..2c3fd680 100644
--- a/DistUpgrade/DistUpgradeQuirks.py
+++ b/DistUpgrade/DistUpgradeQuirks.py
@@ -202,6 +202,41 @@ class DistUpgradeQuirks(object):
# --- MTA hard-block config (postfix only, temporary during upgrade) ---
MTA_BLOCK_PREF = "/etc/apt/preferences.d/zz-urug-block-mta-postfix.pref"
+ def _resolver(self):
+ # use only one ProblemResolver per stage
+ if not hasattr(self, "__resolver") or self.__resolver is None:
+ try:
+ import apt
+ self.__resolver = apt.ProblemResolver(self._get_cache())
+ except Exception:
+ self.__resolver = None
+ return self.__resolver
+
+ def _apt_mark_install(self, name, protect=False, auto_fix=True, from_user=True):
+ cache = self._get_cache()
+ if cache and name in cache and getattr(cache[name], "candidate", None):
+ try:
+ cache[name].mark_install(from_user=from_user, auto_fix=auto_fix)
+ if protect and self._resolver():
+ try: self._resolver().protect(cache[name])
+ except Exception: pass
+ return True
+ except Exception:
+ return False
+ return False
+
+ def _apt_mark_delete(self, name, purge=False):
+ cache = self._get_cache()
+ if cache and name in cache:
+ pkg = cache[name]
+ if getattr(pkg, "is_installed", False) or getattr(pkg, "marked_install", False):
+ try:
+ pkg.mark_delete(auto_fix=False)
+ return True
+ except Exception:
+ return False
+ return False
+
def PreDistUpgradeCache(self):
""" run right before calculating the dist-upgrade """
logging.debug("running Quirks.PreDistUpgradeCache")