aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/repository/composite_repository.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-06 02:13:59 +0900
committernsfisis <nsfisis@gmail.com>2026-06-06 02:13:59 +0900
commitcd25c3e193f05a5e89bca2a1c706c85fdc9c9155 (patch)
tree86971cac4e5011af0077416e6ca674c4251496ee /crates/shirabe/src/repository/composite_repository.rs
parentb299a0c9b66523b9630b4cf6d3dca1509c3692b5 (diff)
downloadphp-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/repository/composite_repository.rs')
-rw-r--r--crates/shirabe/src/repository/composite_repository.rs54
1 files changed, 31 insertions, 23 deletions
diff --git a/crates/shirabe/src/repository/composite_repository.rs b/crates/shirabe/src/repository/composite_repository.rs
index 6c167f2..78bbc6a 100644
--- a/crates/shirabe/src/repository/composite_repository.rs
+++ b/crates/shirabe/src/repository/composite_repository.rs
@@ -84,46 +84,46 @@ impl RepositoryInterface for CompositeRepository {
}
fn find_package(
- &self,
+ &mut self,
name: &str,
constraint: FindPackageConstraint,
- ) -> Option<BasePackageHandle> {
+ ) -> anyhow::Result<Option<BasePackageHandle>> {
for repository in &self.repositories {
- let package = repository.find_package(name, constraint.clone());
+ let package = repository.find_package(name, constraint.clone())?;
if package.is_some() {
- return package;
+ return Ok(package);
}
}
- None
+ Ok(None)
}
fn find_packages(
- &self,
+ &mut self,
name: &str,
constraint: Option<FindPackageConstraint>,
- ) -> Vec<BasePackageHandle> {
+ ) -> anyhow::Result<Vec<BasePackageHandle>> {
let mut packages = vec![];
for repository in &self.repositories {
- packages.extend(repository.find_packages(name, constraint.clone()));
+ packages.extend(repository.find_packages(name, constraint.clone())?);
}
- packages
+ Ok(packages)
}
- fn get_packages(&self) -> Vec<BasePackageHandle> {
+ fn get_packages(&mut self) -> anyhow::Result<Vec<BasePackageHandle>> {
let mut packages = vec![];
for repository in &self.repositories {
- packages.extend(repository.get_packages());
+ packages.extend(repository.get_packages()?);
}
- packages
+ Ok(packages)
}
fn load_packages(
- &self,
+ &mut self,
package_name_map: IndexMap<String, Option<AnyConstraint>>,
acceptable_stabilities: IndexMap<String, i64>,
stability_flags: IndexMap<String, i64>,
already_loaded: IndexMap<String, IndexMap<String, PackageInterfaceHandle>>,
- ) -> LoadPackagesResult {
+ ) -> anyhow::Result<LoadPackagesResult> {
let mut all_packages = IndexMap::new();
let mut all_names_found = vec![];
@@ -137,7 +137,7 @@ impl RepositoryInterface for CompositeRepository {
acceptable_stabilities.clone(),
stability_flags.clone(),
already_loaded.clone(),
- );
+ )?;
all_packages.extend(result.packages);
all_names_found.extend(result.names_found);
}
@@ -148,26 +148,34 @@ impl RepositoryInterface for CompositeRepository {
.filter(|s| seen.insert(s.clone()))
.collect();
- LoadPackagesResult {
+ Ok(LoadPackagesResult {
packages: all_packages,
names_found: unique_names,
- }
+ })
}
- fn search(&self, query: String, mode: i64, r#type: Option<String>) -> Vec<SearchResult> {
+ fn search(
+ &mut self,
+ query: String,
+ mode: i64,
+ r#type: Option<String>,
+ ) -> anyhow::Result<Vec<SearchResult>> {
let mut matches = vec![];
for repository in &self.repositories {
- matches.extend(repository.search(query.clone(), mode, r#type.clone()));
+ matches.extend(repository.search(query.clone(), mode, r#type.clone())?);
}
- matches
+ Ok(matches)
}
- fn get_providers(&self, package_name: String) -> IndexMap<String, ProviderInfo> {
+ fn get_providers(
+ &mut self,
+ package_name: String,
+ ) -> anyhow::Result<IndexMap<String, ProviderInfo>> {
let mut results = IndexMap::new();
for repository in &self.repositories {
- results.extend(repository.get_providers(package_name.clone()));
+ results.extend(repository.get_providers(package_name.clone())?);
}
- results
+ Ok(results)
}
fn as_any(&self) -> &dyn std::any::Any {