diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-05-19 21:46:01 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-05-19 21:46:08 +0900 |
| commit | 5e31fa33c3b5cf726a57a063b8e7a070869250fe (patch) | |
| tree | 98522466966fa7df483cad174ab5fc03db39bc09 /crates/shirabe/src/installer/library_installer.rs | |
| parent | c839244d8d09f3036ebfee8eef7eb6b147e593ab (diff) | |
| download | php-shirabe-5e31fa33c3b5cf726a57a063b8e7a070869250fe.tar.gz php-shirabe-5e31fa33c3b5cf726a57a063b8e7a070869250fe.tar.zst php-shirabe-5e31fa33c3b5cf726a57a063b8e7a070869250fe.zip | |
fix(compile): fix more random compile errors
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/installer/library_installer.rs')
| -rw-r--r-- | crates/shirabe/src/installer/library_installer.rs | 42 |
1 files changed, 24 insertions, 18 deletions
diff --git a/crates/shirabe/src/installer/library_installer.rs b/crates/shirabe/src/installer/library_installer.rs index 17404e2..0bc87f9 100644 --- a/crates/shirabe/src/installer/library_installer.rs +++ b/crates/shirabe/src/installer/library_installer.rs @@ -30,7 +30,7 @@ pub struct LibraryInstaller { 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, + pub(crate) filesystem: std::rc::Rc<std::cell::RefCell<Filesystem>>, pub(crate) binary_installer: BinaryInstaller, } @@ -40,31 +40,34 @@ impl LibraryInstaller { io: Box<dyn IOInterface>, composer: PartialComposer, r#type: Option<String>, - filesystem: Option<Filesystem>, + filesystem: Option<std::rc::Rc<std::cell::RefCell<Filesystem>>>, binary_installer: Option<BinaryInstaller>, ) -> Self { // PHP: $this->downloadManager = $composer instanceof Composer ? $composer->getDownloadManager() : null; - let download_manager = if let Some(full_composer) = - (composer.as_any() as &dyn Any).downcast_ref::<Composer>() - { - // TODO(phase-b): clone or borrow the DownloadManager from the full Composer - Some(todo!("composer.get_download_manager() as DownloadManager")) - } else { - None - }; + let download_manager = + if let Some(full_composer) = composer.as_any().downcast_ref::<Composer>() { + // TODO(phase-b): clone or borrow the DownloadManager from the full Composer + Some(todo!("composer.get_download_manager() as DownloadManager")) + } else { + None + }; - let filesystem = filesystem.unwrap_or_else(|| Filesystem::new(None)); + let filesystem = filesystem + .unwrap_or_else(|| std::rc::Rc::new(std::cell::RefCell::new(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"), + // TODO(phase-b): composer.get_config().borrow_mut().get("vendor-dir") returns a PhpMixed/String + &composer.get_config().borrow_mut().get("vendor-dir"), Some("/"), ); let binary_installer = binary_installer.unwrap_or_else(|| { BinaryInstaller::new( // TODO(phase-b): pass io by reference/clone todo!("io reference"), - rtrim(&composer.get_config().get("bin-dir"), Some("/")), - composer.get_config().get("bin-compat"), + rtrim( + &composer.get_config().borrow_mut().get("bin-dir"), + Some("/"), + ), + composer.get_config().borrow_mut().get("bin-compat"), // TODO(phase-b): pass filesystem reference todo!("filesystem reference"), vendor_dir.clone(), @@ -163,6 +166,7 @@ impl LibraryInstaller { } self.filesystem + .borrow_mut() .rename(&initial_download_path, &target_download_path); } @@ -185,7 +189,9 @@ impl LibraryInstaller { } pub(crate) fn initialize_vendor_dir(&mut self) { - self.filesystem.ensure_directory_exists(&self.vendor_dir); + self.filesystem + .borrow_mut() + .ensure_directory_exists(&self.vendor_dir); // TODO(phase-b): realpath returns Option<String>; PHP assigns to vendorDir even when false self.vendor_dir = realpath(&self.vendor_dir).unwrap(); } @@ -232,7 +238,7 @@ impl InstallerInterface for LibraryInstaller { return true; } - if Platform::is_windows() && self.filesystem.is_junction(&install_path) { + if Platform::is_windows() && self.filesystem.borrow_mut().is_junction(&install_path) { return true; } @@ -393,7 +399,7 @@ impl InstallerInterface for LibraryInstaller { if strpos(package.get_name(), "/").is_some() { let package_vendor_dir = shirabe_php_shim::dirname(&download_path); if shirabe_php_shim::is_dir(&package_vendor_dir) - && filesystem.is_dir_empty(&package_vendor_dir) + && filesystem.borrow().is_dir_empty(&package_vendor_dir) { Silencer::call(|| { rmdir(&package_vendor_dir); |
