aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/mozart/src/commands/depends.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/mozart/src/commands/depends.rs')
-rw-r--r--crates/mozart/src/commands/depends.rs41
1 files changed, 39 insertions, 2 deletions
diff --git a/crates/mozart/src/commands/depends.rs b/crates/mozart/src/commands/depends.rs
index ecdbb24..fa84f7d 100644
--- a/crates/mozart/src/commands/depends.rs
+++ b/crates/mozart/src/commands/depends.rs
@@ -1,4 +1,5 @@
use clap::Args;
+use std::path::PathBuf;
#[derive(Args)]
pub struct DependsArgs {
@@ -18,6 +19,42 @@ pub struct DependsArgs {
pub locked: bool,
}
-pub fn execute(_args: &DependsArgs, _cli: &super::Cli) -> anyhow::Result<()> {
- todo!()
+pub fn execute(args: &DependsArgs, cli: &super::Cli) -> 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() {
+ println!(
+ "{}",
+ crate::console::info("No packages found. Run `mozart install` first.")
+ );
+ return Ok(());
+ }
+
+ let target = args.package.to_lowercase();
+
+ // Verify the target package is known
+ let target_known = packages.iter().any(|p| p.name.to_lowercase() == target);
+ if !target_known {
+ anyhow::bail!(
+ "Package '{}' not found in the dependency graph.",
+ args.package
+ );
+ }
+
+ let recursive = args.tree || args.recursive;
+ let needles = vec![target];
+ let results = super::dependency::get_dependents(&packages, &needles, None, false, recursive)?;
+
+ if args.tree {
+ super::dependency::print_tree(&results, 0);
+ } else {
+ super::dependency::print_table(&results);
+ }
+
+ Ok(())
}