mirror of
https://github.com/pesde-pkg/pesde.git
synced 2025-05-04 10:33:47 +01:00
fix: support multiple aliases for one package
Previously, if 2 or more aliases resolved to the same package only one would get picked. With this commit, the aliases will now all correctly point to the package.
This commit is contained in:
parent
ef8a7cf9b3
commit
7fdea814d8
6 changed files with 12 additions and 11 deletions
|
@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
### Fixed
|
### Fixed
|
||||||
- Download engines in install step rather than lazily by @daimond113
|
- Download engines in install step rather than lazily by @daimond113
|
||||||
- Rewrite dependency type system to solve multiple issues by @daimond113
|
- Rewrite dependency type system to solve multiple issues by @daimond113
|
||||||
|
- Fix support for different aliases resolving to the same package by @daimond113
|
||||||
|
|
||||||
### Performance
|
### Performance
|
||||||
- Remove unnecessary `Arc`s from codebase by @daimond113
|
- Remove unnecessary `Arc`s from codebase by @daimond113
|
||||||
|
|
|
@ -53,7 +53,7 @@ impl DownloadAndLinkHooks for InstallHooks {
|
||||||
let aliases = graph
|
let aliases = graph
|
||||||
.iter()
|
.iter()
|
||||||
.flat_map(|(_, node)| node.node.dependencies.iter())
|
.flat_map(|(_, node)| node.node.dependencies.iter())
|
||||||
.filter_map(|(id, (alias, _))| binary_packages.contains(id).then_some(alias.as_str()))
|
.filter_map(|(alias, (id, _))| binary_packages.contains(id).then_some(alias.as_str()))
|
||||||
.chain(
|
.chain(
|
||||||
graph
|
graph
|
||||||
.iter()
|
.iter()
|
||||||
|
@ -549,7 +549,7 @@ pub fn check_peers_satisfied(graph: &DependencyGraph) {
|
||||||
let mut queue = node
|
let mut queue = node
|
||||||
.dependencies
|
.dependencies
|
||||||
.iter()
|
.iter()
|
||||||
.map(|(dep_id, (dep_alias, dep_ty))| (vec![(id, alias)], (dep_id, dep_alias), *dep_ty))
|
.map(|(dep_alias, (dep_id, dep_ty))| (vec![(id, alias)], (dep_id, dep_alias), *dep_ty))
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
while let Some((path, (dep_id, dep_alias), dep_ty)) = queue.pop() {
|
while let Some((path, (dep_id, dep_alias), dep_ty)) = queue.pop() {
|
||||||
|
@ -563,7 +563,7 @@ pub fn check_peers_satisfied(graph: &DependencyGraph) {
|
||||||
.take(2);
|
.take(2);
|
||||||
|
|
||||||
let satisfied = if iter.len() > 0 {
|
let satisfied = if iter.len() > 0 {
|
||||||
iter.any(|id| graph[id].dependencies.contains_key(dep_id))
|
iter.any(|id| graph[id].dependencies.values().any(|(id, _)| id == dep_id))
|
||||||
} else {
|
} else {
|
||||||
graph.get(dep_id).is_some_and(|node| node.direct.is_some())
|
graph.get(dep_id).is_some_and(|node| node.direct.is_some())
|
||||||
};
|
};
|
||||||
|
@ -580,7 +580,7 @@ pub fn check_peers_satisfied(graph: &DependencyGraph) {
|
||||||
}
|
}
|
||||||
|
|
||||||
queue.extend(graph[dep_id].dependencies.iter().map(
|
queue.extend(graph[dep_id].dependencies.iter().map(
|
||||||
|(inner_dep_id, (inner_dep_alias, inner_dep_ty))| {
|
|(inner_dep_alias, (inner_dep_id, inner_dep_ty))| {
|
||||||
(
|
(
|
||||||
path.iter()
|
path.iter()
|
||||||
.copied()
|
.copied()
|
||||||
|
|
|
@ -282,8 +282,8 @@ impl Project {
|
||||||
}
|
}
|
||||||
|
|
||||||
node.dependencies
|
node.dependencies
|
||||||
.keys()
|
.values()
|
||||||
.filter_map(|id| graph.get(id).map(|node| (id, node)))
|
.filter_map(|(id, _)| graph.get(id).map(|node| (id, node)))
|
||||||
.for_each(|x| queue.push_back(x));
|
.for_each(|x| queue.push_back(x));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ pub struct DependencyGraphNode {
|
||||||
pub direct: Option<(Alias, DependencySpecifiers, DependencyType)>,
|
pub direct: Option<(Alias, DependencySpecifiers, DependencyType)>,
|
||||||
/// The dependencies of the package
|
/// The dependencies of the package
|
||||||
#[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
|
#[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
|
||||||
pub dependencies: BTreeMap<PackageId, (Alias, DependencyType)>,
|
pub dependencies: BTreeMap<Alias, (PackageId, DependencyType)>,
|
||||||
/// The package reference
|
/// The package reference
|
||||||
pub pkg_ref: PackageRefs,
|
pub pkg_ref: PackageRefs,
|
||||||
}
|
}
|
||||||
|
|
|
@ -307,7 +307,7 @@ impl Project {
|
||||||
(container_folder, base_folder)
|
(container_folder, base_folder)
|
||||||
};
|
};
|
||||||
|
|
||||||
for (dep_id, (dep_alias, _)) in &node.node.dependencies {
|
for (dep_alias, (dep_id, _)) in &node.node.dependencies {
|
||||||
let dep_id = dep_id.clone();
|
let dep_id = dep_id.clone();
|
||||||
let dep_alias = dep_alias.clone();
|
let dep_alias = dep_alias.clone();
|
||||||
let dep_node = graph.get(&dep_id).cloned();
|
let dep_node = graph.get(&dep_id).cloned();
|
||||||
|
|
|
@ -114,7 +114,7 @@ impl Project {
|
||||||
let mut queue = node
|
let mut queue = node
|
||||||
.dependencies
|
.dependencies
|
||||||
.iter()
|
.iter()
|
||||||
.map(|(id, (dep_alias, _))| {
|
.map(|(dep_alias, (id, _))| {
|
||||||
(id, vec![alias.to_string(), dep_alias.to_string()])
|
(id, vec![alias.to_string(), dep_alias.to_string()])
|
||||||
})
|
})
|
||||||
.collect::<VecDeque<_>>();
|
.collect::<VecDeque<_>>();
|
||||||
|
@ -137,7 +137,7 @@ impl Project {
|
||||||
dep_node
|
dep_node
|
||||||
.dependencies
|
.dependencies
|
||||||
.iter()
|
.iter()
|
||||||
.map(|(id, (alias, _))| {
|
.map(|(alias, (id, _))| {
|
||||||
(
|
(
|
||||||
id,
|
id,
|
||||||
path.iter()
|
path.iter()
|
||||||
|
@ -277,7 +277,7 @@ impl Project {
|
||||||
.get_mut(&dependant_id)
|
.get_mut(&dependant_id)
|
||||||
.expect("dependant package not found in graph")
|
.expect("dependant package not found in graph")
|
||||||
.dependencies
|
.dependencies
|
||||||
.insert(package_id.clone(), (alias.clone(), ty));
|
.insert(alias.clone(), (package_id.clone(), ty));
|
||||||
}
|
}
|
||||||
|
|
||||||
let pkg_ref = &resolved[package_id.version_id()];
|
let pkg_ref = &resolved[package_id.version_id()];
|
||||||
|
|
Loading…
Add table
Reference in a new issue