Skip to content

Commit 0a65605

Browse files
committed
bugs: handle correctly merge on new keywords of starting point
Signed-off-by: Arthur Zamarin <arthurzam@gentoo.org>
1 parent 110bb9e commit 0a65605

1 file changed

Lines changed: 8 additions & 7 deletions

File tree

src/pkgdev/scripts/pkgdev_bugs.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,7 @@ def output_dot(self, dot_file):
318318

319319
def merge_nodes(self, nodes: tuple[GraphNode, ...]) -> GraphNode:
320320
self.nodes.difference_update(nodes)
321+
is_start = bool(self.starting_nodes.intersection(nodes))
321322
self.starting_nodes.difference_update(nodes)
322323
new_node = GraphNode(list(chain.from_iterable(n.pkgs for n in nodes)))
323324

@@ -330,6 +331,8 @@ def merge_nodes(self, nodes: tuple[GraphNode, ...]) -> GraphNode:
330331
node.edges.add(new_node)
331332

332333
self.nodes.add(new_node)
334+
if is_start:
335+
self.starting_nodes.add(new_node)
333336
return new_node
334337

335338
@staticmethod
@@ -345,17 +348,15 @@ def _find_cycles(nodes: tuple[GraphNode, ...], stack: list[GraphNode]) -> tuple[
345348
return ()
346349

347350
def merge_cycles(self):
348-
new_starts = set()
349-
while self.starting_nodes:
350-
starting_node = self.starting_nodes.pop()
351+
start_nodes = set(self.starting_nodes)
352+
while start_nodes:
353+
starting_node = start_nodes.pop()
351354
assert starting_node in self.nodes
352355
while cycle := self._find_cycles(tuple(self.nodes), [starting_node]):
353-
print("Found cycle:", " -> ".join(str(n) for n in cycle))
356+
self.out.write("Found cycle: ", " -> ".join(str(n) for n in cycle))
354357
new_node = self.merge_nodes(cycle)
355358
if starting_node not in self.nodes:
356359
starting_node = new_node
357-
new_starts.add(starting_node)
358-
self.starting_nodes.update(new_starts)
359360

360361
def merge_new_keywords_children(self):
361362
repo = self.options.search_repo
@@ -379,7 +380,7 @@ def merge_new_keywords_children(self):
379380
if existing_keywords & frozenset().union(*(pkg[1] for pkg in node.pkgs)):
380381
continue # not fully new keywords
381382
orig = next(iter(origs))
382-
print(f"Merging {node} into {orig}")
383+
self.out.write(f"Merging {node} into {orig}")
383384
self.merge_nodes((orig, node))
384385
found_someone = True
385386
break

0 commit comments

Comments
 (0)