diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-05-25 00:58:20 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-05-25 00:58:36 +0900 |
| commit | 1921f173ea219cb4b25847294d2d3fa465550fbb (patch) | |
| tree | 0d30486a2cb9a0c106e5d5827be3f655c60cd871 /crates/shirabe/src/dependency_resolver/solver.rs | |
| parent | dbdecaf5a1c54a876b7ee0153d58dd39b1080f97 (diff) | |
| download | php-shirabe-1921f173ea219cb4b25847294d2d3fa465550fbb.tar.gz php-shirabe-1921f173ea219cb4b25847294d2d3fa465550fbb.tar.zst php-shirabe-1921f173ea219cb4b25847294d2d3fa465550fbb.zip | |
refactor(package): introduce Rc<RefCell<_>> handles for packages
PHP packages have reference semantics, so introduce shared-ownership
handles over an AnyPackage enum (PackageInterfaceHandle and friends)
and replace Box<dyn PackageInterface> throughout.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/dependency_resolver/solver.rs')
| -rw-r--r-- | crates/shirabe/src/dependency_resolver/solver.rs | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/crates/shirabe/src/dependency_resolver/solver.rs b/crates/shirabe/src/dependency_resolver/solver.rs index 820f792..2610f07 100644 --- a/crates/shirabe/src/dependency_resolver/solver.rs +++ b/crates/shirabe/src/dependency_resolver/solver.rs @@ -29,7 +29,7 @@ use crate::filter::platform_requirement_filter::IgnoreListPlatformRequirementFil use crate::filter::platform_requirement_filter::PlatformRequirementFilterFactory; use crate::filter::platform_requirement_filter::PlatformRequirementFilterInterface; use crate::io::IOInterface; -use crate::package::BasePackage; +use crate::package::BasePackageHandle; #[derive(Debug)] pub struct Solver { @@ -40,7 +40,7 @@ pub struct Solver { pub(crate) watch_graph: RuleWatchGraph, pub(crate) decisions: Decisions, - pub(crate) fixed_map: IndexMap<i64, Box<dyn BasePackage>>, + pub(crate) fixed_map: IndexMap<i64, BasePackageHandle>, pub(crate) propagate_index: i64, /// Pairs of `(literals, level)` — PHP indexes into these with the BRANCH_* constants. @@ -176,7 +176,7 @@ impl Solver { fn setup_fixed_map(&mut self, request: &Request) { self.fixed_map = IndexMap::new(); for (_, package) in request.get_fixed_packages() { - self.fixed_map.insert(package.get_id(), package.clone_box()); + self.fixed_map.insert(package.get_id(), package.clone()); } } @@ -296,13 +296,22 @@ impl Solver { return Err(anyhow::anyhow!("solver problems")); } - // TODO(phase-b): LockTransaction expects IndexMap<_, Box<dyn PackageInterface>> - // and borrows Pool/Decisions. The present/fixed maps from Request are keyed - // by BasePackage; converting requires reworking Request. + // LockTransaction stores PackageInterfaceHandle maps; widen the request's BasePackageHandle + // maps into them. + let present_map = request + .get_present_map(false) + .into_iter() + .map(|(k, v)| (k, v.into())) + .collect(); + let unlockable_map = request + .get_fixed_packages_map() + .into_iter() + .map(|(k, v)| (k, v.into())) + .collect(); Ok(LockTransaction::new( &*self.pool.borrow(), - todo!("convert request.get_present_map(false) to PackageInterface map"), - todo!("convert request.get_fixed_packages_map() to PackageInterface map"), + present_map, + unlockable_map, &self.decisions, )) } |
