feat(mma): Add topological sorting to TrackDAG with cycle detection
This commit is contained in:
@@ -50,3 +50,29 @@ class TrackDAG:
|
||||
if is_cyclic(ticket.id):
|
||||
return True
|
||||
return False
|
||||
|
||||
def topological_sort(self) -> List[str]:
|
||||
"""
|
||||
Returns a list of ticket IDs in topological order.
|
||||
Raises ValueError if a cycle is detected.
|
||||
"""
|
||||
if self.has_cycle():
|
||||
raise ValueError("Dependency cycle detected")
|
||||
|
||||
visited = set()
|
||||
stack = []
|
||||
|
||||
def visit(ticket_id):
|
||||
if ticket_id in visited:
|
||||
return
|
||||
visited.add(ticket_id)
|
||||
ticket = self.ticket_map.get(ticket_id)
|
||||
if ticket:
|
||||
for dep_id in ticket.depends_on:
|
||||
visit(dep_id)
|
||||
stack.append(ticket_id)
|
||||
|
||||
for ticket in self.tickets:
|
||||
visit(ticket.id)
|
||||
|
||||
return stack
|
||||
|
||||
Reference in New Issue
Block a user