From cc5d73c05a0abca2eebcc8a6afa0b1543ee49850 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Wed, 27 May 2026 00:49:33 +0900 Subject: refactor(package): pass package handles by value throughout Co-Authored-By: Claude Opus 4.7 (1M context) --- crates/shirabe/src/installer.rs | 70 +++++++++++------------------------------ 1 file changed, 18 insertions(+), 52 deletions(-) (limited to 'crates/shirabe/src/installer.rs') diff --git a/crates/shirabe/src/installer.rs b/crates/shirabe/src/installer.rs index 70062aa..14e75c0 100644 --- a/crates/shirabe/src/installer.rs +++ b/crates/shirabe/src/installer.rs @@ -78,7 +78,6 @@ use crate::package::Locker; use crate::package::Package; use crate::package::PackageInterface; use crate::package::PackageInterfaceHandle; -use crate::package::RootAliasPackage; use crate::package::RootPackageInterface; use crate::package::RootPackageInterfaceHandle; use crate::package::base_package::{self, BasePackage}; @@ -360,9 +359,7 @@ impl Installer { ]); if is_fresh_install { self.suggested_packages_reporter - .add_suggestions_from_package( - self.package.as_rc().borrow().as_package_interface(), - ); + .add_suggestions_from_package(self.package.clone().into()); } self.suggested_packages_reporter .output_minimalistic(Some(&installed_repo), None); @@ -413,11 +410,7 @@ impl Installer { self.autoload_generator.borrow_mut().dump( &*self.config.borrow(), self.repository_manager.borrow().get_local_repository(), - self.package - .as_rc() - .borrow() - .as_root_package_interface() - .unwrap(), + self.package.clone(), &mut *self.installation_manager.borrow_mut(), "composer", self.optimize_autoloader, @@ -432,11 +425,9 @@ impl Installer { let repository_manager = self.repository_manager.clone(); let repository_manager = repository_manager.borrow(); for package in repository_manager.get_local_repository().get_packages() { - // TODO(phase-c): InstallationManager APIs still take &dyn PackageInterface; bridge - // the handle until they migrate to handles. self.installation_manager .borrow_mut() - .ensure_binaries_presence(package.as_rc().borrow().as_package_interface()); + .ensure_binaries_presence(package.clone()); } } @@ -635,11 +626,7 @@ impl Installer { let fixed_root_package = self.fixed_root_package.clone(); let mut request = self.create_request( - fixed_root_package - .as_rc() - .borrow() - .as_root_package_interface() - .unwrap(), + fixed_root_package, &platform_repo, locked_repository.as_ref(), ); @@ -835,9 +822,7 @@ impl Installer { // collect suggestions if let Some(io) = operation.as_install_operation() { self.suggested_packages_reporter - .add_suggestions_from_package( - io.get_package().as_rc().borrow().as_package_interface(), - ); + .add_suggestions_from_package(io.get_package()); } // output op if lock file is enabled, but alias op only in debug verbosity @@ -929,7 +914,7 @@ impl Installer { let dumper = ArrayDumper::new(); for pkg in lock_transaction.get_new_lock_packages(false, false) { let loaded = loader.load( - dumper.dump(pkg.as_rc().borrow().as_package_interface()), + dumper.dump(pkg.clone()), Some("Composer\\Package\\CompletePackage".to_string()), )?; result_repo.add_package(loaded)?; @@ -938,15 +923,7 @@ impl Installer { let mut repository_set = self.create_repository_set(true, platform_repo, aliases, None); repository_set.add_repository(Box::new(result_repo))?; - let mut request = self.create_request( - self.fixed_root_package - .as_rc() - .borrow() - .as_root_package_interface() - .unwrap(), - platform_repo, - None, - ); + let mut request = self.create_request(self.fixed_root_package.clone(), platform_repo, None); self.require_packages_for_update(&mut request, locked_repository, false)?; let pool = repository_set.create_pool_with_all_packages()?; @@ -1028,15 +1005,8 @@ impl Installer { // creating requirements request let fixed_root_package = self.fixed_root_package.clone(); - let mut request = self.create_request( - fixed_root_package - .as_rc() - .borrow() - .as_root_package_interface() - .unwrap(), - &platform_repo, - Some(&locked_repository), - ); + let mut request = + self.create_request(fixed_root_package, &platform_repo, Some(&locked_repository)); if !self.locker.borrow_mut().is_fresh()? { self.io.write_error3( @@ -1047,14 +1017,10 @@ impl Installer { } let package_for_missing = self.package.clone(); - let missing_requirement_info = self.locker.borrow_mut().get_missing_requirement_info( - package_for_missing - .as_rc() - .borrow() - .as_root_package_interface() - .unwrap(), - self.dev_mode, - )?; + let missing_requirement_info = self + .locker + .borrow_mut() + .get_missing_requirement_info(package_for_missing, self.dev_mode)?; if !missing_requirement_info.is_empty() { self.io.write_error(&missing_requirement_info.join("\n")); @@ -1463,7 +1429,7 @@ impl Installer { fn create_request( &self, - root_package: &dyn RootPackageInterface, + root_package: RootPackageInterfaceHandle, platform_repo: &PlatformRepository, locked_repository: Option<&LockArrayRepository>, ) -> Request { @@ -1472,11 +1438,11 @@ impl Installer { let _ = locked_repository; let mut request = Request::new(None); - // TODO(phase-c): request.fix_package wants a BasePackageHandle; root_package is only a - // borrowed &dyn RootPackageInterface here and cannot be lifted back into a handle. - let _ = root_package; + // TODO(phase-c): request.fix_package wants a BasePackageHandle; root_package is wired in + // once Request migrates to handles. // request.fix_package(root_package); - if let Some(_alias) = root_package.as_any().downcast_ref::() { + let root_package_handle: PackageInterfaceHandle = root_package.clone().into(); + if let Some(_alias) = root_package_handle.as_root_alias_package() { // request.fix_package(alias.get_alias_of()); } -- cgit v1.3.1