From dda045eb663524b40e277047e3cea301738e5c26 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Thu, 2 Jul 2026 01:10:35 +0900 Subject: fix(platform-repository): wire ensure_initialized into RepositoryInterface PlatformRepository::initialize() (php-version/extension detection) was never invoked: the RepositoryInterface impl delegated straight to the inner ArrayRepository without the ensure_initialized lazy-init guard that sibling repositories (FilesystemRepository, PathRepository) use. As a result pool.what_provides("php") was always empty, and any package requiring php failed platform resolution. Also fixes the trait search() bypassing PlatformRepository's own SEARCH_VENDOR override. --- crates/shirabe/src/repository/platform_repository.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'crates/shirabe') diff --git a/crates/shirabe/src/repository/platform_repository.rs b/crates/shirabe/src/repository/platform_repository.rs index 0fa5638..9dffe66 100644 --- a/crates/shirabe/src/repository/platform_repository.rs +++ b/crates/shirabe/src/repository/platform_repository.rs @@ -122,6 +122,13 @@ impl PlatformRepository { &self.disabled_packages } + fn ensure_initialized(&mut self) -> anyhow::Result<()> { + if !self.inner.is_initialized() { + self.initialize()?; + } + Ok(()) + } + pub(crate) fn initialize(&mut self) -> anyhow::Result<()> { self.inner.initialize(); @@ -1804,6 +1811,7 @@ impl PlatformRepository { return Ok(Vec::new()); } + self.ensure_initialized()?; self.inner.search(query, mode, r#type) } @@ -1860,6 +1868,7 @@ impl crate::repository::RepositoryInterface for PlatformRepository { name: &str, constraint: crate::repository::FindPackageConstraint, ) -> anyhow::Result> { + self.ensure_initialized()?; self.inner.find_package(name, constraint) } @@ -1868,10 +1877,12 @@ impl crate::repository::RepositoryInterface for PlatformRepository { name: &str, constraint: Option, ) -> anyhow::Result> { + self.ensure_initialized()?; self.inner.find_packages(name, constraint) } fn get_packages(&mut self) -> anyhow::Result> { + self.ensure_initialized()?; self.inner.get_packages() } @@ -1882,6 +1893,7 @@ impl crate::repository::RepositoryInterface for PlatformRepository { stability_flags: IndexMap, already_loaded: IndexMap>, ) -> anyhow::Result { + self.ensure_initialized()?; self.inner.load_packages( package_name_map, acceptable_stabilities, @@ -1896,13 +1908,14 @@ impl crate::repository::RepositoryInterface for PlatformRepository { mode: i64, r#type: Option, ) -> anyhow::Result> { - self.inner.search(query, mode, r#type) + PlatformRepository::search(self, query, mode, r#type) } fn get_providers( &mut self, package_name: String, ) -> anyhow::Result> { + self.ensure_initialized()?; self.inner.get_providers(package_name) } -- cgit v1.3.1