[Merge] ~enr0n/ubuntu-release-upgrader:t64-replacements into ubuntu-release-upgrader:ubuntu/main
Nick Rosbrook
mp+464340 at code.launchpad.net
Mon Apr 15 17:44:38 UTC 2024
Thanks for the review. I will amend it to use the reverse_depends_list to speed things up.
Diff comments:
> diff --git a/DistUpgrade/DistUpgradeQuirks.py b/DistUpgrade/DistUpgradeQuirks.py
> index 986f88d..9d7b6d6 100644
> --- a/DistUpgrade/DistUpgradeQuirks.py
> +++ b/DistUpgrade/DistUpgradeQuirks.py
> @@ -1726,3 +1736,75 @@ class DistUpgradeQuirks(object):
> ) + updates_end_msg,
> )
> self.controller.abort()
> +
> + def _install_t64_replacement_packages(self):
> + """
> + LP: #2061175
> + """
> + for package in self.controller.cache:
> + if not package.is_installed:
> + continue
> +
> + if package.candidate and package.candidate.downloadable:
> + continue
> +
> + # If we get here, then it means that this package is installed
> + # and its candidate version is obsolete (i.e. not downloadable).
> + # Now, we need to find a replacement for it.
> + logging.debug(f'Searching for replacement for {package.name}')
> +
> + replacement = None
> + for p in self.controller.cache:
Thanks. I was hoping there was a faster way, but I missed the reverse_depends_list.
> + depends_list = p.candidate._cand.depends_list_str
> +
> + replaces = False
> + for replace_list in depends_list.get('Replaces', []):
> + if package.name in [
> + name for (name, _, _) in replace_list
> + ]:
> + replaces = True
> + break
> +
> + if not replaces:
> + continue
> +
> + conflicts_or_breaks = False
> + for conflict_list in depends_list.get('Conflicts', []):
> + if package.name in [
> + name for (name, _, _) in conflict_list
> + ]:
> + conflicts_or_breaks = True
> + break
> +
> + if not conflicts_or_breaks:
> + for break_list in depends_list.get('Breaks', []):
> + if package.name in [
> + name for (name, _, _) in break_list
> + ]:
> + conflicts_or_breaks = True
> + break
> +
> + if not conflicts_or_breaks:
> + continue
> +
> + if package.name not in [
> + name for (name, _, _) in p.candidate._cand.provides_list
> + ]:
> + continue
> +
> + # Cool, we found a replacement.
> + replacement = p
> + break
> +
> + if replacement is not None:
> + logging.debug(
> + f'Found replacement {replacement.name} for {package.name}'
> + )
> +
> + replacement.mark_install(auto_fix=False, auto_inst=False)
> + package.mark_delete(auto_fix=False)
> + apt.ProblemResolver(self.controller.cache).protect(package)
> + else:
> + logging.debug(
> + f'Failed to find a replacement for {package.name}'
> + )
--
https://code.launchpad.net/~enr0n/ubuntu-release-upgrader/+git/ubuntu-release-upgrader/+merge/464340
Your team Ubuntu Core Development Team is subscribed to branch ubuntu-release-upgrader:ubuntu/main.
More information about the Ubuntu-reviews
mailing list