From 7715c98aaf3e3962cabbcf740e93fa817a2f8027 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Thu, 28 May 2026 23:20:44 +0900 Subject: feat: resolve TODOs unblocked by package handle get_repository PackageInterfaceHandle::get_repository and handle upcasts have been available since the recent Rc> handle refactors; wire them at sites still carrying TODO(phase-c) markers. Co-Authored-By: Claude Opus 4.7 (1M context) --- crates/shirabe/src/command/package_discovery_trait.rs | 12 ++++++++---- crates/shirabe/src/command/show_command.rs | 9 +++------ .../src/dependency_resolver/local_repo_transaction.rs | 9 ++++----- crates/shirabe/src/dependency_resolver/problem.rs | 11 +++++++---- 4 files changed, 22 insertions(+), 19 deletions(-) (limited to 'crates/shirabe') diff --git a/crates/shirabe/src/command/package_discovery_trait.rs b/crates/shirabe/src/command/package_discovery_trait.rs index d656d83..f036103 100644 --- a/crates/shirabe/src/command/package_discovery_trait.rs +++ b/crates/shirabe/src/command/package_discovery_trait.rs @@ -614,10 +614,14 @@ pub trait PackageDiscoveryTrait { message: format!( "Package {} exists in {} and {} which has a higher repository priority. The packages from the higher priority repository do not match your minimum-stability and are therefore not installable. That repository is canonical so the lower priority repo's packages are not installable. See https://getcomposer.org/repoprio for details and assistance.", name, - // TODO(phase-c): the originating repository names need the handle's - // repository back-reference (phase-c handoff item #1). - "a higher priority repository", - "a lower priority repository", + all_repos_package + .get_repository() + .map(|r| r.get_repo_name()) + .unwrap_or_default(), + package + .get_repository() + .map(|r| r.get_repo_name()) + .unwrap_or_default(), ), code: 0, } diff --git a/crates/shirabe/src/command/show_command.rs b/crates/shirabe/src/command/show_command.rs index 2b2dd94..5a9c676 100644 --- a/crates/shirabe/src/command/show_command.rs +++ b/crates/shirabe/src/command/show_command.rs @@ -211,11 +211,9 @@ impl ShowCommand { && input.get_option("installed").as_bool() != Some(true) && input.get_option("locked").as_bool() != Some(true) { - let _rc = self.require_composer(None, None)?; - // TODO(phase-c): composer.get_package() returns &dyn RootPackageInterface, not a - // RootPackageInterfaceHandle, so it cannot be shared into RootPackageRepository::new yet. + let composer = self.require_composer(None, None)?; let package: crate::package::RootPackageInterfaceHandle = - todo!("share composer.get_package() as a RootPackageInterfaceHandle"); + composer.borrow_partial().get_package().clone(); if input.get_option("name-only").as_bool() == Some(true) { self.get_io().write(&package.get_name()); @@ -234,8 +232,7 @@ impl ShowCommand { repos = RepositoryInterfaceHandle::new(InstalledRepository::new(vec![ RepositoryInterfaceHandle::new(RootPackageRepository::new(package.clone())), ])); - // TODO(phase-c): need to convert the root package handle to a CompletePackageInterfaceHandle - single_package = todo!("convert package to CompletePackageInterfaceHandle"); + single_package = Some(package.clone().into()); } else if input.get_option("platform").as_bool() == Some(true) { installed_repo = RepositoryInterfaceHandle::new(InstalledRepository::new(vec![ RepositoryInterfaceHandle::new(make_platform_repo()?), diff --git a/crates/shirabe/src/dependency_resolver/local_repo_transaction.rs b/crates/shirabe/src/dependency_resolver/local_repo_transaction.rs index 7b60522..5d9c0d5 100644 --- a/crates/shirabe/src/dependency_resolver/local_repo_transaction.rs +++ b/crates/shirabe/src/dependency_resolver/local_repo_transaction.rs @@ -14,12 +14,11 @@ impl LocalRepoTransaction { locked_repository: &dyn RepositoryInterface, local_repository: &dyn InstalledRepositoryInterface, ) -> Self { - // TODO(phase-c): RepositoryInterface::get_packages yields BasePackageHandle; widen each to - // PackageInterfaceHandle (via .into()) and feed them to Transaction::new once the repository - // getters expose handles here. - let _ = (locked_repository, local_repository); Self { - inner: Transaction::new(Vec::new(), Vec::new()), + inner: Transaction::new( + local_repository.get_packages(), + locked_repository.get_packages(), + ), } } diff --git a/crates/shirabe/src/dependency_resolver/problem.rs b/crates/shirabe/src/dependency_resolver/problem.rs index 740909f..7312bda 100644 --- a/crates/shirabe/src/dependency_resolver/problem.rs +++ b/crates/shirabe/src/dependency_resolver/problem.rs @@ -757,10 +757,13 @@ impl Problem { } } - // TODO(phase-c): filtering out packages from a LockArrayRepository needs the handle's - // repository back-reference (phase-c handoff item #1), which is not yet available; keep - // all packages for now. - let non_locked_packages: Vec<&BasePackageHandle> = packages.iter().collect(); + let non_locked_packages: Vec<&BasePackageHandle> = packages + .iter() + .filter(|p| { + !p.get_repository() + .map_or(false, |r| r.is::()) + }) + .collect(); if non_locked_packages.len() == 0 { return ( -- cgit v1.3.1