aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/mozart/src/version.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-02-21 12:31:06 +0900
committernsfisis <nsfisis@gmail.com>2026-02-21 12:31:06 +0900
commit18761d9b67a09c0148ae606da10db0d1266932f9 (patch)
treec38c1a4f0c2b05abbb50c5a686c5b925c2672b34 /crates/mozart/src/version.rs
parenta70d703f1dea24a1c2ee189f85ab98ff77f89ff3 (diff)
downloadphp-mozart-18761d9b67a09c0148ae606da10db0d1266932f9.tar.gz
php-mozart-18761d9b67a09c0148ae606da10db0d1266932f9.tar.zst
php-mozart-18761d9b67a09c0148ae606da10db0d1266932f9.zip
feat(resolver): integrate pubgrub dependency resolver
Add dependency resolution module using pubgrub v0.3.0 to convert Composer-style constraints into range-based version solving. Includes ComposerVersion type with stability ordering, MozartProvider implementing DependencyProvider, platform package handling, stability filtering, and conflict support via complement ranges. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'crates/mozart/src/version.rs')
-rw-r--r--crates/mozart/src/version.rs77
1 files changed, 21 insertions, 56 deletions
diff --git a/crates/mozart/src/version.rs b/crates/mozart/src/version.rs
index a5eca13..4e2bef7 100644
--- a/crates/mozart/src/version.rs
+++ b/crates/mozart/src/version.rs
@@ -173,37 +173,26 @@ mod tests {
);
}
+ fn make_pv(version: &str, version_normalized: &str) -> PackagistVersion {
+ PackagistVersion {
+ version: version.to_string(),
+ version_normalized: version_normalized.to_string(),
+ require: Default::default(),
+ replace: Default::default(),
+ provide: Default::default(),
+ conflict: Default::default(),
+ dist: None,
+ source: None,
+ }
+ }
+
#[test]
fn test_find_best_candidate_stable() {
let versions = vec![
- PackagistVersion {
- version: "dev-master".to_string(),
- version_normalized: "dev-master".to_string(),
- require: Default::default(),
- dist: None,
- source: None,
- },
- PackagistVersion {
- version: "2.0.0-beta.1".to_string(),
- version_normalized: "2.0.0.0-beta1".to_string(),
- require: Default::default(),
- dist: None,
- source: None,
- },
- PackagistVersion {
- version: "1.5.0".to_string(),
- version_normalized: "1.5.0.0".to_string(),
- require: Default::default(),
- dist: None,
- source: None,
- },
- PackagistVersion {
- version: "1.4.0".to_string(),
- version_normalized: "1.4.0.0".to_string(),
- require: Default::default(),
- dist: None,
- source: None,
- },
+ make_pv("dev-master", "dev-master"),
+ make_pv("2.0.0-beta.1", "2.0.0.0-beta1"),
+ make_pv("1.5.0", "1.5.0.0"),
+ make_pv("1.4.0", "1.4.0.0"),
];
let best = find_best_candidate(&versions, Stability::Stable).unwrap();
@@ -213,27 +202,9 @@ mod tests {
#[test]
fn test_find_best_candidate_beta() {
let versions = vec![
- PackagistVersion {
- version: "dev-master".to_string(),
- version_normalized: "dev-master".to_string(),
- require: Default::default(),
- dist: None,
- source: None,
- },
- PackagistVersion {
- version: "2.0.0-beta.1".to_string(),
- version_normalized: "2.0.0.0-beta1".to_string(),
- require: Default::default(),
- dist: None,
- source: None,
- },
- PackagistVersion {
- version: "1.5.0".to_string(),
- version_normalized: "1.5.0.0".to_string(),
- require: Default::default(),
- dist: None,
- source: None,
- },
+ make_pv("dev-master", "dev-master"),
+ make_pv("2.0.0-beta.1", "2.0.0.0-beta1"),
+ make_pv("1.5.0", "1.5.0.0"),
];
let best = find_best_candidate(&versions, Stability::Beta).unwrap();
@@ -242,13 +213,7 @@ mod tests {
#[test]
fn test_find_best_candidate_no_match() {
- let versions = vec![PackagistVersion {
- version: "dev-master".to_string(),
- version_normalized: "dev-master".to_string(),
- require: Default::default(),
- dist: None,
- source: None,
- }];
+ let versions = vec![make_pv("dev-master", "dev-master")];
let best = find_best_candidate(&versions, Stability::Stable);
assert!(best.is_none());