aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/mozart/src/commands/require.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-05-11 02:05:34 +0900
committernsfisis <nsfisis@gmail.com>2026-05-11 02:05:34 +0900
commit4df5f8491320e5795718cf0222e80fa27e57c8ad (patch)
tree707e19f34dbdef18490ec3245d34389e3d189a57 /crates/mozart/src/commands/require.rs
parent8871b923fa3df1935c263db155cb8bc3d59705cd (diff)
downloadphp-mozart-4df5f8491320e5795718cf0222e80fa27e57c8ad.tar.gz
php-mozart-4df5f8491320e5795718cf0222e80fa27e57c8ad.tar.zst
php-mozart-4df5f8491320e5795718cf0222e80fa27e57c8ad.zip
refactor(package): rename traits and switch dep maps to IndexMap
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.
Diffstat (limited to 'crates/mozart/src/commands/require.rs')
-rw-r--r--crates/mozart/src/commands/require.rs52
1 files changed, 10 insertions, 42 deletions
diff --git a/crates/mozart/src/commands/require.rs b/crates/mozart/src/commands/require.rs
index 3d5fcd6..f92442c 100644
--- a/crates/mozart/src/commands/require.rs
+++ b/crates/mozart/src/commands/require.rs
@@ -1026,9 +1026,9 @@ pub async fn execute(
// Remove from the opposite section before inserting into the target.
for pkg in &inconsistent {
if args.dev {
- raw.require.remove(pkg.as_str());
+ raw.require.shift_remove(pkg.as_str());
} else {
- raw.require_dev.remove(pkg.as_str());
+ raw.require_dev.shift_remove(pkg.as_str());
}
}
@@ -1066,10 +1066,8 @@ pub async fn execute(
let sort_packages = args.sort_packages || config_sort_packages;
if sort_packages {
- let sorted_require: std::collections::BTreeMap<_, _> = raw.require.clone();
- raw.require = sorted_require;
- let sorted_dev: std::collections::BTreeMap<_, _> = raw.require_dev.clone();
- raw.require_dev = sorted_dev;
+ raw.require.sort_unstable_keys();
+ raw.require_dev.sort_unstable_keys();
}
// --- Write composer.json (unless --dry-run) ---
@@ -1129,7 +1127,6 @@ pub async fn execute(
#[cfg(test)]
mod tests {
use super::*;
- use std::collections::BTreeMap;
fn make_locked_package(name: &str, version: &str) -> lockfile::LockedPackage {
lockfile::LockedPackage {
@@ -1138,11 +1135,11 @@ mod tests {
version_normalized: Some(format!("{}.0", version)),
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,
@@ -1155,7 +1152,7 @@ mod tests {
support: None,
funding: None,
time: None,
- extra_fields: BTreeMap::new(),
+ extra_fields: indexmap::IndexMap::new(),
}
}
@@ -1176,35 +1173,6 @@ mod tests {
}
}
- /// Verify that --sort-packages sorts both require and require-dev maps.
- #[test]
- fn test_sort_packages_sorts_both_sections() {
- use mozart_core::package::RawPackageData;
-
- let mut raw = RawPackageData::new("test/project".to_string());
- raw.require
- .insert("z/package".to_string(), "^1.0".to_string());
- raw.require
- .insert("a/package".to_string(), "^2.0".to_string());
- raw.require
- .insert("m/package".to_string(), "^3.0".to_string());
- raw.require_dev
- .insert("z/dev".to_string(), "^1.0".to_string());
- raw.require_dev
- .insert("a/dev".to_string(), "^2.0".to_string());
-
- let sorted_require: BTreeMap<String, String> = raw.require.clone();
- raw.require = sorted_require;
- let sorted_dev: BTreeMap<String, String> = raw.require_dev.clone();
- raw.require_dev = sorted_dev;
-
- let require_keys: Vec<_> = raw.require.keys().collect();
- assert_eq!(require_keys, vec!["a/package", "m/package", "z/package"]);
-
- let dev_keys: Vec<_> = raw.require_dev.keys().collect();
- assert_eq!(dev_keys, vec!["a/dev", "z/dev"]);
- }
-
/// Verify that compute_update_changes produces correct Install entries for new packages.
#[test]
fn test_require_change_report_new_packages() {