diff options
author | Zac Medico <zmedico@gentoo.org> | 2023-12-18 21:25:40 -0800 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2023-12-18 22:27:26 -0800 |
commit | 70cbb9b693782eaa779cd7f9f5de6f72edc381d1 (patch) | |
tree | 28bf4167461477a7e25a857fb3bc87732c221bf0 /lib/_emerge/depgraph.py | |
parent | Scheduler: Reset current_task in _run_pkg_pretend (diff) | |
download | gentoo-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.py | 33 |
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: |