aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/installer
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe/src/installer')
-rw-r--r--crates/shirabe/src/installer/installer_event.rs8
-rw-r--r--crates/shirabe/src/installer/library_installer.rs31
-rw-r--r--crates/shirabe/src/installer/package_event.rs8
-rw-r--r--crates/shirabe/src/installer/plugin_installer.rs22
4 files changed, 34 insertions, 35 deletions
diff --git a/crates/shirabe/src/installer/installer_event.rs b/crates/shirabe/src/installer/installer_event.rs
index 6d4bf0b..3c02b7f 100644
--- a/crates/shirabe/src/installer/installer_event.rs
+++ b/crates/shirabe/src/installer/installer_event.rs
@@ -1,6 +1,6 @@
//! ref: composer/src/Composer/Installer/InstallerEvent.php
-use crate::composer::Composer;
+use crate::composer::ComposerWeakHandle;
use crate::dependency_resolver::Transaction;
use crate::event_dispatcher::Event;
use crate::io::IOInterface;
@@ -8,7 +8,7 @@ use crate::io::IOInterface;
#[derive(Debug)]
pub struct InstallerEvent {
inner: Event,
- composer: Composer,
+ composer: ComposerWeakHandle,
io: Box<dyn IOInterface>,
dev_mode: bool,
execute_operations: bool,
@@ -18,7 +18,7 @@ pub struct InstallerEvent {
impl InstallerEvent {
pub fn new(
event_name: String,
- composer: Composer,
+ composer: ComposerWeakHandle,
io: Box<dyn IOInterface>,
dev_mode: bool,
execute_operations: bool,
@@ -35,7 +35,7 @@ impl InstallerEvent {
}
}
- pub fn get_composer(&self) -> &Composer {
+ pub fn get_composer(&self) -> &ComposerWeakHandle {
&self.composer
}
diff --git a/crates/shirabe/src/installer/library_installer.rs b/crates/shirabe/src/installer/library_installer.rs
index 0b4ba78..4c3f201 100644
--- a/crates/shirabe/src/installer/library_installer.rs
+++ b/crates/shirabe/src/installer/library_installer.rs
@@ -9,14 +9,13 @@ use shirabe_php_shim::{
InvalidArgumentException, LogicException, is_link, preg_quote, realpath, rmdir, rtrim, strpos,
};
-use crate::composer::Composer;
+use crate::composer::PartialComposerWeakHandle;
use crate::downloader::DownloadManager;
use crate::installer::BinaryInstaller;
use crate::installer::BinaryPresenceInterface;
use crate::installer::InstallerInterface;
use crate::io::IOInterface;
use crate::package::PackageInterface;
-use crate::partial_composer::PartialComposer;
use crate::repository::InstalledRepositoryInterface;
use crate::util::Filesystem;
use crate::util::Platform;
@@ -25,7 +24,7 @@ use crate::util::Silencer;
/// Package installation manager.
#[derive(Debug)]
pub struct LibraryInstaller {
- pub(crate) composer: PartialComposer,
+ pub(crate) composer: PartialComposerWeakHandle,
pub(crate) vendor_dir: String,
pub(crate) download_manager: Option<std::rc::Rc<std::cell::RefCell<DownloadManager>>>,
pub(crate) io: Box<dyn IOInterface>,
@@ -38,26 +37,26 @@ impl LibraryInstaller {
/// Initializes library installer.
pub fn new(
io: Box<dyn IOInterface>,
- composer: PartialComposer,
+ composer: PartialComposerWeakHandle,
r#type: Option<String>,
filesystem: Option<std::rc::Rc<std::cell::RefCell<Filesystem>>>,
binary_installer: Option<BinaryInstaller>,
) -> Self {
- // PHP: $this->downloadManager = $composer instanceof Composer ? $composer->getDownloadManager() : null;
- // TODO(phase-b): PartialComposer cannot downcast to Composer in this Rust port.
- let download_manager: Option<std::rc::Rc<std::cell::RefCell<DownloadManager>>> =
- 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 composer_rc = composer
+ .upgrade()
+ .expect("LibraryInstaller must lives longer than Composer");
+
+ let download_manager = composer_rc
+ .as_full()
+ .map(|full| full.borrow().get_download_manager());
+
+ let composer_ref = composer_rc.borrow_partial();
let filesystem = filesystem
.unwrap_or_else(|| std::rc::Rc::new(std::cell::RefCell::new(Filesystem::new(None))));
let vendor_dir = rtrim(
// TODO(phase-b): Config::get returns PhpMixed; coerce to String via get_str.
- &composer
+ &composer_ref
.get_config()
.borrow_mut()
.get_str("vendor-dir")
@@ -69,7 +68,7 @@ impl LibraryInstaller {
// TODO(phase-b): pass io by reference/clone
todo!("io reference"),
rtrim(
- &composer
+ &composer_ref
.get_config()
.borrow_mut()
.get_str("bin-dir")
@@ -77,7 +76,7 @@ impl LibraryInstaller {
Some("/"),
),
// TODO(phase-b): Config::get returns PhpMixed; coerce to String via get_str.
- composer
+ composer_ref
.get_config()
.borrow_mut()
.get_str("bin-compat")
diff --git a/crates/shirabe/src/installer/package_event.rs b/crates/shirabe/src/installer/package_event.rs
index 0268721..d0aecc8 100644
--- a/crates/shirabe/src/installer/package_event.rs
+++ b/crates/shirabe/src/installer/package_event.rs
@@ -1,6 +1,6 @@
//! ref: composer/src/Composer/Installer/PackageEvent.php
-use crate::composer::Composer;
+use crate::composer::ComposerWeakHandle;
use crate::dependency_resolver::operation::OperationInterface;
use crate::event_dispatcher::Event;
use crate::io::IOInterface;
@@ -10,7 +10,7 @@ use indexmap::IndexMap;
#[derive(Debug)]
pub struct PackageEvent {
inner: Event,
- composer: Composer,
+ composer: ComposerWeakHandle,
io: Box<dyn IOInterface>,
dev_mode: bool,
local_repo: Box<dyn RepositoryInterface>,
@@ -21,7 +21,7 @@ pub struct PackageEvent {
impl PackageEvent {
pub fn new(
event_name: String,
- composer: Composer,
+ composer: ComposerWeakHandle,
io: Box<dyn IOInterface>,
dev_mode: bool,
local_repo: Box<dyn RepositoryInterface>,
@@ -43,7 +43,7 @@ impl PackageEvent {
self.inner.get_name()
}
- pub fn get_composer(&self) -> &Composer {
+ pub fn get_composer(&self) -> &ComposerWeakHandle {
&self.composer
}
diff --git a/crates/shirabe/src/installer/plugin_installer.rs b/crates/shirabe/src/installer/plugin_installer.rs
index dff57d8..e1d4c5e 100644
--- a/crates/shirabe/src/installer/plugin_installer.rs
+++ b/crates/shirabe/src/installer/plugin_installer.rs
@@ -1,11 +1,11 @@
//! ref: composer/src/Composer/Installer/PluginInstaller.php
+use crate::composer::PartialComposerWeakHandle;
use crate::installer::BinaryInstaller;
use crate::installer::InstallerInterface;
use crate::installer::LibraryInstaller;
use crate::io::IOInterface;
use crate::package::PackageInterface;
-use crate::partial_composer::PartialComposer;
use crate::plugin::PluginManager;
use crate::repository::InstalledRepositoryInterface;
use crate::util::Filesystem;
@@ -22,7 +22,7 @@ pub struct PluginInstaller {
impl PluginInstaller {
pub fn new(
io: Box<dyn IOInterface>,
- composer: PartialComposer,
+ composer: PartialComposerWeakHandle,
fs: Option<std::rc::Rc<std::cell::RefCell<Filesystem>>>,
binary_installer: Option<BinaryInstaller>,
) -> Self {
@@ -39,7 +39,7 @@ impl PluginInstaller {
pub fn disable_plugins(&mut self) {
// TODO(plugin): disable plugins via plugin manager
- self.get_plugin_manager_mut().disable_plugins();
+ self.get_plugin_manager().borrow_mut().disable_plugins();
}
fn rollback_install(
@@ -56,15 +56,10 @@ impl PluginInstaller {
Err(e)
}
- fn get_plugin_manager(&self) -> &PluginManager {
+ fn get_plugin_manager(&self) -> std::rc::Rc<std::cell::RefCell<PluginManager>> {
// TODO(plugin): PartialComposer does not expose PluginManager; revisit when wiring plugin support
todo!("PartialComposer.get_plugin_manager")
}
-
- fn get_plugin_manager_mut(&mut self) -> &mut PluginManager {
- // TODO(plugin): return mutable plugin manager from composer
- todo!()
- }
}
impl InstallerInterface for PluginInstaller {
@@ -87,7 +82,10 @@ impl InstallerInterface for PluginInstaller {
prev_package: Option<&dyn PackageInterface>,
) -> Result<Option<Box<dyn PromiseInterface>>> {
if (r#type == "install" || r#type == "update")
- && !self.get_plugin_manager().are_plugins_disabled("local")
+ && !self
+ .get_plugin_manager()
+ .borrow()
+ .are_plugins_disabled("local")
{
let plugin_optional = package
.get_extra()
@@ -176,7 +174,9 @@ impl InstallerInterface for PluginInstaller {
package: &dyn PackageInterface,
) -> Result<Option<Box<dyn PromiseInterface>>> {
// TODO(plugin): uninstall package from plugin manager
- self.get_plugin_manager_mut().uninstall_package(package);
+ self.get_plugin_manager()
+ .borrow_mut()
+ .uninstall_package(package);
self.inner.uninstall(repo, package)
}