From 4df5f8491320e5795718cf0222e80fa27e57c8ad Mon Sep 17 00:00:00 2001 From: nsfisis Date: Mon, 11 May 2026 02:05:34 +0900 Subject: refactor(package): rename traits and switch dep maps to IndexMap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rename Package/CompletePackage to PackageInterface/CompletePackageInterface to mirror Composer's interface names, and split each into its own module under crates/mozart-core/src/package/. Switch dependency-link and metadata maps from BTreeMap to indexmap::IndexMap so serialized JSON preserves the original key ordering rather than sorting alphabetically — matching PHP associative-array semantics. The --sort-packages behaviour in `require` is preserved via sort_unstable_keys. --- crates/mozart/src/commands/install.rs | 51 ++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 25 deletions(-) (limited to 'crates/mozart/src/commands/install.rs') diff --git a/crates/mozart/src/commands/install.rs b/crates/mozart/src/commands/install.rs index 54256e2..709b934 100644 --- a/crates/mozart/src/commands/install.rs +++ b/crates/mozart/src/commands/install.rs @@ -2,7 +2,7 @@ use clap::Args; use indexmap::IndexSet; use mozart_core::console::IoInterface; use mozart_core::console_format; -use mozart_core::package::{Package as _, RootPackage as _, RootPackageData}; +use mozart_core::package::{PackageInterface as _, RootPackage as _, RootPackageData}; use mozart_core::repository::installed; use mozart_core::repository::installer_executor::{ Action, ExecuteContext, FilesystemExecutor, InstallerExecutor, PackageOperation, @@ -11,7 +11,6 @@ use mozart_core::repository::installer_executor::{ locked_to_installed_entry, previously_installed_alias_versions, }; use mozart_core::repository::lockfile; -use std::collections::BTreeMap; use std::path::Path; #[derive(Args)] @@ -212,7 +211,7 @@ fn verify_lock_platform_problems( /// `provide` is intentionally excluded — `getNames(false)` excludes it, and /// virtual `provide` targets allow multiple co-installed providers. fn verify_lock_same_name_problems(lock: &lockfile::LockFile, dev_mode: bool) -> Vec { - let mut providers: BTreeMap> = BTreeMap::new(); + let mut providers: indexmap::IndexMap<_, Vec<_>> = indexmap::IndexMap::new(); let mut all_pkgs: Vec<&lockfile::LockedPackage> = lock.packages.iter().collect(); if dev_mode { @@ -397,8 +396,8 @@ fn combine_platform_requirements( root: &RootPackageData, lock: &lockfile::LockFile, dev_mode: bool, -) -> BTreeMap { - let mut combined: BTreeMap = BTreeMap::new(); +) -> indexmap::IndexMap { + let mut combined = indexmap::IndexMap::new(); if let Some(obj) = lock.platform.as_object() { for (name, val) in obj { @@ -434,7 +433,7 @@ fn combine_platform_requirements( } fn check_platform_requirements_against( - combined: &BTreeMap, + combined: &indexmap::IndexMap, platform: &[mozart_core::platform::PlatformPackage], ignore_platform_reqs: bool, ignore_platform_req: &[String], @@ -1081,7 +1080,6 @@ pub async fn run( #[cfg(test)] mod tests { use super::*; - use std::collections::BTreeMap; use tempfile::tempdir; fn make_locked_package(name: &str, version: &str) -> lockfile::LockedPackage { @@ -1091,11 +1089,11 @@ mod tests { version_normalized: None, source: None, dist: None, - require: BTreeMap::new(), - require_dev: BTreeMap::new(), - conflict: BTreeMap::new(), - provide: BTreeMap::new(), - replace: BTreeMap::new(), + require: indexmap::IndexMap::new(), + require_dev: indexmap::IndexMap::new(), + conflict: indexmap::IndexMap::new(), + provide: indexmap::IndexMap::new(), + replace: indexmap::IndexMap::new(), suggest: None, package_type: Some("library".to_string()), autoload: None, @@ -1108,7 +1106,7 @@ mod tests { support: None, funding: None, time: None, - extra_fields: BTreeMap::new(), + extra_fields: indexmap::IndexMap::new(), } } @@ -1125,7 +1123,7 @@ mod tests { aliases: vec![], homepage: None, support: None, - extra_fields: BTreeMap::new(), + extra_fields: indexmap::IndexMap::new(), } } @@ -1506,9 +1504,10 @@ mod tests { #[test] fn check_platform_requirements_reports_missing_extension() { - let combined: BTreeMap = [("ext-foo".to_string(), "^10".to_string())] - .into_iter() - .collect(); + let combined: indexmap::IndexMap = + [("ext-foo".to_string(), "^10".to_string())] + .into_iter() + .collect(); let platform = vec![pp("php", "8.2.0")]; let problems = check_platform_requirements_against(&combined, &platform, false, &[]); @@ -1521,7 +1520,7 @@ mod tests { #[test] fn check_platform_requirements_reports_unsatisfied_php() { - let combined: BTreeMap = [("php".to_string(), "^20".to_string())] + let combined: indexmap::IndexMap = [("php".to_string(), "^20".to_string())] .into_iter() .collect(); let platform = vec![pp("php", "8.2.0")]; @@ -1536,9 +1535,10 @@ mod tests { #[test] fn check_platform_requirements_satisfied_returns_empty() { - let combined: BTreeMap = [("php".to_string(), "^8.0".to_string())] - .into_iter() - .collect(); + let combined: indexmap::IndexMap = + [("php".to_string(), "^8.0".to_string())] + .into_iter() + .collect(); let platform = vec![pp("php", "8.2.0")]; let problems = check_platform_requirements_against(&combined, &platform, false, &[]); @@ -1547,9 +1547,10 @@ mod tests { #[test] fn check_platform_requirements_ignore_platform_reqs_short_circuits() { - let combined: BTreeMap = [("ext-foo".to_string(), "^10".to_string())] - .into_iter() - .collect(); + let combined: indexmap::IndexMap = + [("ext-foo".to_string(), "^10".to_string())] + .into_iter() + .collect(); let platform: Vec = vec![]; let problems = check_platform_requirements_against(&combined, &platform, true, &[]); @@ -1558,7 +1559,7 @@ mod tests { #[test] fn check_platform_requirements_specific_ignore_filters_named_packages() { - let combined: BTreeMap = [ + let combined: indexmap::IndexMap = [ ("ext-foo".to_string(), "^10".to_string()), ("ext-bar".to_string(), "^10".to_string()), ] -- cgit v1.3.1