Skip to main content

mars_agents/cli/
remove.rs

1//! `mars remove <dependency>` — remove a dependency from config and prune its items.
2
3use crate::error::MarsError;
4use crate::sync::{ConfigMutation, ResolutionMode, SyncOptions, SyncRequest};
5use crate::types::SourceName;
6
7use super::output;
8
9/// Arguments for `mars remove`.
10#[derive(Debug, clap::Args)]
11pub struct RemoveArgs {
12    /// Name of the source to remove.
13    pub source: String,
14}
15
16/// Run `mars remove`.
17pub fn run(args: &RemoveArgs, ctx: &super::MarsContext, json: bool) -> Result<i32, MarsError> {
18    let request = SyncRequest {
19        resolution: ResolutionMode::Normal,
20        mutation: Some(ConfigMutation::RemoveDependency {
21            name: SourceName::from(args.source.as_str()),
22        }),
23        options: SyncOptions::default(),
24        recovery: crate::sync::RecoveryPolicy::DeferOnUnreadable,
25        lossiness_mode: crate::diagnostic::LossinessMode::Hidden,
26    };
27    let report = crate::sync::execute(ctx, &request)?;
28
29    if !json && report.recovery_halt.is_none() {
30        output::print_info(&format!("removed dependency `{}`", args.source));
31    }
32
33    output::print_sync_report(&report, json, true);
34
35    Ok(if report.recovery_halt.is_some() { 2 } else { 0 })
36}