* [gentoo-commits] proj/portage:use-conflict-auto-resolve commit in: lib/_emerge/
@ 2024-09-19 14:41 James Le Cuirot
0 siblings, 0 replies; 2+ messages in thread
From: James Le Cuirot @ 2024-09-19 14:41 UTC (permalink / raw
To: gentoo-commits
commit: a295634be7c0f1eb600780fc19ee7f847fc3a012
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: Thu Sep 19 12:12:31 2024 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=a295634b
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
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [gentoo-commits] proj/portage:use-conflict-auto-resolve commit in: lib/_emerge/
@ 2024-09-19 16:26 James Le Cuirot
0 siblings, 0 replies; 2+ messages in thread
From: James Le Cuirot @ 2024-09-19 16:26 UTC (permalink / raw
To: gentoo-commits
commit: e5ea1157ba37252e1f0d9e5d82043490b5b77f3c
Author: James Le Cuirot <chewi <AT> gentoo <DOT> org>
AuthorDate: Thu Sep 19 16:24:56 2024 +0000
Commit: James Le Cuirot <chewi <AT> gentoo <DOT> org>
CommitDate: Thu Sep 19 16:24:56 2024 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=e5ea1157
WIP Poor attempt at making it handle more than one conflict
The order is wrong and some of the rebuilds randomly disappear.
Signed-off-by: James Le Cuirot <chewi <AT> gentoo.org>
lib/_emerge/depgraph.py | 47 ++++++++++++++++++++++++++++-------------------
1 file changed, 28 insertions(+), 19 deletions(-)
diff --git a/lib/_emerge/depgraph.py b/lib/_emerge/depgraph.py
index df01280e30..c2f59b1014 100644
--- a/lib/_emerge/depgraph.py
+++ b/lib/_emerge/depgraph.py
@@ -9224,6 +9224,7 @@ class depgraph:
complete = "complete" in self._dynamic_config.myparams
ignore_world = self._dynamic_config.myparams.get("ignore_world", False)
asap_nodes = []
+ changed_pkgs = {}
def get_nodes(**kwargs):
"""
@@ -9929,26 +9930,34 @@ class depgraph:
self._dynamic_config._skip_restart = True
raise self._unknown_internal_error()
else:
- handler = circular_dependency_handler(self, mygraph)
- if handler.solutions and len(handler.cycles) == 2:
- pkg = list(handler.solutions.keys())[0]
- parent, solution = list(handler.solutions[pkg])[0]
- solution = list(solution)[0]
- enabled = list(parent.use.enabled)
- if solution[1]:
- enabled.append(solution[0])
+ uniq_selected_nodes = set()
+ while True:
+ handler = circular_dependency_handler(self, mygraph)
+ if handler.solutions:
+ pkg = list(handler.solutions.keys())[0]
+ parent, solution = list(handler.solutions[pkg])[0]
+ solution = list(solution)[0]
+ changed_pkg = changed_pkgs.get(parent, parent)
+ enabled = list(changed_pkg.use.enabled)
+ if solution[1]:
+ enabled.append(solution[0])
+ else:
+ enabled.remove(solution[0])
+ changed_pkgs[parent] = changed_pkg.with_use(enabled)
+ uniq_selected_nodes.update((pkg, parent))
+ mygraph.remove_edge(pkg, parent)
+ ignored_uninstall_tasks = set(
+ uninst_task
+ for uninst_task in ignored_uninstall_tasks
+ if uninst_task.cp != pkg.cp or uninst_task.slot != pkg.slot
+ )
+ elif uniq_selected_nodes:
+ break
else:
- enabled.remove(solution[0])
- selected_nodes = [parent.with_use(enabled), pkg, parent]
- ignored_uninstall_tasks = set(
- uninst_task
- for uninst_task in ignored_uninstall_tasks
- if uninst_task.cp != pkg.cp or uninst_task.slot != pkg.slot
- )
- else:
- self._dynamic_config._circular_deps_for_display = mygraph
- self._dynamic_config._need_restart = True
- raise self._unknown_internal_error()
+ self._dynamic_config._circular_deps_for_display = mygraph
+ self._dynamic_config._need_restart = True
+ raise self._unknown_internal_error()
+ selected_nodes = list(changed_pkgs.values()) + list(uniq_selected_nodes)
# At this point, we've succeeded in selecting one or more nodes, so
# reset state variables for leaf node selection.
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2024-09-19 16:26 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-19 14:41 [gentoo-commits] proj/portage:use-conflict-auto-resolve commit in: lib/_emerge/ James Le Cuirot
-- strict thread matches above, loose matches on Subject: below --
2024-09-19 16:26 James Le Cuirot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox