From c05bfa5a76c62cab8df12493e03c20625f5817f1 Mon Sep 17 00:00:00 2001 From: daimond113 Date: Fri, 25 Apr 2025 21:03:19 +0200 Subject: [PATCH] refactor: improve code structure --- src/download_and_link.rs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/download_and_link.rs b/src/download_and_link.rs index 5e08847..0f08e21 100644 --- a/src/download_and_link.rs +++ b/src/download_and_link.rs @@ -247,24 +247,28 @@ impl Project { download_graph_options = download_graph_options.reporter(reporter); } - let mut downloaded_graph = DependencyGraph::new(); - let mut queue = graph .iter() - .filter(|(_id, node)| { + .filter(|(_, node)| { node.direct.is_some() && install_dependencies_mode.fits(node.resolved_ty) }) .collect::>(); let mut correct_deps = DependencyGraph::new(); while let Some((id, node)) = queue.pop_front() { - correct_deps.insert(id.clone(), node.clone()); + if correct_deps.insert(id.clone(), node.clone()).is_some() { + // prevent an infinite loop with recursive dependencies + continue; + } + node.dependencies - .iter() - .filter_map(|(id, _alias)| graph.get(id).map(|node| (id, node))) + .keys() + .filter_map(|id| graph.get(id).map(|node| (id, node))) .for_each(|x| queue.push_back(x)); } + let mut downloaded_graph = DependencyGraph::new(); + let graph_to_download = if force { correct_deps } else {