From cd25c3e193f05a5e89bca2a1c706c85fdc9c9155 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sat, 6 Jun 2026 02:13:59 +0900 Subject: 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) --- crates/shirabe/src/repository/repository_set.rs | 27 ++++++++++++------------- 1 file changed, 13 insertions(+), 14 deletions(-) (limited to 'crates/shirabe/src/repository/repository_set.rs') diff --git a/crates/shirabe/src/repository/repository_set.rs b/crates/shirabe/src/repository/repository_set.rs index 077c3f6..3cc4b9f 100644 --- a/crates/shirabe/src/repository/repository_set.rs +++ b/crates/shirabe/src/repository/repository_set.rs @@ -206,7 +206,7 @@ impl RepositorySet { name: &str, constraint: Option, flags: i64, - ) -> Vec { + ) -> anyhow::Result> { let ignore_stability = (flags & Self::ALLOW_UNACCEPTABLE_STABILITIES) != 0; let load_from_all_repos = (flags & Self::ALLOW_SHADOWED_REPOSITORIES) != 0; @@ -217,7 +217,7 @@ impl RepositorySet { let constraint_clone = constraint .as_ref() .map(|c| FindPackageConstraint::Constraint(c.clone())); - let found = repository.find_packages(name, constraint_clone); + let found = repository.find_packages(name, constraint_clone)?; packages.push(found); } } else { @@ -243,7 +243,7 @@ impl RepositorySet { acceptable, stability_flags, IndexMap::new(), - ); + )?; packages.push(result.packages.into_values().collect()); for name_found in result.names_found { @@ -264,7 +264,7 @@ impl RepositorySet { // when using loadPackages above (!$loadFromAllRepos) the repos already filter for stability so no need to do it again if ignore_stability || !load_from_all_repos { - return candidates; + return Ok(candidates); } let mut result: Vec = vec![]; @@ -274,7 +274,7 @@ impl RepositorySet { } } - result + Ok(result) } /// @param string[] $packageNames @@ -375,17 +375,16 @@ impl RepositorySet { let mut repo_advisories: Vec>> = vec![]; for repository in &self.repositories { let attempt: Result<()> = (|| -> Result<()> { - let repo_ref = repository.borrow(); - let Some(advisory_repo) = repo_ref.as_advisory_provider() else { + let mut repo_ref = repository.borrow_mut(); + let Some(advisory_repo) = repo_ref.as_advisory_provider_mut() else { return Ok(()); }; - if !advisory_repo.has_security_advisories() { + if !advisory_repo.has_security_advisories()? { return Ok(()); } let result = advisory_repo.get_security_advisories( - // TODO(phase-b): clone package_constraint_map values - todo!("clone package_constraint_map"), + package_constraint_map.clone(), allow_partial_advisories, )?; repo_advisories.push(result.advisories); @@ -429,16 +428,16 @@ impl RepositorySet { pub fn get_providers( &self, package_name: &str, - ) -> IndexMap { + ) -> anyhow::Result> { let mut providers: IndexMap = IndexMap::new(); for repository in &self.repositories { - let repo_providers = repository.get_providers(package_name.to_string()); + let repo_providers = repository.get_providers(package_name.to_string())?; if !repo_providers.is_empty() { providers.extend(repo_providers); } } - providers + Ok(providers) } /// Check for each given package name whether it would be accepted by this RepositorySet in the given $stability @@ -531,7 +530,7 @@ impl RepositorySet { let mut packages: Vec = vec![]; for repository in &self.repositories { - for mut package in repository.get_packages() { + for mut package in repository.get_packages()? { let name = package.get_name(); let version = package.get_version(); packages.push(package.clone()); -- cgit v1.3.1