aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/repository/repository_set.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/repository_set.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/repository_set.rs')
-rw-r--r--crates/shirabe/src/repository/repository_set.rs27
1 files changed, 13 insertions, 14 deletions
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<AnyConstraint>,
flags: i64,
- ) -> Vec<BasePackageHandle> {
+ ) -> anyhow::Result<Vec<BasePackageHandle>> {
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<BasePackageHandle> = vec![];
@@ -274,7 +274,7 @@ impl RepositorySet {
}
}
- result
+ Ok(result)
}
/// @param string[] $packageNames
@@ -375,17 +375,16 @@ impl RepositorySet {
let mut repo_advisories: Vec<IndexMap<String, Vec<PartialOrFullSecurityAdvisory>>> = 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<String, crate::repository::ProviderInfo> {
+ ) -> anyhow::Result<IndexMap<String, crate::repository::ProviderInfo>> {
let mut providers: IndexMap<String, crate::repository::ProviderInfo> = 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<BasePackageHandle> = 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());