Gentoo Archives: gentoo-commits

From: Arthur Zamarin <arthurzam@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/pkgcore/pkgdev:main commit in: src/pkgdev/scripts/
Date: Sat, 18 Mar 2023 18:20:30
Message-Id: 1679163592.0a65605990539e229ac7262f1e9c50509074a81c.arthurzam@gentoo
1 commit: 0a65605990539e229ac7262f1e9c50509074a81c
2 Author: Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
3 AuthorDate: Sat Mar 18 18:19:52 2023 +0000
4 Commit: Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
5 CommitDate: Sat Mar 18 18:19:52 2023 +0000
6 URL: https://gitweb.gentoo.org/proj/pkgcore/pkgdev.git/commit/?id=0a656059
7
8 bugs: handle correctly merge on new keywords of starting point
9
10 Signed-off-by: Arthur Zamarin <arthurzam <AT> gentoo.org>
11
12 src/pkgdev/scripts/pkgdev_bugs.py | 15 ++++++++-------
13 1 file changed, 8 insertions(+), 7 deletions(-)
14
15 diff --git a/src/pkgdev/scripts/pkgdev_bugs.py b/src/pkgdev/scripts/pkgdev_bugs.py
16 index 814aec1..cb1bf0c 100644
17 --- a/src/pkgdev/scripts/pkgdev_bugs.py
18 +++ b/src/pkgdev/scripts/pkgdev_bugs.py
19 @@ -318,6 +318,7 @@ class DependencyGraph:
20
21 def merge_nodes(self, nodes: tuple[GraphNode, ...]) -> GraphNode:
22 self.nodes.difference_update(nodes)
23 + is_start = bool(self.starting_nodes.intersection(nodes))
24 self.starting_nodes.difference_update(nodes)
25 new_node = GraphNode(list(chain.from_iterable(n.pkgs for n in nodes)))
26
27 @@ -330,6 +331,8 @@ class DependencyGraph:
28 node.edges.add(new_node)
29
30 self.nodes.add(new_node)
31 + if is_start:
32 + self.starting_nodes.add(new_node)
33 return new_node
34
35 @staticmethod
36 @@ -345,17 +348,15 @@ class DependencyGraph:
37 return ()
38
39 def merge_cycles(self):
40 - new_starts = set()
41 - while self.starting_nodes:
42 - starting_node = self.starting_nodes.pop()
43 + start_nodes = set(self.starting_nodes)
44 + while start_nodes:
45 + starting_node = start_nodes.pop()
46 assert starting_node in self.nodes
47 while cycle := self._find_cycles(tuple(self.nodes), [starting_node]):
48 - print("Found cycle:", " -> ".join(str(n) for n in cycle))
49 + self.out.write("Found cycle: ", " -> ".join(str(n) for n in cycle))
50 new_node = self.merge_nodes(cycle)
51 if starting_node not in self.nodes:
52 starting_node = new_node
53 - new_starts.add(starting_node)
54 - self.starting_nodes.update(new_starts)
55
56 def merge_new_keywords_children(self):
57 repo = self.options.search_repo
58 @@ -379,7 +380,7 @@ class DependencyGraph:
59 if existing_keywords & frozenset().union(*(pkg[1] for pkg in node.pkgs)):
60 continue # not fully new keywords
61 orig = next(iter(origs))
62 - print(f"Merging {node} into {orig}")
63 + self.out.write(f"Merging {node} into {orig}")
64 self.merge_nodes((orig, node))
65 found_someone = True
66 break