-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix(turborepo): Run outline fixes (#5966)
### Description Found a lot of bugs while testing #5851, so split it off into a separate PR. ### Testing Instructions <!-- Give a quick description of steps to test your changes. --> Closes TURBO-1334 --------- Co-authored-by: Alexander Lyon <Alexander Lyon> Co-authored-by: nicholaslyang <Nicholas Yang>
- Loading branch information
1 parent
edb9129
commit 73f87a6
Showing
16 changed files
with
265 additions
and
149 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,44 @@ | ||
mod walker; | ||
|
||
use std::fmt::Display; | ||
|
||
use itertools::Itertools; | ||
use petgraph::prelude::*; | ||
use thiserror::Error; | ||
|
||
#[derive(Debug, Error)] | ||
pub enum Error { | ||
#[error("cyclic dependency detected:\n{0}")] | ||
CyclicDependencies(String), | ||
#[error("{0} depends on itself")] | ||
SelfDependency(String), | ||
} | ||
|
||
pub fn validate_graph<G: Display>(graph: &Graph<G, ()>) -> Result<(), Error> { | ||
// This is equivalent to AcyclicGraph.Cycles from Go's dag library | ||
let cycles_lines = petgraph::algo::tarjan_scc(&graph) | ||
.into_iter() | ||
.filter(|cycle| cycle.len() > 1) | ||
.map(|cycle| { | ||
let workspaces = cycle.into_iter().map(|id| graph.node_weight(id).unwrap()); | ||
format!("\t{}", workspaces.format(", ")) | ||
}) | ||
.join("\n"); | ||
|
||
if !cycles_lines.is_empty() { | ||
return Err(Error::CyclicDependencies(cycles_lines)); | ||
} | ||
|
||
for edge in graph.edge_references() { | ||
if edge.source() == edge.target() { | ||
let node = graph | ||
.node_weight(edge.source()) | ||
.expect("edge pointed to missing node"); | ||
return Err(Error::SelfDependency(node.to_string())); | ||
} | ||
} | ||
|
||
Ok(()) | ||
} | ||
|
||
pub use walker::{WalkMessage, Walker}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.