Migrate dependency tree to `petgraph::Graph`

finchie
Apr 18, 2024, 4:58 AM
Q3Z6XMP5FFCC3PWC5FSV4C6ICNDPMKMELOV7MYQGC5A42LVHGVPAC

Dependencies

  • [2] JVYWRCPT Add basic chart visualisation
  • [3] 7CVIL7UJ Create simple metadata parser
  • [4] B2L26LOA Store index of dependency nodes

Change contents

  • replacement in src/main.rs at line 3
    [3.32][3.50:89](),[3.49][3.50:89](),[3.89][2.0:123]()
    use cargo_metadata::{Node, PackageId};
    use charming::{
    series::{Graph, GraphCategory, GraphData, GraphLayout, GraphLink, GraphNode},
    Chart, HtmlRenderer,
    [3.32]
    [2.123]
    use cargo_metadata::{Node, Package, PackageId};
    use charming::{Chart, HtmlRenderer};
    use petgraph::{
    data::{Element, FromElements},
    Graph,
  • replacement in src/main.rs at line 15
    [3.263][3.33:97]()
    node_index: HashMap<&'metadata PackageId, &'metadata Node>,
    [3.263]
    [3.263]
    dependency_tree: Graph<&'metadata PackageId, usize>,
  • replacement in src/main.rs at line 26
    [3.588][3.98:394]()
    let mut node_index = HashMap::with_capacity(resolve.nodes.len());
    for node in &resolve.nodes {
    let insertion_result = node_index.insert(&node.id, node);
    // Make sure we didn't overwrite any existing entries
    assert!(insertion_result.is_none());
    [3.588]
    [3.394]
    let edge_count = resolve.nodes.iter().map(|node| node.deps.len()).count();
    let mut dependency_tree = Graph::with_capacity(metadata.packages.len(), edge_count);
    let mut node_indexes = HashMap::new();
    for node in &metadata.packages {
    let node_index = dependency_tree.add_node(&node.id);
    node_indexes.insert(&node.id, node_index);
    }
    for resolved_dependency in &resolve.nodes {
    let parent_index = node_indexes.get(&resolved_dependency.id).unwrap();
    for child in &resolved_dependency.deps {
    let child_index = node_indexes.get(&child.pkg).unwrap();
    dependency_tree.add_edge(*parent_index, *child_index, 1);
    }
  • replacement in src/main.rs at line 48
    [3.687][3.406:430]()
    node_index,
    [3.687]
    [2.127]
    dependency_tree,
  • replacement in src/main.rs at line 52
    [2.144][2.144:225]()
    fn graph(&self) -> GraphData {
    let categories = vec![GraphCategory {
    [2.144]
    [2.225]
    fn graph_data(&self) -> charming::series::GraphData {
    let categories = vec![charming::series::GraphCategory {
  • replacement in src/main.rs at line 61
    [2.389][2.389:434]()
    .map(|(pkg, coords)| GraphNode {
    [2.389]
    [2.434]
    .map(|(pkg, coords)| charming::series::GraphNode {
  • replacement in src/main.rs at line 82
    [2.1021][2.1021:1068]()
    .map(|(parent, child)| GraphLink {
    [2.1021]
    [2.1068]
    .map(|(parent, child)| charming::series::GraphLink {
  • replacement in src/main.rs at line 89
    [2.1216][2.1216:1236]()
    GraphData {
    [2.1216]
    [2.1236]
    charming::series::GraphData {
  • replacement in src/main.rs at line 103
    [2.1336][2.1336:1357]()
    Graph::new()
    [2.1336]
    [2.1357]
    charming::series::Graph::new()
  • replacement in src/main.rs at line 105
    [2.1397][2.1397:1436]()
    .layout(GraphLayout::None)
    [2.1397]
    [2.1436]
    .layout(charming::series::GraphLayout::None)
  • replacement in src/main.rs at line 107
    [2.1460][2.1460:1499]()
    .data(root_crate.graph()),
    [2.1460]
    [2.1499]
    .data(root_crate.graph_data()),
  • edit in Cargo.toml at line 9
    [2.1656]
    petgraph = "0.6.4"
  • edit in Cargo.lock at line 88
    [2.2817]
    [2.2817]
    "petgraph",
  • edit in Cargo.lock at line 100
    [2.3064]
    [2.3064]
    [[package]]
    name = "equivalent"
    version = "1.0.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
    [[package]]
    name = "fixedbitset"
    version = "0.4.2"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
  • edit in Cargo.lock at line 136
    [3.2035]
    [3.2035]
    [[package]]
    name = "hashbrown"
    version = "0.14.3"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
  • edit in Cargo.lock at line 144
    [3.2048]
    [3.2048]
    name = "indexmap"
    version = "2.2.6"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26"
    dependencies = [
    "equivalent",
    "hashbrown",
    ]
    [[package]]
  • edit in Cargo.lock at line 229
    [2.5363]
    [3.2237]
    name = "petgraph"
    version = "0.6.4"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9"
    dependencies = [
    "fixedbitset",
    "indexmap",
    ]
    [[package]]