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 | |
| 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')
20 files changed, 101 insertions, 103 deletions
diff --git a/crates/shirabe/src/command/archive_command.rs b/crates/shirabe/src/command/archive_command.rs index 18b69c3..5e60ce1 100644 --- a/crates/shirabe/src/command/archive_command.rs +++ b/crates/shirabe/src/command/archive_command.rs @@ -305,7 +305,7 @@ impl ArchiveCommand { Some(v) => Some(parser.parse_constraints(v)?.clone()), None => None, }; - let packages = repo_set.find_packages(&package_name.to_lowercase(), constraint, 0); + let packages = repo_set.find_packages(&package_name.to_lowercase(), constraint, 0)?; let package = if packages.len() > 1 { let mut version_selector = VersionSelector::new(repo_set, None)?; diff --git a/crates/shirabe/src/command/audit_command.rs b/crates/shirabe/src/command/audit_command.rs index 786843e..a28c344 100644 --- a/crates/shirabe/src/command/audit_command.rs +++ b/crates/shirabe/src/command/audit_command.rs @@ -156,11 +156,9 @@ impl AuditCommand { code: 0, }.into()); } - return Ok(CanonicalPackagesTrait::get_packages( - &*locker - .get_locked_repository(!input.get_option("no-dev").as_bool().unwrap_or(false))? - .borrow(), - )); + let locked_repo = locker + .get_locked_repository(!input.get_option("no-dev").as_bool().unwrap_or(false))?; + return locked_repo.borrow_mut().get_canonical_packages(); } let _root_pkg = composer.get_package(); diff --git a/crates/shirabe/src/command/base_dependency_command.rs b/crates/shirabe/src/command/base_dependency_command.rs index 177b0e6..5dfb13f 100644 --- a/crates/shirabe/src/command/base_dependency_command.rs +++ b/crates/shirabe/src/command/base_dependency_command.rs @@ -88,7 +88,7 @@ pub trait BaseDependencyCommand: BaseCommand { let local_repo = repository_manager.get_local_repository(); let root_pkg = composer.get_package(); - if local_repo.get_packages().len() == 0 + if local_repo.get_packages()?.len() == 0 && (root_pkg.get_requires().len() > 0 || root_pkg.get_dev_requires().len() > 0) { output.writeln( @@ -132,7 +132,7 @@ pub trait BaseDependencyCommand: BaseCommand { "*".to_string() }; - let packages = installed_repo.find_packages_with_replacers_and_providers(&needle, None); + let packages = installed_repo.find_packages_with_replacers_and_providers(&needle, None)?; if packages.is_empty() { return Err(anyhow::anyhow!(InvalidArgumentException { message: format!("Could not find package \"{}\" in your project", needle), @@ -143,9 +143,9 @@ pub trait BaseDependencyCommand: BaseCommand { let matched_package = installed_repo.find_package( &needle, FindPackageConstraint::String(text_constraint.clone()), - ); + )?; if matched_package.is_none() { - let default_repos = CompositeRepository::new( + let mut default_repos = CompositeRepository::new( RepositoryFactory::default_repos( Some(self.get_io()), Some(composer.get_config()), @@ -158,7 +158,7 @@ pub trait BaseDependencyCommand: BaseCommand { if let Some(r#match) = default_repos.find_package( &needle, FindPackageConstraint::String(text_constraint.clone()), - ) { + )? { installed_repo.add_repository( crate::repository::RepositoryInterfaceHandle::new( InstalledArrayRepository::new_with_packages(vec![ @@ -259,7 +259,7 @@ pub trait BaseDependencyCommand: BaseCommand { inverted, recursive, None, - ); + )?; if results.is_empty() { let extra = if has_constraint { format!( diff --git a/crates/shirabe/src/command/bump_command.rs b/crates/shirabe/src/command/bump_command.rs index b91a32a..f322ec0 100644 --- a/crates/shirabe/src/command/bump_command.rs +++ b/crates/shirabe/src/command/bump_command.rs @@ -241,7 +241,7 @@ impl BumpCommand { let package_opt = repo.find_package( pkg_name, crate::repository::FindPackageConstraint::String("*".to_string()), - ); + )?; let mut package = match package_opt { None => continue, Some(p) => p, diff --git a/crates/shirabe/src/command/check_platform_reqs_command.rs b/crates/shirabe/src/command/check_platform_reqs_command.rs index edacf0b..14b3be2 100644 --- a/crates/shirabe/src/command/check_platform_reqs_command.rs +++ b/crates/shirabe/src/command/check_platform_reqs_command.rs @@ -81,7 +81,7 @@ impl CheckPlatformReqsCommand { let repository_manager = composer.get_repository_manager().clone(); let repository_manager = repository_manager.borrow(); let local_repo = repository_manager.get_local_repository(); - if local_repo.get_packages().is_empty() { + if local_repo.get_packages()?.is_empty() { io.write_error(&format!( "<warning>No vendor dir present, checking {}platform requirements from the lock file</warning>", if no_dev { "non-dev " } else { "" } @@ -115,12 +115,12 @@ impl CheckPlatformReqsCommand { let root_pkg_repo = RootPackageRepository::new( crate::package::RootPackageInterfaceHandle::dup(composer.get_package()), ); - let installed_repo = InstalledRepository::new(vec![ + let mut installed_repo = InstalledRepository::new(vec![ installed_repo_base, crate::repository::RepositoryInterfaceHandle::new(root_pkg_repo), ]); - for package in installed_repo.get_packages() { + for package in installed_repo.get_packages()? { if remove_packages.contains(&package.get_name().to_string()) { continue; } @@ -149,7 +149,7 @@ impl CheckPlatformReqsCommand { 'requirements: for (require, links) in &requires_sorted { if PlatformRepository::is_platform_package(require) { let candidates = installed_repo_with_platform - .find_packages_with_replacers_and_providers(require, None); + .find_packages_with_replacers_and_providers(require, None)?; if !candidates.is_empty() { let mut req_results: Vec<CheckResult> = vec![]; 'candidates: for candidate in &candidates { diff --git a/crates/shirabe/src/command/create_project_command.rs b/crates/shirabe/src/command/create_project_command.rs index 189ccfc..8485069 100644 --- a/crates/shirabe/src/command/create_project_command.rs +++ b/crates/shirabe/src/command/create_project_command.rs @@ -788,7 +788,7 @@ impl CreateProjectCommand { } let platform_overrides = config.borrow_mut().get("platform"); - let platform_repo = PlatformRepository::new( + let mut platform_repo = PlatformRepository::new( vec![], match platform_overrides { PhpMixed::Array(m) => m @@ -805,7 +805,7 @@ impl CreateProjectCommand { )?; // find the latest version if there are multiple - let mut version_selector = VersionSelector::new(repository_set, Some(&platform_repo))?; + let mut version_selector = VersionSelector::new(repository_set, Some(&mut platform_repo))?; // TODO(phase-b): platform_requirement_filter is &dyn here but VersionSelector expects // Option<Box<dyn ...>>; pass None as placeholder. let _ = platform_requirement_filter; diff --git a/crates/shirabe/src/command/diagnose_command.rs b/crates/shirabe/src/command/diagnose_command.rs index bcedf30..d9ab5e2 100644 --- a/crates/shirabe/src/command/diagnose_command.rs +++ b/crates/shirabe/src/command/diagnose_command.rs @@ -162,12 +162,13 @@ impl DiagnoseCommand { .into_iter() .map(|(k, v)| (k, *v)) .collect(); - let platform_repo = PlatformRepository::new(vec![], platform_overrides_unboxed).unwrap(); + let mut platform_repo = + PlatformRepository::new(vec![], platform_overrides_unboxed).unwrap(); let php_pkg = <PlatformRepository as crate::repository::RepositoryInterface>::find_package( - &platform_repo, + &mut platform_repo, "php", crate::repository::FindPackageConstraint::String("*".to_string()), - ) + )? .unwrap(); let mut php_version = php_pkg.get_pretty_version().to_string(); if let Some(cp) = php_pkg.as_complete() { @@ -933,16 +934,14 @@ impl DiagnoseCommand { "url".to_string(), PhpMixed::String("https://packagist.org".to_string()), ); - // TODO(phase-b): ComposerRepository does not implement RepositoryInterface yet - let _composer_repo = ComposerRepository::new( - repo_config, - std::rc::Rc::new(std::cell::RefCell::new(NullIO::new())), - config, - self.http_downloader.clone().unwrap(), - None, - )?; - let composer_repo_as_repo: crate::repository::RepositoryInterfaceHandle = - todo!("ComposerRepository as RepositoryInterface"); + let composer_repo_as_repo = + crate::repository::RepositoryInterfaceHandle::new(ComposerRepository::new( + repo_config, + std::rc::Rc::new(std::cell::RefCell::new(NullIO::new())), + config, + self.http_downloader.clone().unwrap(), + None, + )?); repo_set.add_repository(composer_repo_as_repo)?; let mut io = BufferIO::new(String::new(), 0, None)?; diff --git a/crates/shirabe/src/command/fund_command.rs b/crates/shirabe/src/command/fund_command.rs index a01a67c..0fab473 100644 --- a/crates/shirabe/src/command/fund_command.rs +++ b/crates/shirabe/src/command/fund_command.rs @@ -56,7 +56,7 @@ impl FundCommand { let repository_manager = composer.get_repository_manager().clone(); let repository_manager = repository_manager.borrow(); let repo = repository_manager.get_local_repository(); - let remote_repos = CompositeRepository::new( + let mut remote_repos = CompositeRepository::new( repository_manager .get_repositories() .iter() @@ -67,7 +67,7 @@ impl FundCommand { let mut packages_to_load: IndexMap<String, Option<AnyConstraint>> = IndexMap::new(); let mut packages_to_load_names: indexmap::IndexSet<String> = indexmap::IndexSet::new(); - for package in repo.get_packages() { + for package in repo.get_packages()? { if package.as_alias().is_some() { continue; } @@ -84,7 +84,7 @@ impl FundCommand { IndexMap::from([("dev".to_string(), base_package::STABILITY_DEV)]), IndexMap::new(), IndexMap::new(), - ); + )?; // collect funding data from default branches for (_, package) in &result.packages { @@ -103,7 +103,7 @@ impl FundCommand { } // collect funding from installed packages if none was found in the default branch above - for package in repo.get_packages() { + for package in repo.get_packages()? { if package.as_alias().is_some() || !packages_to_load_names.contains(&package.get_name()) { continue; diff --git a/crates/shirabe/src/command/home_command.rs b/crates/shirabe/src/command/home_command.rs index e037487..69f2cca 100644 --- a/crates/shirabe/src/command/home_command.rs +++ b/crates/shirabe/src/command/home_command.rs @@ -103,7 +103,7 @@ impl HomeCommand { let mut package_exists = false; 'repos: for repo in &repos { - for package in repo.find_packages(&package_name, None) { + for package in repo.find_packages(&package_name, None)? { package_exists = true; if let Some(complete_pkg) = package.as_complete() { if self.handle_package(complete_pkg, show_homepage, show_only) { diff --git a/crates/shirabe/src/command/licenses_command.rs b/crates/shirabe/src/command/licenses_command.rs index 81f9b67..e66267f 100644 --- a/crates/shirabe/src/command/licenses_command.rs +++ b/crates/shirabe/src/command/licenses_command.rs @@ -105,20 +105,20 @@ impl LicensesCommand { } let no_dev = input.get_option("no-dev").as_bool().unwrap_or(false); let repo = locker.get_locked_repository(!no_dev)?; - <crate::repository::LockArrayRepository as crate::repository::RepositoryInterface>::get_packages(&*repo.borrow()) + <crate::repository::LockArrayRepository as crate::repository::RepositoryInterface>::get_packages(&mut *repo.borrow_mut())? } else { let repository_manager = composer.get_repository_manager().clone(); let repository_manager = repository_manager.borrow(); let repo = repository_manager.get_local_repository(); if input.get_option("no-dev").as_bool().unwrap_or(false) { RepositoryUtils::filter_required_packages( - &repo.get_packages(), + &repo.get_packages()?, composer.get_package().clone().into(), false, vec![], ) } else { - repo.get_packages() + repo.get_packages()? } }; let _ = composer.get_package(); 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) - ) + )) } } diff --git a/crates/shirabe/src/command/reinstall_command.rs b/crates/shirabe/src/command/reinstall_command.rs index 29e8129..d183c00 100644 --- a/crates/shirabe/src/command/reinstall_command.rs +++ b/crates/shirabe/src/command/reinstall_command.rs @@ -97,7 +97,7 @@ impl ReinstallCommand { .collect() }) .unwrap_or_default(); - for package in local_repo.get_canonical_packages() { + for package in local_repo.get_canonical_packages()? { if filter_types.contains(&package.get_type()) { package_names_to_reinstall.push(package.get_name()); packages_to_reinstall.push(package); @@ -123,7 +123,7 @@ impl ReinstallCommand { for pattern in &patterns { let pattern_regexp = base_package::package_name_to_regexp(pattern); let mut matched = false; - for package in local_repo.get_canonical_packages() { + for package in local_repo.get_canonical_packages()? { if Preg::is_match(&pattern_regexp, &package.get_name()).unwrap_or(false) { matched = true; package_names_to_reinstall.push(package.get_name()); @@ -146,7 +146,7 @@ impl ReinstallCommand { uninstall_operations.push(UninstallOperation::new(package)); } - let present_packages = local_repo.get_packages(); + let present_packages = local_repo.get_packages()?; let result_packages: Vec<crate::package::PackageInterfaceHandle> = present_packages.iter().map(|p| p.clone().into()).collect(); let present_packages: Vec<crate::package::PackageInterfaceHandle> = present_packages diff --git a/crates/shirabe/src/command/remove_command.rs b/crates/shirabe/src/command/remove_command.rs index faab5fe..225714e 100644 --- a/crates/shirabe/src/command/remove_command.rs +++ b/crates/shirabe/src/command/remove_command.rs @@ -22,6 +22,7 @@ use crate::json::JsonFile; use crate::package::BasePackage; use crate::package::base_package; use crate::repository::CanonicalPackagesTrait; +use crate::repository::RepositoryInterface; #[derive(Debug)] pub struct RemoveCommand { @@ -198,12 +199,11 @@ impl RemoveCommand { } } - let locked_packages = composer + let mut locked_repo = composer .get_locker() .borrow_mut() - .get_locked_repository(true)? - .borrow() - .get_packages(); + .get_locked_repository(true)?; + let locked_packages = locked_repo.borrow_mut().get_packages()?; let mut required: IndexMap<String, bool> = IndexMap::new(); for link in composer @@ -435,7 +435,7 @@ impl RemoveCommand { composer_opt .get_plugin_manager() .borrow_mut() - .deactivate_installed_plugins(); + .deactivate_installed_plugins()?; } self.reset_composer(); @@ -626,7 +626,7 @@ impl RemoveCommand { .get_repository_manager() .borrow() .get_local_repository() - .find_packages(package, None) + .find_packages(package, None)? .is_empty() { io.write_error(&format!( diff --git a/crates/shirabe/src/command/require_command.rs b/crates/shirabe/src/command/require_command.rs index cfa7bba..e5ddbe7 100644 --- a/crates/shirabe/src/command/require_command.rs +++ b/crates/shirabe/src/command/require_command.rs @@ -337,7 +337,7 @@ impl RequireCommand { let found_packages: Vec<crate::package::PackageInterfaceHandle> = self .get_repos() - .find_packages(name, None) + .find_packages(name, None)? .into_iter() .map(|p| p.into()) .collect(); @@ -557,7 +557,7 @@ impl RequireCommand { composer .get_plugin_manager() .borrow_mut() - .deactivate_installed_plugins(); + .deactivate_installed_plugins()?; let io = self.get_io().clone(); let do_update_result = @@ -955,7 +955,7 @@ impl RequireCommand { let mut package = repo.find_package( package_name, crate::repository::FindPackageConstraint::String("*".to_string()), - ); + )?; while let Some(alias) = package.as_ref().and_then(|p| p.as_alias()) { package = Some(alias.get_alias_of().into()); } diff --git a/crates/shirabe/src/command/search_command.rs b/crates/shirabe/src/command/search_command.rs index 2c5d27d..593b927 100644 --- a/crates/shirabe/src/command/search_command.rs +++ b/crates/shirabe/src/command/search_command.rs @@ -96,7 +96,7 @@ impl SearchCommand { { all_repos.push(r.clone()); } - let repos = CompositeRepository::new(all_repos); + let mut repos = CompositeRepository::new(all_repos); // TODO(plugin): dispatch CommandEvent for search command let command_event = CommandEvent::new(PluginEvents::COMMAND, "search", input, output); @@ -136,7 +136,7 @@ impl SearchCommand { query = preg_quote(&query, None); } - let results = repos.search(query, mode, r#type); + let results = repos.search(query, mode, r#type)?; if results.len() > 0 && format == "text" { let width = self.get_terminal_width(); diff --git a/crates/shirabe/src/command/show_command.rs b/crates/shirabe/src/command/show_command.rs index bb7b909..9592f4e 100644 --- a/crates/shirabe/src/command/show_command.rs +++ b/crates/shirabe/src/command/show_command.rs @@ -195,7 +195,7 @@ impl ShowCommand { // TODO(phase-b): PHP shares a single $platformRepo instance by reference. // We clone the overrides and re-construct as needed because PlatformRepository // is not Clone (PHP class semantics; Phase D will introduce Rc sharing). - let platform_repo = PlatformRepository::new(vec![], platform_overrides.clone())?; + let mut platform_repo = PlatformRepository::new(vec![], platform_overrides.clone())?; let make_platform_repo = || -> anyhow::Result<PlatformRepository> { PlatformRepository::new(vec![], platform_overrides.clone()) }; @@ -396,7 +396,7 @@ impl ShowCommand { .get_repository_manager() .borrow() .get_local_repository() - .get_packages(); + .get_packages()?; let packages = RepositoryUtils::filter_required_packages( &local_packages, root_pkg.clone().into(), @@ -431,7 +431,7 @@ impl ShowCommand { RepositoryInterfaceHandle::new(InstalledRepository::new(vec![root_repo, lr])); } - if installed_repo.get_packages().is_empty() { + if installed_repo.get_packages()?.is_empty() { let has_non_platform_reqs = |reqs: &IndexMap<String, Link>| -> bool { reqs.keys() .any(|name| !PlatformRepository::is_platform_package(name)) @@ -590,7 +590,7 @@ impl ShowCommand { latest_package = self.find_latest_package( package.clone().into(), composer.as_ref().unwrap(), - &platform_repo, + &mut platform_repo, input.get_option("major-only").as_bool().unwrap_or(false), input.get_option("minor-only").as_bool().unwrap_or(false), input.get_option("patch-only").as_bool().unwrap_or(false), @@ -645,7 +645,7 @@ impl ShowCommand { self.print_package_info( package.clone(), &versions_map, - &*installed_repo.borrow(), + &mut *installed_repo.borrow_mut(), latest_package, )?; } @@ -656,7 +656,7 @@ impl ShowCommand { // show tree view if requested if input.get_option("tree").as_bool() == Some(true) { let root_requires = self.get_root_requires(); - let mut packages = installed_repo.get_packages(); + let mut packages = installed_repo.get_packages()?; packages.sort_by(|a, b| { let sa: String = a.to_string(); let sb: String = b.to_string(); @@ -746,7 +746,7 @@ impl ShowCommand { if false { let _ = package_filter.as_deref(); } else { - for package in repo.get_packages() { + for package in repo.get_packages()? { let existing = packages .get(&type_owned) .and_then(|m| m.get(&package.get_name())); @@ -849,7 +849,7 @@ impl ShowCommand { let latest = self.find_latest_package( package.clone(), composer.as_ref().unwrap(), - &platform_repo, + &mut platform_repo, show_major_only, show_minor_only, show_patch_only, @@ -1574,10 +1574,10 @@ impl ShowCommand { &mut self, package: CompletePackageInterfaceHandle, versions: &IndexMap<String, String>, - installed_repo: &dyn RepositoryInterface, + installed_repo: &mut dyn RepositoryInterface, latest_package: Option<PackageInterfaceHandle>, ) -> anyhow::Result<()> { - self.print_meta(package.clone(), versions, installed_repo, latest_package); + self.print_meta(package.clone(), versions, installed_repo, latest_package)?; self.print_links(package.clone(), Link::TYPE_REQUIRE, None); self.print_links( package.clone(), @@ -1604,9 +1604,9 @@ impl ShowCommand { &mut self, package: CompletePackageInterfaceHandle, versions: &IndexMap<String, String>, - installed_repo: &dyn RepositoryInterface, + installed_repo: &mut dyn RepositoryInterface, latest_package: Option<PackageInterfaceHandle>, - ) { + ) -> anyhow::Result<()> { let is_installed_package = !PlatformRepository::is_platform_package(&package.get_name()) && installed_repo.has_package(package.clone().into()); @@ -1621,7 +1621,7 @@ impl ShowCommand { let keywords = package.get_keywords(); self.get_io() .write(&format!("<info>keywords</info> : {}", keywords.join(", "))); - self.print_versions(package.clone(), versions, installed_repo); + self.print_versions(package.clone(), versions, installed_repo)?; if is_installed_package { if let Some(rd) = package.get_release_date() { let rel = self.get_relative_time(&rd); @@ -1755,6 +1755,8 @@ impl ShowCommand { self.get_io().write(&include_paths.join(", ")); } } + + Ok(()) } /// Prints all available versions of this package and highlights the installed one if any. @@ -1762,13 +1764,13 @@ impl ShowCommand { &mut self, package: CompletePackageInterfaceHandle, versions: &IndexMap<String, String>, - installed_repo: &dyn RepositoryInterface, - ) { + installed_repo: &mut dyn RepositoryInterface, + ) -> anyhow::Result<()> { let mut versions_keys: Vec<String> = versions.keys().cloned().collect(); versions_keys = Semver::rsort(versions_keys); // highlight installed version - let installed_packages = installed_repo.find_packages(&package.get_name(), None); + let installed_packages = installed_repo.find_packages(&package.get_name(), None)?; if !installed_packages.is_empty() { for installed_package in installed_packages.iter() { let installed_version = installed_package.get_pretty_version(); @@ -1788,6 +1790,8 @@ impl ShowCommand { self.get_io() .write(&format!("<info>versions</info> : {}", versions_str)); + + Ok(()) } /// print link objects @@ -2561,7 +2565,7 @@ impl ShowCommand { &mut self, package: PackageInterfaceHandle, composer: &PartialComposerHandle, - platform_repo: &PlatformRepository, + platform_repo: &mut PlatformRepository, major_only: bool, minor_only: bool, patch_only: bool, diff --git a/crates/shirabe/src/command/status_command.rs b/crates/shirabe/src/command/status_command.rs index 457c546..e729e1f 100644 --- a/crates/shirabe/src/command/status_command.rs +++ b/crates/shirabe/src/command/status_command.rs @@ -118,7 +118,7 @@ impl StatusCommand { .get_repository_manager() .borrow() .get_local_repository() - .get_canonical_packages(); + .get_canonical_packages()?; for package in packages { let target_dir = composer .get_installation_manager() diff --git a/crates/shirabe/src/command/suggests_command.rs b/crates/shirabe/src/command/suggests_command.rs index 2091608..92a4288 100644 --- a/crates/shirabe/src/command/suggests_command.rs +++ b/crates/shirabe/src/command/suggests_command.rs @@ -87,11 +87,11 @@ impl SuggestsCommand { ); } - let installed_repo = InstalledRepository::new(installed_repos); + let mut installed_repo = InstalledRepository::new(installed_repos); let mut reporter = SuggestedPackagesReporter::new(self.get_io().clone()); let filter = input.get_argument("packages"); - let mut packages = RepositoryInterface::get_packages(&installed_repo); + let mut packages = RepositoryInterface::get_packages(&mut installed_repo)?; let root_pkg_as_base: crate::package::BasePackageHandle = composer.get_package().clone().into(); packages.push(root_pkg_as_base); @@ -121,7 +121,7 @@ impl SuggestsCommand { None }; - reporter.output(mode, Some(&installed_repo), only_dependents_of); + reporter.output(mode, Some(&mut installed_repo), only_dependents_of)?; Ok(0) } diff --git a/crates/shirabe/src/command/update_command.rs b/crates/shirabe/src/command/update_command.rs index 7fcfa4d..e28d407 100644 --- a/crates/shirabe/src/command/update_command.rs +++ b/crates/shirabe/src/command/update_command.rs @@ -212,8 +212,8 @@ impl UpdateCommand { .get_locker() .borrow_mut() .get_locked_repository(true)? - .borrow() - .get_canonical_packages() + .borrow_mut() + .get_canonical_packages()? { if package.is_dev() { continue; @@ -498,19 +498,17 @@ impl UpdateCommand { let mut autocompleter_values: IndexMap<String, String> = IndexMap::new(); let installed_packages: Vec<crate::package::PackageInterfaceHandle> = if composer_ref.get_locker().borrow_mut().is_locked() { - CanonicalPackagesTrait::get_packages( - &*composer_ref - .get_locker() - .borrow_mut() - .get_locked_repository(true)? - .borrow(), - ) + let locked_repo = composer_ref + .get_locker() + .borrow_mut() + .get_locked_repository(true)?; + locked_repo.borrow_mut().get_canonical_packages()? } else { composer_ref .get_repository_manager() .borrow() .get_local_repository() - .get_packages() + .get_packages()? }; let mut version_selector = self.create_version_selector(composer)?; for package in &installed_packages { diff --git a/crates/shirabe/src/command/validate_command.rs b/crates/shirabe/src/command/validate_command.rs index da76eca..b168b03 100644 --- a/crates/shirabe/src/command/validate_command.rs +++ b/crates/shirabe/src/command/validate_command.rs @@ -210,7 +210,7 @@ impl ValidateCommand { .get_repository_manager() .borrow() .get_local_repository() - .get_packages(); + .get_packages()?; for package in packages { let path = composer .get_installation_manager() |
