commit:     fca3478de7127bbdf58c6f4b809c177662d5e4cb
Author:     James Le Cuirot <chewi <AT> gentoo <DOT> org>
AuthorDate: Sun Nov 20 11:46:34 2022 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Wed Nov 23 23:01:57 2022 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=fca3478d

depgraph: Resolve atoms using the correct root

This bug may have played out in different ways, but one example was a
rebuild in / causing the same package to be added to ROOT, even when it
had no other reason to be.

Signed-off-by: James Le Cuirot <chewi <AT> gentoo.org>
Closes: https://github.com/gentoo/portage/pull/941
Signed-off-by: Sam James <sam <AT> gentoo.org>

 NEWS                    |  4 ++++
 lib/_emerge/depgraph.py | 14 ++++++++++----
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/NEWS b/NEWS
index 1426a0856..8767d393c 100644
--- a/NEWS
+++ b/NEWS
@@ -31,6 +31,10 @@ Bug fixes:
   by the SYSROOT location. For example, if BROOT=/foo, ROOT=/bar, EPREFIX=/baz,
   EROOT=/bar/baz, and SYSROOT=/ then ESYSROOT should be /foo, not /baz.
 
+* depgraph: Resolve atoms using the correct root. This bug may have played out
+  in different ways, but one example was a rebuild in / causing the same 
package
+  to be added to ROOT, even when it had no other reason to be.
+
 portage-3.0.39 (2022-11-20)
 --------------
 

diff --git a/lib/_emerge/depgraph.py b/lib/_emerge/depgraph.py
index c976f8205..e556d6616 100644
--- a/lib/_emerge/depgraph.py
+++ b/lib/_emerge/depgraph.py
@@ -5019,13 +5019,14 @@ class depgraph:
         a favorite list."""
         debug = "--debug" in self._frozen_config.myopts
         onlydeps = "--onlydeps" in self._frozen_config.myopts
-        myroot = self._frozen_config.target_root
-        pkgsettings = self._frozen_config.pkgsettings[myroot]
-        pprovideddict = pkgsettings.pprovideddict
-        virtuals = pkgsettings.getvirtuals()
         args = self._dynamic_config._initial_arg_list[:]
 
         for arg in self._expand_set_args(args, add_to_digraph=True):
+            myroot = arg.root_config.root
+            pkgsettings = self._frozen_config.pkgsettings[myroot]
+            pprovideddict = pkgsettings.pprovideddict
+            virtuals = pkgsettings.getvirtuals()
+
             for atom in sorted(arg.pset.getAtoms()):
                 self._spinner_update()
                 dep = Dependency(atom=atom, onlydeps=onlydeps, root=myroot, 
parent=arg)
@@ -5169,6 +5170,11 @@ class depgraph:
                     )
                     raise
 
+        try:
+            del myroot, pkgsettings, pprovideddict, virtuals
+        except NameError:
+            pass
+
         # Now that the root packages have been added to the graph,
         # process the dependencies.
         if not self._create_graph():

Reply via email to