diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-06-28 23:34:58 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-06-28 23:34:58 +0900 |
| commit | 1909f94b8f4634a7b5abef2ebf4de92b56f4091c (patch) | |
| tree | 6c42919dc02c01daeeff27ddee732428a854798f /crates/shirabe/src/repository | |
| parent | 1a85368838c1e482f2a7020ff1cbdc87fcb092cc (diff) | |
| download | php-shirabe-1909f94b8f4634a7b5abef2ebf4de92b56f4091c.tar.gz php-shirabe-1909f94b8f4634a7b5abef2ebf4de92b56f4091c.tar.zst php-shirabe-1909f94b8f4634a7b5abef2ebf4de92b56f4091c.zip | |
fix(repository): flatten InstalledRepository and unwrap filter repos in show
flattenRepositories must recurse into InstalledRepository (which extends
CompositeRepository in PHP) and ShowCommand must unwrap FilterRepository
when categorizing repos. Without this, installed/locked/platform packages
all fell through to the "available" bucket, dropping the version column
and per-section grouping. Un-ignores 10 show_command tests.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/repository')
| -rw-r--r-- | crates/shirabe/src/repository/repository_utils.rs | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/crates/shirabe/src/repository/repository_utils.rs b/crates/shirabe/src/repository/repository_utils.rs index 40cb4d2..c2997f3 100644 --- a/crates/shirabe/src/repository/repository_utils.rs +++ b/crates/shirabe/src/repository/repository_utils.rs @@ -3,6 +3,7 @@ use crate::package::Link; use crate::repository::CompositeRepository; use crate::repository::FilterRepository; +use crate::repository::InstalledRepository; use crate::repository::RepositoryInterfaceHandle; use indexmap::IndexMap; @@ -57,11 +58,19 @@ impl RepositoryUtils { repo }; + // PHP `InstalledRepository extends CompositeRepository`, so it must flatten too. The Rust + // port embeds the CompositeRepository instead of inheriting it, so the downcast is tried + // explicitly here. let nested = { let r = repo.borrow(); r.as_any() .downcast_ref::<CompositeRepository>() .map(|composite_repo| composite_repo.get_repositories().clone()) + .or_else(|| { + r.as_any() + .downcast_ref::<InstalledRepository>() + .map(|installed_repo| installed_repo.get_repositories().clone()) + }) }; if let Some(nested) = nested { let mut repos = Vec::new(); |
