aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/dependency_resolver/solver.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-05-25 00:58:20 +0900
committernsfisis <nsfisis@gmail.com>2026-05-25 00:58:36 +0900
commit1921f173ea219cb4b25847294d2d3fa465550fbb (patch)
tree0d30486a2cb9a0c106e5d5827be3f655c60cd871 /crates/shirabe/src/dependency_resolver/solver.rs
parentdbdecaf5a1c54a876b7ee0153d58dd39b1080f97 (diff)
downloadphp-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.rs25
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,
))
}