mirror of
https://github.com/pesde-pkg/pesde.git
synced 2025-05-04 10:33:47 +01:00
fix: check sub dependencies
This commit is contained in:
parent
618cb3a462
commit
03d0a6ac77
1 changed files with 48 additions and 17 deletions
|
@ -75,6 +75,19 @@ pub enum InstallDependenciesMode {
|
||||||
/// Install only dev_dependencies.
|
/// Install only dev_dependencies.
|
||||||
Dev,
|
Dev,
|
||||||
}
|
}
|
||||||
|
impl PartialEq<DependencyType> for InstallDependenciesMode {
|
||||||
|
fn eq(&self, other: &DependencyType) -> bool {
|
||||||
|
match (self, other) {
|
||||||
|
(InstallDependenciesMode::All, _) => true,
|
||||||
|
(InstallDependenciesMode::Prod, DependencyType::Standard) => true,
|
||||||
|
(InstallDependenciesMode::Prod, DependencyType::Peer) => true,
|
||||||
|
(InstallDependenciesMode::Prod, DependencyType::Dev) => false,
|
||||||
|
(InstallDependenciesMode::Dev, DependencyType::Standard) => false,
|
||||||
|
(InstallDependenciesMode::Dev, DependencyType::Peer) => false,
|
||||||
|
(InstallDependenciesMode::Dev, DependencyType::Dev) => true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Options for downloading and linking.
|
/// Options for downloading and linking.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
@ -174,6 +187,13 @@ impl Clone for DownloadAndLinkOptions {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_parent<'a>(
|
||||||
|
graph: &'a std::collections::BTreeMap<PackageId, DependencyGraphNode>,
|
||||||
|
key: &PackageId,
|
||||||
|
) -> Option<(&'a PackageId, &'a DependencyGraphNode)> {
|
||||||
|
graph.iter().find(|(_, v)| v.dependencies.contains_key(key))
|
||||||
|
}
|
||||||
|
|
||||||
impl Project {
|
impl Project {
|
||||||
/// Downloads a graph of dependencies and links them in the correct order
|
/// Downloads a graph of dependencies and links them in the correct order
|
||||||
#[instrument(skip_all, fields(install_dependencies = debug(options.install_dependencies_mode)), level = "debug")]
|
#[instrument(skip_all, fields(install_dependencies = debug(options.install_dependencies_mode)), level = "debug")]
|
||||||
|
@ -247,24 +267,35 @@ impl Project {
|
||||||
let container_folder =
|
let container_folder =
|
||||||
node.container_folder_from_project(&id, self, manifest.target.kind());
|
node.container_folder_from_project(&id, self, manifest.target.kind());
|
||||||
|
|
||||||
match install_dependencies_mode {
|
async fn make_fut(
|
||||||
InstallDependenciesMode::Prod
|
id: PackageId,
|
||||||
if node.resolved_ty == DependencyType::Dev =>
|
node: DependencyGraphNode,
|
||||||
{
|
container_folder: PathBuf,
|
||||||
return None
|
) -> (PackageId, DependencyGraphNode, bool) {
|
||||||
}
|
(id, node, fs::metadata(&container_folder).await.is_ok())
|
||||||
InstallDependenciesMode::Dev
|
}
|
||||||
if node.resolved_ty != DependencyType::Dev
|
|
||||||
&& node.direct.is_some() =>
|
|
||||||
{
|
|
||||||
return None
|
|
||||||
}
|
|
||||||
_ => {}
|
|
||||||
};
|
|
||||||
|
|
||||||
Some(async move {
|
if node.direct.is_some() && install_dependencies_mode == node.resolved_ty {
|
||||||
return (id, node, fs::metadata(&container_folder).await.is_ok());
|
return Some(make_fut(id, node, container_folder));
|
||||||
})
|
}
|
||||||
|
|
||||||
|
// not a direct dependency, check if it's parent is and matches the install mode
|
||||||
|
// todo: optimise this maybe. many iterations through graph can add up if graph big
|
||||||
|
|
||||||
|
let mut current_parent = &id;
|
||||||
|
while let Some((parent_id, parent_node)) =
|
||||||
|
get_parent(&graph, current_parent)
|
||||||
|
{
|
||||||
|
if parent_node.direct.is_some()
|
||||||
|
&& install_dependencies_mode == parent_node.resolved_ty
|
||||||
|
{
|
||||||
|
return Some(make_fut(id, node, container_folder));
|
||||||
|
}
|
||||||
|
|
||||||
|
current_parent = parent_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
None
|
||||||
})
|
})
|
||||||
.collect::<JoinSet<_>>();
|
.collect::<JoinSet<_>>();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue