diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-06-06 02:13:59 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-06-06 02:13:59 +0900 |
| commit | cd25c3e193f05a5e89bca2a1c706c85fdc9c9155 (patch) | |
| tree | 86971cac4e5011af0077416e6ca674c4251496ee /crates/shirabe/src/command/package_discovery_trait.rs | |
| parent | b299a0c9b66523b9630b4cf6d3dca1509c3692b5 (diff) | |
| download | php-shirabe-cd25c3e193f05a5e89bca2a1c706c85fdc9c9155.tar.gz php-shirabe-cd25c3e193f05a5e89bca2a1c706c85fdc9c9155.tar.zst php-shirabe-cd25c3e193f05a5e89bca2a1c706c85fdc9c9155.zip | |
refactor(repository): make read methods fallible and take &mut self
Change RepositoryInterface and WritableRepositoryInterface read methods
(find_package, find_packages, get_packages, load_packages, search,
get_providers, get_canonical_packages) to take &mut self and return
anyhow::Result, so lazy-loading repositories such as ComposerRepository
can perform fallible I/O and mutate internal state on access. Update all
implementors and call sites to propagate the Result and pass mutable
references.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/command/package_discovery_trait.rs')
| -rw-r--r-- | crates/shirabe/src/command/package_discovery_trait.rs | 33 |
1 files changed, 16 insertions, 17 deletions
diff --git a/crates/shirabe/src/command/package_discovery_trait.rs b/crates/shirabe/src/command/package_discovery_trait.rs index eba6b8b..1f2ef5b 100644 --- a/crates/shirabe/src/command/package_discovery_trait.rs +++ b/crates/shirabe/src/command/package_discovery_trait.rs @@ -56,7 +56,7 @@ pub trait PackageDiscoveryTrait { fn normalize_requirements(&self, requires: Vec<String>) -> Vec<IndexMap<String, String>>; - fn get_repos(&mut self) -> &CompositeRepository { + fn get_repos(&mut self) -> &mut CompositeRepository { if self.get_repos_mut().is_none() { // PHP: array_merge([new PlatformRepository], RepositoryFactory::defaultReposWithDefaultManager($this->getIO())) let mut repos: Vec<crate::repository::RepositoryInterfaceHandle> = vec![ @@ -75,7 +75,7 @@ pub trait PackageDiscoveryTrait { *self.get_repos_mut() = Some(CompositeRepository::new(repos)); } - self.get_repos_mut().as_ref().unwrap() + self.get_repos_mut().as_mut().unwrap() } /// @param key-of<BasePackage::STABILITIES>|null $minimumStability @@ -238,7 +238,7 @@ pub trait PackageDiscoveryTrait { .map(|rm| rm.get_local_repository()); let mut existing_packages: Vec<String> = vec![]; if let Some(repo) = &installed_repo { - for package in repo.get_packages() { + for package in repo.get_packages()? { existing_packages.push(package.get_name().to_string()); } } @@ -533,7 +533,7 @@ pub trait PackageDiscoveryTrait { } // Check if it is a virtual package provided by others - let providers = repo_set.get_providers(name); + let providers = repo_set.get_providers(name)?; if count(&PhpMixed::List( providers.iter().map(|_| Box::new(PhpMixed::Null)).collect(), )) > 0 @@ -593,7 +593,7 @@ pub trait PackageDiscoveryTrait { self.get_platform_exception_details( candidate.clone(), platform_repo, - ), + )?, ), &[PhpMixed::String(name.to_string())], ), @@ -694,7 +694,7 @@ pub trait PackageDiscoveryTrait { self.get_platform_exception_details( candidate.clone(), platform_repo, - ), + )?, ), &[ PhpMixed::String(name.to_string()), @@ -816,11 +816,10 @@ pub trait PackageDiscoveryTrait { } .into()); } - Ok(self - .get_repos_mut() + self.get_repos_mut() .as_mut() .unwrap() - .search(package.to_string(), 0, None)) + .search(package.to_string(), 0, None) })() { Ok(r) => r, Err(e) => { @@ -847,7 +846,7 @@ pub trait PackageDiscoveryTrait { .find_package( &result.name, crate::repository::FindPackageConstraint::String("*".to_string()), - ) + )? .is_some() { // Ignore installed package @@ -864,13 +863,13 @@ pub trait PackageDiscoveryTrait { &self, candidate: PackageInterfaceHandle, platform_repo: Option<&PlatformRepositoryHandle>, - ) -> String { + ) -> anyhow::Result<String> { let mut details: Vec<String> = vec![]; let platform_repo = match platform_repo { - None => return String::new(), + None => return Ok(String::new()), Some(p) => p, }; - let platform_repo = platform_repo.borrow(); + let mut platform_repo = platform_repo.borrow_mut(); for link in candidate.get_requires().values() { if !PlatformRepository::is_platform_package(link.get_target()) { @@ -879,7 +878,7 @@ pub trait PackageDiscoveryTrait { let platform_pkg = platform_repo.find_package( link.get_target(), crate::repository::FindPackageConstraint::String("*".to_string()), - ); + )?; let platform_pkg = match platform_pkg { None => { if platform_repo.is_platform_package_disabled(link.get_target()) { @@ -941,13 +940,13 @@ pub trait PackageDiscoveryTrait { details.iter().map(|_| Box::new(PhpMixed::Null)).collect(), )) == 0 { - return String::new(); + return Ok(String::new()); } - format!( + Ok(format!( ":{} - {}", PHP_EOL, implode(&format!("{} - ", PHP_EOL), &details) - ) + )) } } |
