aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/mozart/src/commands/prohibits.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/mozart/src/commands/prohibits.rs')
-rw-r--r--crates/mozart/src/commands/prohibits.rs109
1 files changed, 12 insertions, 97 deletions
diff --git a/crates/mozart/src/commands/prohibits.rs b/crates/mozart/src/commands/prohibits.rs
index 8eb4166..4bb00e4 100644
--- a/crates/mozart/src/commands/prohibits.rs
+++ b/crates/mozart/src/commands/prohibits.rs
@@ -1,6 +1,4 @@
use clap::Args;
-use mozart_core::console_format;
-use std::path::PathBuf;
#[derive(Args)]
pub struct ProhibitsArgs {
@@ -28,99 +26,16 @@ pub async fn execute(
cli: &super::Cli,
console: &mozart_core::console::Console,
) -> anyhow::Result<()> {
- let working_dir = match &cli.working_dir {
- Some(dir) => PathBuf::from(dir),
- None => std::env::current_dir()?,
- };
-
- let packages = super::dependency::load_packages(&working_dir, args.locked)?;
-
- if packages.is_empty() {
- console.write_error(
- "No dependencies installed. Try running mozart install or update, or use --locked.",
- );
- return Err(mozart_core::exit_code::bail_silent(
- mozart_core::exit_code::GENERAL_ERROR,
- ));
- }
-
- let target = args.package.to_lowercase();
-
- // Fix #2: Verify the target package is known
- let target_known = packages.iter().any(|p| p.name.to_lowercase() == target);
- if !target_known {
- anyhow::bail!(
- "Could not find package \"{}\" in your project",
- args.package
- );
- }
-
- // Parse the version constraint the user is asking about
- let version_constraint = mozart_semver::VersionConstraint::parse(&args.version)
- .map_err(|e| anyhow::anyhow!("Invalid version constraint '{}': {}", args.version, e))?;
-
- let recursive = args.tree || args.recursive;
- let needles = vec![target];
-
- let results = super::dependency::get_dependents(
- &packages,
- &needles,
- Some(&version_constraint),
- true, // inverted = prohibits mode
- recursive,
- )?;
-
- if results.is_empty() {
- console.write_stdout(
- &console_format!(
- "<info>{} {} can be installed.</info>",
- args.package,
- args.version
- ),
- mozart_core::console::Verbosity::Normal,
- );
- return Ok(());
- }
-
- if args.tree {
- super::dependency::print_tree(&results, 0, console);
- } else {
- super::dependency::print_table(&results, console);
- }
-
- // Fix #5: Print resolution hint message
- // Determine the appropriate composer command based on whether the needle
- // is in root's require or require-dev.
- let needle_lower = args.package.to_lowercase();
- let composer_command = packages
- .iter()
- .find(|p| p.is_root)
- .map(|root| {
- if root
- .require
- .keys()
- .any(|k| k.to_lowercase() == needle_lower)
- {
- "require"
- } else if root
- .require_dev
- .keys()
- .any(|k| k.to_lowercase() == needle_lower)
- {
- "require --dev"
- } else {
- "update"
- }
- })
- .unwrap_or("update");
-
- console.info(&format!(
- "Not finding what you were looking for? Try calling `composer {} \"{}:{}\" --dry-run` to get another view on the problem.",
- composer_command, args.package, args.version
- ));
-
- // Fix #3: Return exit code 1 when prohibitors are found
- Err(mozart_core::exit_code::bail_silent(
- mozart_core::exit_code::GENERAL_ERROR,
- ))
+ super::dependency::do_execute(
+ cli,
+ console,
+ super::dependency::DoExecuteArgs {
+ package: &args.package,
+ version: Some(&args.version),
+ recursive: args.recursive,
+ tree: args.tree,
+ locked: args.locked,
+ inverted: true,
+ },
+ )
}