mars-agents 0.12.0

Agent package manager for .agents/ directories
Documentation
//! `mars remove <dependency>` — remove a dependency from config and prune its items.

use crate::error::MarsError;
use crate::sync::{ConfigMutation, ResolutionMode, SyncOptions, SyncRequest};
use crate::types::SourceName;

use super::output;

/// Arguments for `mars remove`.
#[derive(Debug, clap::Args)]
pub struct RemoveArgs {
    /// Name of the source to remove.
    pub source: String,
}

/// Run `mars remove`.
pub fn run(args: &RemoveArgs, ctx: &super::MarsContext, json: bool) -> Result<i32, MarsError> {
    let request = SyncRequest {
        resolution: ResolutionMode::Normal,
        mutation: Some(ConfigMutation::RemoveDependency {
            name: SourceName::from(args.source.as_str()),
        }),
        options: SyncOptions::default(),
        recovery: crate::sync::RecoveryPolicy::DeferOnUnreadable,
        lossiness_mode: crate::diagnostic::LossinessMode::Hidden,
    };
    let report = crate::sync::execute(ctx, &request)?;

    if !json && report.recovery_halt.is_none() {
        output::print_info(&format!("removed dependency `{}`", args.source));
    }

    output::print_sync_report(&report, json, true);

    Ok(if report.recovery_halt.is_some() { 2 } else { 0 })
}