commit:     714deff1a048a21e359137b4cc8a20b6d3928d16
Author:     James Le Cuirot <chewi <AT> gentoo <DOT> org>
AuthorDate: Thu Sep 19 12:12:06 2024 +0000
Commit:     James Le Cuirot <chewi <AT> gentoo <DOT> org>
CommitDate: Mon Sep 23 16:19:12 2024 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=714deff1

depgraph: Simplify creation on uninstall tasks

Signed-off-by: James Le Cuirot <chewi <AT> gentoo.org>

 lib/_emerge/Package.py  |  4 ++--
 lib/_emerge/depgraph.py | 26 +++-----------------------
 2 files changed, 5 insertions(+), 25 deletions(-)

diff --git a/lib/_emerge/Package.py b/lib/_emerge/Package.py
index 79011380d5..562f177406 100644
--- a/lib/_emerge/Package.py
+++ b/lib/_emerge/Package.py
@@ -405,7 +405,7 @@ class Package(Task):
             except InvalidData as e:
                 self._invalid_metadata(k + ".syntax", f"{k}: {e}")
 
-    def copy(self):
+    def copy(self, operation=None):
         return Package(
             built=self.built,
             cpv=self.cpv,
@@ -413,7 +413,7 @@ class Package(Task):
             installed=self.installed,
             metadata=self._raw_metadata,
             onlydeps=self.onlydeps,
-            operation=self.operation,
+            operation=operation or self.operation,
             root_config=self.root_config,
             type_name=self.type_name,
         )

diff --git a/lib/_emerge/depgraph.py b/lib/_emerge/depgraph.py
index 2acd8f2e13..05bfbbc3e1 100644
--- a/lib/_emerge/depgraph.py
+++ b/lib/_emerge/depgraph.py
@@ -8936,15 +8936,7 @@ class depgraph:
 
                 if not unresolved_blocks and depends_on_order:
                     for inst_pkg, inst_task in depends_on_order:
-                        uninst_task = Package(
-                            built=inst_pkg.built,
-                            cpv=inst_pkg.cpv,
-                            installed=inst_pkg.installed,
-                            metadata=inst_pkg._metadata,
-                            operation="uninstall",
-                            root_config=inst_pkg.root_config,
-                            type_name=inst_pkg.type_name,
-                        )
+                        uninst_task = inst_pkg.copy(operation="uninstall")
                         # Enforce correct merge order with a hard dep.
                         self._dynamic_config.digraph.addnode(
                             uninst_task, inst_task, 
priority=BlockerDepPriority.instance
@@ -9965,20 +9957,8 @@ class depgraph:
                     if inst_pkg:
                         # The package will be replaced by this one, so remove
                         # the corresponding Uninstall task if necessary.
-                        inst_pkg = inst_pkg[0]
-                        uninst_task = Package(
-                            built=inst_pkg.built,
-                            cpv=inst_pkg.cpv,
-                            installed=inst_pkg.installed,
-                            metadata=inst_pkg._metadata,
-                            operation="uninstall",
-                            root_config=inst_pkg.root_config,
-                            type_name=inst_pkg.type_name,
-                        )
-                        try:
-                            mygraph.remove(uninst_task)
-                        except KeyError:
-                            pass
+                        uninst_task = inst_pkg[0].copy(operation="uninstall")
+                        mygraph.discard(uninst_task)
 
                 if (
                     uninst_task is not None

Reply via email to