aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/mozart/src/commands/archive.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/mozart/src/commands/archive.rs')
-rw-r--r--crates/mozart/src/commands/archive.rs39
1 files changed, 24 insertions, 15 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();