diff options
Diffstat (limited to 'crates/shirabe/src/installer/library_installer.rs')
| -rw-r--r-- | crates/shirabe/src/installer/library_installer.rs | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/crates/shirabe/src/installer/library_installer.rs b/crates/shirabe/src/installer/library_installer.rs index af11ef6..17404e2 100644 --- a/crates/shirabe/src/installer/library_installer.rs +++ b/crates/shirabe/src/installer/library_installer.rs @@ -27,7 +27,7 @@ use crate::util::silencer::Silencer; pub struct LibraryInstaller { pub(crate) composer: PartialComposer, pub(crate) vendor_dir: String, - pub(crate) download_manager: Option<DownloadManager>, + pub(crate) download_manager: Option<std::rc::Rc<std::cell::RefCell<DownloadManager>>>, pub(crate) io: Box<dyn IOInterface>, pub(crate) r#type: Option<String>, pub(crate) filesystem: Filesystem, @@ -53,7 +53,7 @@ impl LibraryInstaller { None }; - let filesystem = filesystem.unwrap_or_else(Filesystem::new); + let filesystem = filesystem.unwrap_or_else(|| Filesystem::new(None)); let vendor_dir = rtrim( // TODO(phase-b): composer.get_config().get("vendor-dir") returns a PhpMixed/String &composer.get_config().get("vendor-dir"), @@ -123,7 +123,9 @@ impl LibraryInstaller { ) -> Result<Option<Box<dyn PromiseInterface>>> { let download_path = self.get_install_path(package).unwrap(); - self.get_download_manager().install(package, &download_path) + self.get_download_manager() + .borrow() + .install(package, &download_path) } /// @return PromiseInterface|null @@ -165,6 +167,7 @@ impl LibraryInstaller { } self.get_download_manager() + .borrow() .update(initial, target, &target_download_path) } @@ -176,7 +179,9 @@ impl LibraryInstaller { ) -> Result<Option<Box<dyn PromiseInterface>>> { let download_path = self.get_package_base_path(package); - self.get_download_manager().remove(package, &download_path) + self.get_download_manager() + .borrow() + .remove(package, &download_path) } pub(crate) fn initialize_vendor_dir(&mut self) { @@ -185,7 +190,7 @@ impl LibraryInstaller { self.vendor_dir = realpath(&self.vendor_dir).unwrap(); } - pub(crate) fn get_download_manager(&self) -> &DownloadManager { + pub(crate) fn get_download_manager(&self) -> &std::rc::Rc<std::cell::RefCell<DownloadManager>> { // PHP: assert($this->downloadManager instanceof DownloadManager, new \LogicException(...)) assert!( self.download_manager.is_some(), @@ -252,6 +257,7 @@ impl InstallerInterface for LibraryInstaller { let download_path = self.get_install_path(package).unwrap(); self.get_download_manager() + .borrow() .download(package, &download_path, prev_package) } @@ -266,6 +272,7 @@ impl InstallerInterface for LibraryInstaller { let download_path = self.get_install_path(package).unwrap(); self.get_download_manager() + .borrow() .prepare(r#type, package, &download_path, prev_package) } @@ -280,11 +287,12 @@ impl InstallerInterface for LibraryInstaller { let download_path = self.get_install_path(package).unwrap(); self.get_download_manager() + .borrow() .cleanup(r#type, package, &download_path, prev_package) } fn install( - &self, + &mut self, repo: &mut dyn InstalledRepositoryInterface, package: &dyn PackageInterface, ) -> Result<Option<Box<dyn PromiseInterface>>> { @@ -310,14 +318,14 @@ impl InstallerInterface for LibraryInstaller { Ok(Some(promise.then(Box::new(move || -> Result<()> { binary_installer.install_binaries(package, &install_path, true); if !repo.has_package(package) { - repo.add_package(package.clone_box())?; + repo.add_package(package.clone_package_box())?; } Ok(()) })))) } fn update( - &self, + &mut self, repo: &mut dyn InstalledRepositoryInterface, initial: &dyn PackageInterface, target: &dyn PackageInterface, @@ -348,14 +356,14 @@ impl InstallerInterface for LibraryInstaller { binary_installer.install_binaries(target, &install_path, true); repo.remove_package(initial)?; if !repo.has_package(target) { - repo.add_package(target.clone_box())?; + repo.add_package(target.clone_package_box())?; } Ok(()) })))) } fn uninstall( - &self, + &mut self, repo: &mut dyn InstalledRepositoryInterface, package: &dyn PackageInterface, ) -> Result<Option<Box<dyn PromiseInterface>>> { |
