aboutsummaryrefslogtreecommitdiffstats
path: root/lib/_emerge/depgraph.py
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2023-12-18 21:25:40 -0800
committerZac Medico <zmedico@gentoo.org>2023-12-18 22:27:26 -0800
commit70cbb9b693782eaa779cd7f9f5de6f72edc381d1 (patch)
tree28bf4167461477a7e25a857fb3bc87732c221bf0 /lib/_emerge/depgraph.py
parentScheduler: Reset current_task in _run_pkg_pretend (diff)
downloadgentoo-portage-70cbb9b693782eaa779cd7f9f5de6f72edc381d1.tar.xz
gentoo-portage-70cbb9b693782eaa779cd7f9f5de6f72edc381d1.zip
depgraph: Use strip_libc_deps in _eliminate_rebuilds
The included test case will fail without strip_libc_deps because the "injected" >=sys-libs/glibc-2.37 dependency will be interpreted as a dependency change, triggering unwanted reinstall of app-misc/A-1. Bug: https://bugs.gentoo.org/915494 Signed-off-by: Zac Medico <zmedico@gentoo.org>
Diffstat (limited to 'lib/_emerge/depgraph.py')
-rw-r--r--lib/_emerge/depgraph.py33
1 files changed, 21 insertions, 12 deletions
diff --git a/lib/_emerge/depgraph.py b/lib/_emerge/depgraph.py
index 4612ac2049b..e92c6962ac6 100644
--- a/lib/_emerge/depgraph.py
+++ b/lib/_emerge/depgraph.py
@@ -2966,6 +2966,23 @@ class depgraph:
return flags
return None
+ def _installed_libc_deps(self, eroot):
+ """
+ Return find_libc_deps result for installed packages from the
+ given EROOT.
+ """
+ try:
+ return self._frozen_config._libc_deps_cache[eroot]
+ except (AttributeError, KeyError) as e:
+ if isinstance(e, AttributeError):
+ self._frozen_config._libc_deps_cache = {}
+
+ self._frozen_config._libc_deps_cache[eroot] = find_libc_deps(
+ self._frozen_config._trees_orig[eroot]["vartree"].dbapi,
+ False,
+ )
+ return self._frozen_config._libc_deps_cache[eroot]
+
def _changed_deps(self, pkg):
ebuild = None
try:
@@ -2985,18 +3002,7 @@ class depgraph:
else:
depvars = Package._runtime_keys
- eroot = pkg.root_config.settings["EROOT"]
- try:
- libc_deps = self._frozen_config._libc_deps_cache[eroot]
- except (AttributeError, KeyError) as e:
- if isinstance(e, AttributeError):
- self._frozen_config._libc_deps_cache = {}
-
- self._frozen_config._libc_deps_cache[eroot] = find_libc_deps(
- self._frozen_config._trees_orig[eroot]["vartree"].dbapi,
- False,
- )
- libc_deps = self._frozen_config._libc_deps_cache[eroot]
+ libc_deps = self._installed_libc_deps(pkg.root)
# Use _raw_metadata, in order to avoid interaction
# with --dynamic-deps.
@@ -3726,6 +3732,7 @@ class depgraph:
if pkg.requires != installed_instance.requires:
continue
+ libc_deps = self._installed_libc_deps(pkg.root)
depvars = Package._dep_keys
try:
installed_deps = []
@@ -3736,6 +3743,7 @@ class depgraph:
eapi=pkg.eapi,
token_class=Atom,
)
+ strip_libc_deps(dep_struct, libc_deps)
installed_deps.append(dep_struct)
except InvalidDependString:
continue
@@ -3759,6 +3767,7 @@ class depgraph:
eapi=pkg.eapi,
token_class=Atom,
)
+ strip_libc_deps(dep_struct, libc_deps)
new_deps.append(dep_struct)
if new_deps != installed_deps: