@@ -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