diff options
Diffstat (limited to 'crates/mozart/src/composer.rs')
| -rw-r--r-- | crates/mozart/src/composer.rs | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/crates/mozart/src/composer.rs b/crates/mozart/src/composer.rs index 9fd8b77..c73902e 100644 --- a/crates/mozart/src/composer.rs +++ b/crates/mozart/src/composer.rs @@ -11,13 +11,14 @@ //! `Composer\Command\BaseCommand::tryComposer()` for the upstream contract //! that [`Composer::require`] and [`Composer::try_load`] are modelled on. -use std::path::{Path, PathBuf}; - use crate::factory::create_composer; use mozart_core::composer::{AutoloadGenerator, InstallationManager, Locker, RepositoryManager}; use mozart_core::config::Config; +use mozart_core::console::IoInterface; use mozart_core::downloader::DownloadManager; use mozart_core::package::RootPackageData; +use mozart_core::package::archiver::ArchiveManager; +use std::path::{Path, PathBuf}; /// Project-level Composer state. Mirrors `Composer\PartialComposer` / /// `Composer\Composer` in PHP, exposing the subset of getters command @@ -30,9 +31,10 @@ pub struct Composer { package: RootPackageData, repository_manager: RepositoryManager, installation_manager: InstallationManager, - download_manager: DownloadManager, + download_manager: std::sync::Arc<tokio::sync::Mutex<DownloadManager>>, autoload_generator: AutoloadGenerator, locker: Locker, + archive_manager: std::sync::Arc<tokio::sync::Mutex<ArchiveManager>>, } impl Composer { @@ -48,9 +50,10 @@ impl Composer { package: RootPackageData, repository_manager: RepositoryManager, installation_manager: InstallationManager, - download_manager: DownloadManager, + download_manager: std::sync::Arc<tokio::sync::Mutex<DownloadManager>>, autoload_generator: AutoloadGenerator, locker: Locker, + archive_manager: std::sync::Arc<tokio::sync::Mutex<ArchiveManager>>, ) -> Self { Self { project_dir, @@ -61,13 +64,17 @@ impl Composer { download_manager, autoload_generator, locker, + archive_manager, } } /// Load Composer state for `project_dir`, requiring a composer.json. /// Mirrors `BaseCommand::requireComposer()`, which delegates to /// `Factory::createComposer` after asserting the file exists. - pub fn require(project_dir: impl Into<PathBuf>) -> anyhow::Result<Self> { + pub fn require( + io: std::sync::Arc<std::sync::Mutex<Box<dyn IoInterface>>>, + project_dir: impl Into<PathBuf>, + ) -> anyhow::Result<Self> { let project_dir = project_dir.into(); let composer_json = project_dir.join("composer.json"); if !composer_json.exists() { @@ -76,31 +83,37 @@ impl Composer { project_dir.display() ); } - create_composer(project_dir, &composer_json) + create_composer(io, project_dir, &composer_json) } /// Load Composer state for `project_dir`, returning `None` if no /// composer.json exists. Other I/O or parse errors still propagate. /// Mirrors `BaseCommand::tryComposer()`. - pub fn try_load(project_dir: impl Into<PathBuf>) -> anyhow::Result<Option<Self>> { + pub fn try_load( + io: std::sync::Arc<std::sync::Mutex<Box<dyn IoInterface>>>, + project_dir: impl Into<PathBuf>, + ) -> anyhow::Result<Option<Self>> { let project_dir = project_dir.into(); let composer_json = project_dir.join("composer.json"); if !composer_json.exists() { return Ok(None); } - create_composer(project_dir, &composer_json).map(Some) + create_composer(io, project_dir, &composer_json).map(Some) } /// Load Composer state keyed on a specific `composer.json` file, deriving /// the project directory from `file.parent()`. Mirrors /// `ValidateCommand::createComposerInstance($file)` — Composer keys /// instances on a file rather than a directory for non-default paths. - pub fn try_load_from_file(file: &Path) -> anyhow::Result<Option<Self>> { + pub fn try_load_from_file( + io: std::sync::Arc<std::sync::Mutex<Box<dyn IoInterface>>>, + file: &Path, + ) -> anyhow::Result<Option<Self>> { let project_dir = file .parent() .map(Path::to_path_buf) .unwrap_or_else(|| PathBuf::from(".")); - Self::try_load(project_dir) + Self::try_load(io, project_dir) } pub fn project_dir(&self) -> &Path { @@ -130,7 +143,7 @@ impl Composer { &self.installation_manager } - pub fn download_manager(&self) -> &DownloadManager { + pub fn download_manager(&self) -> &std::sync::Arc<tokio::sync::Mutex<DownloadManager>> { &self.download_manager } @@ -149,4 +162,8 @@ impl Composer { pub fn locker(&self) -> &Locker { &self.locker } + + pub fn archive_manager(&self) -> &std::sync::Arc<tokio::sync::Mutex<ArchiveManager>> { + &self.archive_manager + } } |
