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 |