diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-06-26 00:38:27 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-06-26 00:38:27 +0900 |
| commit | 90c7acbd8e6eb1ddaf8680de6a1ef9f2417d50ce (patch) | |
| tree | dac10f7452ab58e36c2795e18c23edffe3045c50 /crates/shirabe/src/dependency_resolver/rule.rs | |
| parent | e0ba36807619780ff645efe0117281d32d5ace2a (diff) | |
| download | php-shirabe-90c7acbd8e6eb1ddaf8680de6a1ef9f2417d50ce.tar.gz php-shirabe-90c7acbd8e6eb1ddaf8680de6a1ef9f2417d50ce.tar.zst php-shirabe-90c7acbd8e6eb1ddaf8680de6a1ef9f2417d50ce.zip | |
feat(dependency-resolver): wire operation get_package and unblock solver tests
Override OperationInterface::get_package for Install/Uninstall/MarkAlias*
operations so trait-object dispatch no longer hits the default todo!(), and
implement Rule::is_caused_by_lock's locked-repository lookup via
Request::get_locked_repository (LockArrayRepository::get_packages is infallible).
Change PackageInterface::get_type to return String (matching PHP getType():
string) so AliasPackage can delegate live to its aliasOf handle across the
RefCell instead of an impossible &str borrow.
Un-ignores 25 SolverTest cases; 2 alias cases stay ignored pending a real
solver alias-resolution discrepancy.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/dependency_resolver/rule.rs')
| -rw-r--r-- | crates/shirabe/src/dependency_resolver/rule.rs | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/crates/shirabe/src/dependency_resolver/rule.rs b/crates/shirabe/src/dependency_resolver/rule.rs index 7686a3e..ef39513 100644 --- a/crates/shirabe/src/dependency_resolver/rule.rs +++ b/crates/shirabe/src/dependency_resolver/rule.rs @@ -23,6 +23,7 @@ use crate::dependency_resolver::RuleSet; use crate::package::AliasPackage; use crate::package::BasePackage; use crate::package::BasePackageHandle; +use crate::repository::RepositoryInterface; use crate::package::Link; use crate::package::PackageInterface; use crate::package::version::VersionParser; @@ -214,12 +215,11 @@ impl Rule { if PlatformRepository::is_platform_package(link.get_target()) { return false; } - // TODO(phase-c): request.get_locked_repository() exists, but its get_packages() - // returns Result while is_caused_by_lock returns bool; resolving needs the bool - // chain (also via Problem/SolverProblemsException, itself phase-c) to carry Result. - let locked_repo: Option<()> = todo!("request.get_locked_repository()"); - if let Some(_locked_repo) = locked_repo { - let packages: Vec<BasePackageHandle> = todo!("locked_repo.get_packages()"); + if let Some(locked_repo) = request.get_locked_repository() { + let packages = locked_repo + .borrow_mut() + .get_packages() + .expect("LockArrayRepository::get_packages() never fails"); for package in packages { let p = package.clone(); if p.get_name() == link.get_target() { @@ -255,12 +255,11 @@ impl Rule { if PlatformRepository::is_platform_package(package_name) { return false; } - // TODO(phase-c): request.get_locked_repository() exists, but its get_packages() - // returns Result while is_caused_by_lock returns bool; resolving needs the bool - // chain (also via Problem/SolverProblemsException, itself phase-c) to carry Result. - let locked_repo: Option<()> = todo!("request.get_locked_repository()"); - if let Some(_locked_repo) = locked_repo { - let packages: Vec<BasePackageHandle> = todo!("locked_repo.get_packages()"); + if let Some(locked_repo) = request.get_locked_repository() { + let packages = locked_repo + .borrow_mut() + .get_packages() + .expect("LockArrayRepository::get_packages() never fails"); for package in packages { let p = package.clone(); if p.get_name() == *package_name { |
