aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-05-28 23:20:44 +0900
committernsfisis <nsfisis@gmail.com>2026-05-28 23:28:39 +0900
commit7715c98aaf3e3962cabbcf740e93fa817a2f8027 (patch)
tree21203ac1139a321250a4a3690feaf97822716faa
parenteea4efe87e455742ec17881ee93d8095925e8516 (diff)
downloadphp-shirabe-7715c98aaf3e3962cabbcf740e93fa817a2f8027.tar.gz
php-shirabe-7715c98aaf3e3962cabbcf740e93fa817a2f8027.tar.zst
php-shirabe-7715c98aaf3e3962cabbcf740e93fa817a2f8027.zip
feat: resolve TODOs unblocked by package handle get_repository
PackageInterfaceHandle::get_repository and handle upcasts have been available since the recent Rc<RefCell<_>> handle refactors; wire them at sites still carrying TODO(phase-c) markers. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
-rw-r--r--crates/shirabe/src/command/package_discovery_trait.rs12
-rw-r--r--crates/shirabe/src/command/show_command.rs9
-rw-r--r--crates/shirabe/src/dependency_resolver/local_repo_transaction.rs9
-rw-r--r--crates/shirabe/src/dependency_resolver/problem.rs11
4 files changed, 22 insertions, 19 deletions
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::<LockArrayRepository>())
+ })
+ .collect();
if non_locked_packages.len() == 0 {
return (