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
|
||||
- Download engines in install step rather than lazily 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
|
||||
- Remove unnecessary `Arc`s from codebase by @daimond113
|
||||
|
|
|
@ -53,7 +53,7 @@ impl DownloadAndLinkHooks for InstallHooks {
|
|||
let aliases = graph
|
||||
.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(
|
||||
graph
|
||||
.iter()
|
||||
|
@ -549,7 +549,7 @@ pub fn check_peers_satisfied(graph: &DependencyGraph) {
|
|||
let mut queue = node
|
||||
.dependencies
|
||||
.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<_>>();
|
||||
|
||||
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);
|
||||
|
||||
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 {
|
||||
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(
|
||||
|(inner_dep_id, (inner_dep_alias, inner_dep_ty))| {
|
||||
|(inner_dep_alias, (inner_dep_id, inner_dep_ty))| {
|
||||
(
|
||||
path.iter()
|
||||
.copied()
|
||||
|
|
|
@ -282,8 +282,8 @@ impl Project {
|
|||
}
|
||||
|
||||
node.dependencies
|
||||
.keys()
|
||||
.filter_map(|id| graph.get(id).map(|node| (id, node)))
|
||||
.values()
|
||||
.filter_map(|(id, _)| graph.get(id).map(|node| (id, node)))
|
||||
.for_each(|x| queue.push_back(x));
|
||||
}
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ pub struct DependencyGraphNode {
|
|||
pub direct: Option<(Alias, DependencySpecifiers, DependencyType)>,
|
||||
/// The dependencies of the package
|
||||
#[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
|
||||
pub dependencies: BTreeMap<PackageId, (Alias, DependencyType)>,
|
||||
pub dependencies: BTreeMap<Alias, (PackageId, DependencyType)>,
|
||||
/// The package reference
|
||||
pub pkg_ref: PackageRefs,
|
||||
}
|
||||
|
|
|
@ -307,7 +307,7 @@ impl Project {
|
|||
(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_alias = dep_alias.clone();
|
||||
let dep_node = graph.get(&dep_id).cloned();
|
||||
|
|
|
@ -114,7 +114,7 @@ impl Project {
|
|||
let mut queue = node
|
||||
.dependencies
|
||||
.iter()
|
||||
.map(|(id, (dep_alias, _))| {
|
||||
.map(|(dep_alias, (id, _))| {
|
||||
(id, vec![alias.to_string(), dep_alias.to_string()])
|
||||
})
|
||||
.collect::<VecDeque<_>>();
|
||||
|
@ -137,7 +137,7 @@ impl Project {
|
|||
dep_node
|
||||
.dependencies
|
||||
.iter()
|
||||
.map(|(id, (alias, _))| {
|
||||
.map(|(alias, (id, _))| {
|
||||
(
|
||||
id,
|
||||
path.iter()
|
||||
|
@ -277,7 +277,7 @@ impl Project {
|
|||
.get_mut(&dependant_id)
|
||||
.expect("dependant package not found in graph")
|
||||
.dependencies
|
||||
.insert(package_id.clone(), (alias.clone(), ty));
|
||||
.insert(alias.clone(), (package_id.clone(), ty));
|
||||
}
|
||||
|
||||
let pkg_ref = &resolved[package_id.version_id()];
|
||||
|
|
Loading…
Add table
Reference in a new issue