Skip to main content

mars_agents/cli/
remove.rs

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