aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/mozart/src/commands
diff options
context:
space:
mode:
Diffstat (limited to 'crates/mozart/src/commands')
-rw-r--r--crates/mozart/src/commands/archive.rs39
-rw-r--r--crates/mozart/src/commands/audit.rs2
-rw-r--r--crates/mozart/src/commands/browse.rs2
-rw-r--r--crates/mozart/src/commands/bump.rs2
-rw-r--r--crates/mozart/src/commands/clear_cache.rs2
-rw-r--r--crates/mozart/src/commands/create_project.rs24
-rw-r--r--crates/mozart/src/commands/diagnose.rs2
-rw-r--r--crates/mozart/src/commands/dump_autoload.rs2
-rw-r--r--crates/mozart/src/commands/exec.rs30
-rw-r--r--crates/mozart/src/commands/fund.rs2
-rw-r--r--crates/mozart/src/commands/licenses.rs2
-rw-r--r--crates/mozart/src/commands/reinstall.rs2
-rw-r--r--crates/mozart/src/commands/run_script.rs4
-rw-r--r--crates/mozart/src/commands/status.rs4
-rw-r--r--crates/mozart/src/commands/update.rs2
-rw-r--r--crates/mozart/src/commands/validate.rs4
16 files changed, 72 insertions, 53 deletions
diff --git a/crates/mozart/src/commands/archive.rs b/crates/mozart/src/commands/archive.rs
index e1c0fa3..ed7de0e 100644
--- a/crates/mozart/src/commands/archive.rs
+++ b/crates/mozart/src/commands/archive.rs
@@ -1,9 +1,11 @@
use crate::composer::Composer;
+use crate::factory::{create_archive_manager, create_download_manager};
use clap::Args;
+use mozart_core::config::Config;
use mozart_core::console::IoInterface;
use mozart_core::console_writeln;
use mozart_core::factory::create_config;
-use mozart_core::package::archiver::{ArchiveManager, ArchivePackage};
+use mozart_core::package::archiver::ArchivePackage;
use std::borrow::Cow;
use std::path::{Path, PathBuf};
@@ -39,7 +41,7 @@ pub async fn execute(
) -> anyhow::Result<()> {
let working_dir = cli.working_dir()?;
- let composer = Composer::try_load(&working_dir)?;
+ let composer = Composer::try_load(io.clone(), &working_dir)?;
let config = if let Some(composer) = &composer {
Cow::Borrowed(composer.config())
} else {
@@ -50,7 +52,8 @@ pub async fn execute(
let dir = args.dir.as_deref().unwrap_or(&config.archive_dir);
archive(
- &io,
+ io,
+ &config,
args.package.as_deref(),
args.version.as_deref(),
format,
@@ -59,13 +62,15 @@ pub async fn execute(
args.ignore_filters,
&working_dir,
cli.no_cache,
+ composer.as_ref(),
)
.await
}
#[allow(clippy::too_many_arguments)]
async fn archive(
- io: &std::sync::Arc<std::sync::Mutex<Box<dyn IoInterface>>>,
+ io: std::sync::Arc<std::sync::Mutex<Box<dyn IoInterface>>>,
+ config: &Config,
package_name: Option<&str>,
version: Option<&str>,
format: &str,
@@ -74,15 +79,24 @@ async fn archive(
ignore_filters: bool,
working_dir: &Path,
no_cache: bool,
+ composer: Option<&Composer>,
) -> anyhow::Result<()> {
let cache_config = mozart_core::repository::cache::build_cache_config(no_cache);
let repo_cache = mozart_core::repository::cache::Cache::repo(&cache_config);
- let files_cache = mozart_core::repository::cache::Cache::files(&cache_config);
- let archive_manager = ArchiveManager::new();
+ let archive_manager = if let Some(composer) = composer {
+ Cow::Borrowed(composer.archive_manager())
+ } else {
+ let download_manager = std::sync::Arc::new(tokio::sync::Mutex::new(
+ create_download_manager(io.clone(), config),
+ ));
+ Cow::Owned(std::sync::Arc::new(tokio::sync::Mutex::new(
+ create_archive_manager(download_manager),
+ )))
+ };
let package = if let Some(package_name) = package_name {
- select_package(io, package_name, version, &repo_cache).await?
+ select_package(&io, package_name, version, &repo_cache).await?
} else {
load_root_package(working_dir)?
};
@@ -97,14 +111,9 @@ async fn archive(
.unwrap()
.info(&format!("Creating the archive into \"{}\".", dest));
let package_path = archive_manager
- .archive(
- &package,
- format,
- &dest_dir,
- file_name,
- ignore_filters,
- &files_cache,
- )
+ .lock()
+ .await
+ .archive(&package, format, &dest_dir, file_name, ignore_filters)
.await?;
let absolute = package_path.display().to_string();
diff --git a/crates/mozart/src/commands/audit.rs b/crates/mozart/src/commands/audit.rs
index 9672d57..0b84ccf 100644
--- a/crates/mozart/src/commands/audit.rs
+++ b/crates/mozart/src/commands/audit.rs
@@ -44,7 +44,7 @@ pub async fn execute(
let working_dir = cli.working_dir()?;
// Load Composer state (reads composer.json + config)
- let composer = Composer::require(&working_dir)?;
+ let composer = Composer::require(io.clone(), &working_dir)?;
// Parse audit config from composer.json's config.audit section
let audit_config = AuditConfig::from_config(composer.config(), true, AuditFormat::Table)?;
diff --git a/crates/mozart/src/commands/browse.rs b/crates/mozart/src/commands/browse.rs
index ada3b8b..e3eae22 100644
--- a/crates/mozart/src/commands/browse.rs
+++ b/crates/mozart/src/commands/browse.rs
@@ -32,7 +32,7 @@ pub async fn execute(
let working_dir = cli.working_dir()?;
let cache = Cache::repo(&build_cache_config(cli.no_cache));
- let composer = Composer::try_load(&working_dir)?;
+ let composer = Composer::try_load(io.clone(), &working_dir)?;
let repos = build_repos(composer.as_ref(), cache);
let packages: Vec<String> = if args.packages.is_empty() {
diff --git a/crates/mozart/src/commands/bump.rs b/crates/mozart/src/commands/bump.rs
index dc7a5e7..351be01 100644
--- a/crates/mozart/src/commands/bump.rs
+++ b/crates/mozart/src/commands/bump.rs
@@ -35,7 +35,7 @@ pub async fn execute(
io: std::sync::Arc<std::sync::Mutex<Box<dyn IoInterface>>>,
) -> anyhow::Result<()> {
let working_dir = cli.working_dir()?;
- let composer = Composer::require(&working_dir)?;
+ let composer = Composer::require(io.clone(), &working_dir)?;
let exit = do_bump(
io,
diff --git a/crates/mozart/src/commands/clear_cache.rs b/crates/mozart/src/commands/clear_cache.rs
index dbca5c8..c0f2957 100644
--- a/crates/mozart/src/commands/clear_cache.rs
+++ b/crates/mozart/src/commands/clear_cache.rs
@@ -18,7 +18,7 @@ pub async fn execute(
cli: &super::Cli,
io: std::sync::Arc<std::sync::Mutex<Box<dyn IoInterface>>>,
) -> anyhow::Result<()> {
- let composer = Composer::try_load(cli.working_dir()?)?;
+ let composer = Composer::try_load(io.clone(), cli.working_dir()?)?;
let config = if let Some(composer) = &composer {
Cow::Borrowed(composer.config())
} else {
diff --git a/crates/mozart/src/commands/create_project.rs b/crates/mozart/src/commands/create_project.rs
index 276bd3a..08e146e 100644
--- a/crates/mozart/src/commands/create_project.rs
+++ b/crates/mozart/src/commands/create_project.rs
@@ -2,6 +2,7 @@ use clap::Args;
use indexmap::IndexMap;
use mozart_core::console::IoInterface;
use mozart_core::console_format;
+use mozart_core::factory::create_config;
use mozart_core::package::{self, Stability};
use mozart_core::repository::downloader;
use mozart_core::repository::lockfile;
@@ -11,6 +12,8 @@ use mozart_core::repository::version;
use mozart_core::validation;
use std::path::{Path, PathBuf};
+use crate::factory::create_download_manager;
+
#[derive(Args)]
pub struct CreateProjectArgs {
/// Package name to install
@@ -337,7 +340,7 @@ pub async fn execute(
let secure_http = !args.no_secure_http;
install_project(
- &io,
+ io,
cli,
args,
args.package.as_deref(),
@@ -362,7 +365,7 @@ pub async fn execute(
#[allow(clippy::too_many_arguments)]
async fn install_project(
- io: &std::sync::Arc<std::sync::Mutex<Box<dyn IoInterface>>>,
+ io: std::sync::Arc<std::sync::Mutex<Box<dyn IoInterface>>>,
cli: &super::Cli,
args: &CreateProjectArgs,
package_name: Option<&str>,
@@ -395,7 +398,7 @@ async fn install_project(
let root_result = if let Some(name) = package_name {
Some(
install_root_package(
- io,
+ io.clone(),
cli,
args,
name,
@@ -647,7 +650,7 @@ async fn install_project(
#[allow(clippy::too_many_arguments)]
async fn install_root_package(
- io: &std::sync::Arc<std::sync::Mutex<Box<dyn IoInterface>>>,
+ io: std::sync::Arc<std::sync::Mutex<Box<dyn IoInterface>>>,
cli: &super::Cli,
_args: &CreateProjectArgs,
package_name: &str,
@@ -733,7 +736,6 @@ async fn install_root_package(
// --- Find the best candidate matching constraint + stability ---
let cache_config = mozart_core::repository::cache::build_cache_config(cli.no_cache);
let repo_cache = mozart_core::repository::cache::Cache::repo(&cache_config);
- let files_cache = mozart_core::repository::cache::Cache::files(&cache_config);
let versions = packagist::fetch_package_versions(&name, &repo_cache).await?;
@@ -786,13 +788,11 @@ async fn install_root_package(
let mut progress =
downloader::DownloadProgress::new(!no_progress, format!("{name} ({concrete_version})"));
- let bytes = downloader::download_dist(
- &dist.url,
- dist.shasum.as_deref(),
- Some(&mut progress),
- &files_cache,
- )
- .await?;
+ let config = create_config()?;
+ let download_manager = create_download_manager(io.clone(), &config);
+ let bytes = download_manager
+ .download_legacy(&dist.url, dist.shasum.as_deref(), Some(&mut progress))
+ .await?;
progress.finish();
diff --git a/crates/mozart/src/commands/diagnose.rs b/crates/mozart/src/commands/diagnose.rs
index d139467..a1d655f 100644
--- a/crates/mozart/src/commands/diagnose.rs
+++ b/crates/mozart/src/commands/diagnose.rs
@@ -362,7 +362,7 @@ pub async fn execute(
let mut exit_code: i32 = 0;
- let composer = Composer::try_load(&working_dir)?;
+ let composer = Composer::try_load(io.clone(), &working_dir)?;
let config: Cow<'_, Config> = if let Some(c) = &composer {
Cow::Borrowed(c.config())
} else {
diff --git a/crates/mozart/src/commands/dump_autoload.rs b/crates/mozart/src/commands/dump_autoload.rs
index b66b7fc..211b46e 100644
--- a/crates/mozart/src/commands/dump_autoload.rs
+++ b/crates/mozart/src/commands/dump_autoload.rs
@@ -57,7 +57,7 @@ pub async fn execute(
cli: &super::Cli,
io: std::sync::Arc<std::sync::Mutex<Box<dyn IoInterface>>>,
) -> anyhow::Result<()> {
- let composer = Composer::require(cli.working_dir()?)?;
+ let composer = Composer::require(io.clone(), cli.working_dir()?)?;
let installation_manager = composer.installation_manager();
let local_repo = composer.repository_manager().local_repository();
diff --git a/crates/mozart/src/commands/exec.rs b/crates/mozart/src/commands/exec.rs
index e1a9e2b..f2a9c55 100644
--- a/crates/mozart/src/commands/exec.rs
+++ b/crates/mozart/src/commands/exec.rs
@@ -25,7 +25,7 @@ pub async fn execute(
) -> anyhow::Result<()> {
let working_dir = cli.working_dir()?;
- let composer = Composer::require(&working_dir)?;
+ let composer = Composer::require(io.clone(), &working_dir)?;
let bin_dir = resolve_bin_dir(&working_dir, &composer);
if args.list || args.binary.is_none() {
@@ -150,7 +150,15 @@ fn get_binaries(composer: &Composer, bin_dir: &Path) -> Vec<(String, bool)> {
#[cfg(test)]
mod tests {
use super::*;
+ use mozart_core::console::Console;
use std::fs;
+ use std::sync::{Arc, Mutex};
+
+ fn io() -> Arc<Mutex<Box<dyn IoInterface>>> {
+ Arc::new(Mutex::new(
+ Box::new(Console::new(0, true, false, true, true)) as Box<dyn IoInterface>,
+ ))
+ }
#[test]
fn test_resolve_bin_dir_default() {
@@ -158,7 +166,7 @@ mod tests {
let composer_json = dir.path().join("composer.json");
fs::write(&composer_json, r#"{"name": "test/pkg", "require": {}}"#).unwrap();
- let composer = Composer::require(dir.path()).unwrap();
+ let composer = Composer::require(io(), dir.path()).unwrap();
let result = resolve_bin_dir(dir.path(), &composer);
assert_eq!(result, dir.path().join("vendor/bin"));
}
@@ -173,7 +181,7 @@ mod tests {
)
.unwrap();
- let composer = Composer::require(dir.path()).unwrap();
+ let composer = Composer::require(io(), dir.path()).unwrap();
let result = resolve_bin_dir(dir.path(), &composer);
assert_eq!(result, dir.path().join("libs/bin"));
}
@@ -188,7 +196,7 @@ mod tests {
)
.unwrap();
- let composer = Composer::require(dir.path()).unwrap();
+ let composer = Composer::require(io(), dir.path()).unwrap();
let result = resolve_bin_dir(dir.path(), &composer);
assert_eq!(result, dir.path().join("scripts"));
}
@@ -203,7 +211,7 @@ mod tests {
)
.unwrap();
- let composer = Composer::require(dir.path()).unwrap();
+ let composer = Composer::require(io(), dir.path()).unwrap();
let result = resolve_bin_dir(dir.path(), &composer);
assert_eq!(result, dir.path().join("packages/commands"));
}
@@ -223,7 +231,7 @@ mod tests {
)
.unwrap();
- let composer = Composer::require(dir.path()).unwrap();
+ let composer = Composer::require(io(), dir.path()).unwrap();
let binaries = get_binaries(&composer, &bin_dir);
let names: Vec<&str> = binaries.iter().map(|(n, _)| n.as_str()).collect();
assert!(names.contains(&"phpunit"));
@@ -249,7 +257,7 @@ mod tests {
)
.unwrap();
- let composer = Composer::require(dir.path()).unwrap();
+ let composer = Composer::require(io(), dir.path()).unwrap();
let binaries = get_binaries(&composer, &bin_dir);
let names: Vec<&str> = binaries.iter().map(|(n, _)| n.as_str()).collect();
assert!(names.contains(&"phpunit"));
@@ -268,7 +276,7 @@ mod tests {
)
.unwrap();
- let composer = Composer::require(dir.path()).unwrap();
+ let composer = Composer::require(io(), dir.path()).unwrap();
let binaries = get_binaries(&composer, &bin_dir);
let names: Vec<&str> = binaries.iter().map(|(n, _)| n.as_str()).collect();
assert!(names.contains(&"my-tool"));
@@ -291,7 +299,7 @@ mod tests {
)
.unwrap();
- let composer = Composer::require(dir.path()).unwrap();
+ let composer = Composer::require(io(), dir.path()).unwrap();
let binaries = get_binaries(&composer, &bin_dir);
assert!(binaries.is_empty());
}
@@ -306,7 +314,7 @@ mod tests {
.unwrap();
let bin_dir = dir.path().join("vendor/bin");
- let composer = Composer::require(dir.path()).unwrap();
+ let composer = Composer::require(io(), dir.path()).unwrap();
let binaries = get_binaries(&composer, &bin_dir);
assert!(
binaries.is_empty(),
@@ -323,7 +331,7 @@ mod tests {
)
.unwrap();
- let composer = Composer::require(dir.path()).unwrap();
+ let composer = Composer::require(io(), dir.path()).unwrap();
let bin_dir = resolve_bin_dir(dir.path(), &composer);
// No binaries exist — looking up a name should find nothing
diff --git a/crates/mozart/src/commands/fund.rs b/crates/mozart/src/commands/fund.rs
index 6b0cd67..677137c 100644
--- a/crates/mozart/src/commands/fund.rs
+++ b/crates/mozart/src/commands/fund.rs
@@ -31,7 +31,7 @@ pub async fn execute(
}
let working_dir = cli.working_dir()?;
- let composer = Composer::require(&working_dir)?;
+ let composer = Composer::require(io.clone(), &working_dir)?;
let installed = InstalledPackages::read(composer.installation_manager().vendor_dir())?;
// Configured remote repositories from `composer.json` are not yet wired
diff --git a/crates/mozart/src/commands/licenses.rs b/crates/mozart/src/commands/licenses.rs
index aecfe86..73f2018 100644
--- a/crates/mozart/src/commands/licenses.rs
+++ b/crates/mozart/src/commands/licenses.rs
@@ -79,7 +79,7 @@ pub async fn execute(
);
}
- let composer = Composer::require(&working_dir)?;
+ let composer = Composer::require(io.clone(), &working_dir)?;
// TODO(plugins): dispatch CommandEvent for `licenses`.
diff --git a/crates/mozart/src/commands/reinstall.rs b/crates/mozart/src/commands/reinstall.rs
index d9156bc..ca23a64 100644
--- a/crates/mozart/src/commands/reinstall.rs
+++ b/crates/mozart/src/commands/reinstall.rs
@@ -66,7 +66,7 @@ pub async fn execute(
io: std::sync::Arc<std::sync::Mutex<Box<dyn IoInterface>>>,
) -> anyhow::Result<()> {
let working_dir = cli.working_dir()?;
- let composer = Composer::require(&working_dir)?;
+ let composer = Composer::require(io.clone(), &working_dir)?;
let local_repo = composer.repository_manager().local_repository();
// Selection: mirrors `ReinstallCommand::execute` lines 79-110.
diff --git a/crates/mozart/src/commands/run_script.rs b/crates/mozart/src/commands/run_script.rs
index c2e52a6..ab3700d 100644
--- a/crates/mozart/src/commands/run_script.rs
+++ b/crates/mozart/src/commands/run_script.rs
@@ -42,7 +42,7 @@ pub async fn execute(
let working_dir = cli.working_dir()?;
if args.list {
- Composer::require(&working_dir)?;
+ Composer::require(io.clone(), &working_dir)?;
let (scripts, descriptions) = load_scripts(&working_dir)?;
return list_scripts(&scripts, &descriptions, io.clone());
}
@@ -58,7 +58,7 @@ pub async fn execute(
anyhow::bail!("Script \"{}\" cannot be run with this command", script);
}
- let composer = Composer::require(&working_dir)?;
+ let composer = Composer::require(io.clone(), &working_dir)?;
let dev_mode = args.dev || !args.no_dev;
let (scripts, _descriptions) = load_scripts(&working_dir)?;
diff --git a/crates/mozart/src/commands/status.rs b/crates/mozart/src/commands/status.rs
index d538138..cb33223 100644
--- a/crates/mozart/src/commands/status.rs
+++ b/crates/mozart/src/commands/status.rs
@@ -17,11 +17,11 @@ pub async fn execute(
io: std::sync::Arc<std::sync::Mutex<Box<dyn IoInterface>>>,
) -> anyhow::Result<()> {
// init repos
- let composer = Composer::require(cli.working_dir()?)?;
+ let composer = Composer::require(io.clone(), cli.working_dir()?)?;
let installed_repo = composer.repository_manager().local_repository();
- let dm = composer.download_manager();
+ let dm = composer.download_manager().lock().await;
let im = composer.installation_manager();
let mut errors = Vec::new();
diff --git a/crates/mozart/src/commands/update.rs b/crates/mozart/src/commands/update.rs
index 362fad5..f482272 100644
--- a/crates/mozart/src/commands/update.rs
+++ b/crates/mozart/src/commands/update.rs
@@ -1747,7 +1747,7 @@ pub async fn run(
let mode = bump_mode.as_deref().unwrap_or("all");
let dev_only = mode == "dev";
let no_dev_only = mode == "no-dev";
- let bump_composer = Composer::require(working_dir)?;
+ let bump_composer = Composer::require(io.clone(), working_dir)?;
let bump_exit = super::bump::do_bump(
io.clone(),
&bump_composer,
diff --git a/crates/mozart/src/commands/validate.rs b/crates/mozart/src/commands/validate.rs
index a6dbf91..23925c5 100644
--- a/crates/mozart/src/commands/validate.rs
+++ b/crates/mozart/src/commands/validate.rs
@@ -104,7 +104,9 @@ pub async fn execute(
// Load the Composer project state (optional — used for typed config,
// locker, and the repository/installation managers). Mirrors
// `ValidateCommand::createComposerInstance($file)`.
- let composer = Composer::try_load_from_file(&file).ok().flatten();
+ let composer = Composer::try_load_from_file(io.clone(), &file)
+ .ok()
+ .flatten();
// Determine whether to check the lock file using the typed config when
// available, falling back to a raw JSON read for paths where the Composer