mirror of
https://github.com/pesde-pkg/pesde.git
synced 2025-05-04 10:33:47 +01:00
refactor: avoid manually recreating graph
This commit is contained in:
parent
c05bfa5a76
commit
c835998621
1 changed files with 31 additions and 27 deletions
|
@ -66,26 +66,23 @@ impl DownloadAndLinkHooks for () {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Options for which dependencies to install.
|
/// Options for which dependencies to install.
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
#[derive(Debug, Clone, Copy)]
|
||||||
pub enum InstallDependenciesMode {
|
pub enum InstallDependenciesMode {
|
||||||
/// Install all dependencies.
|
/// Install all dependencies
|
||||||
All,
|
All,
|
||||||
/// Install only dependencies, not dev_dependencies.
|
/// Install all dependencies, then remove [DependencyType::Dev] dependencies
|
||||||
Prod,
|
Prod,
|
||||||
/// Install only dev_dependencies.
|
/// Only install dependencies which are [DependencyType::Dev]
|
||||||
Dev,
|
Dev,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl InstallDependenciesMode {
|
impl InstallDependenciesMode {
|
||||||
fn fits(self, dep_ty: DependencyType) -> bool {
|
fn fits(self, dep_ty: DependencyType) -> bool {
|
||||||
match (self, dep_ty) {
|
match (self, dep_ty) {
|
||||||
(InstallDependenciesMode::All, _) => true,
|
|
||||||
(InstallDependenciesMode::Prod, DependencyType::Standard) => true,
|
|
||||||
(InstallDependenciesMode::Prod, DependencyType::Peer) => true,
|
|
||||||
(InstallDependenciesMode::Prod, DependencyType::Dev) => false,
|
(InstallDependenciesMode::Prod, DependencyType::Dev) => false,
|
||||||
(InstallDependenciesMode::Dev, DependencyType::Standard) => false,
|
(InstallDependenciesMode::Dev, dep_ty) => dep_ty == DependencyType::Dev,
|
||||||
(InstallDependenciesMode::Dev, DependencyType::Peer) => false,
|
|
||||||
(InstallDependenciesMode::Dev, DependencyType::Dev) => true,
|
_ => true,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -247,25 +244,32 @@ impl Project {
|
||||||
download_graph_options = download_graph_options.reporter(reporter);
|
download_graph_options = download_graph_options.reporter(reporter);
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut queue = graph
|
let correct_deps = if matches!(install_dependencies_mode, InstallDependenciesMode::All)
|
||||||
.iter()
|
{
|
||||||
.filter(|(_, node)| {
|
graph.clone()
|
||||||
node.direct.is_some() && install_dependencies_mode.fits(node.resolved_ty)
|
} else {
|
||||||
})
|
let mut queue = graph
|
||||||
.collect::<VecDeque<_>>();
|
.iter()
|
||||||
|
.filter(|(_, node)| {
|
||||||
|
node.direct.is_some() && install_dependencies_mode.fits(node.resolved_ty)
|
||||||
|
})
|
||||||
|
.collect::<VecDeque<_>>();
|
||||||
|
|
||||||
let mut correct_deps = DependencyGraph::new();
|
let mut correct_deps = DependencyGraph::new();
|
||||||
while let Some((id, node)) = queue.pop_front() {
|
while let Some((id, node)) = queue.pop_front() {
|
||||||
if correct_deps.insert(id.clone(), node.clone()).is_some() {
|
if correct_deps.insert(id.clone(), node.clone()).is_some() {
|
||||||
// prevent an infinite loop with recursive dependencies
|
// prevent an infinite loop with recursive dependencies
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
node.dependencies
|
||||||
|
.keys()
|
||||||
|
.filter_map(|id| graph.get(id).map(|node| (id, node)))
|
||||||
|
.for_each(|x| queue.push_back(x));
|
||||||
}
|
}
|
||||||
|
|
||||||
node.dependencies
|
correct_deps
|
||||||
.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 mut downloaded_graph = DependencyGraph::new();
|
||||||
|
|
||||||
|
@ -464,7 +468,7 @@ impl Project {
|
||||||
.map_err(errors::DownloadAndLinkError::Hook)?;
|
.map_err(errors::DownloadAndLinkError::Hook)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
if install_dependencies_mode != InstallDependenciesMode::All || !force {
|
if matches!(install_dependencies_mode, InstallDependenciesMode::Prod) || !force {
|
||||||
self.remove_unused(&graph).await?;
|
self.remove_unused(&graph).await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue