Skip to main content

mars_agents/cli/
upgrade.rs

1//! `mars upgrade` — upgrade sources to newest versions within constraints.
2
3use crate::error::MarsError;
4use crate::sync::{ResolutionMode, SyncOptions, SyncRequest};
5use crate::types::SourceName;
6
7use super::output;
8
9/// Arguments for `mars upgrade`.
10#[derive(Debug, clap::Args)]
11pub struct UpgradeArgs {
12    /// Specific sources to upgrade (default: all).
13    pub sources: Vec<String>,
14}
15
16/// Run `mars upgrade`.
17pub fn run(args: &UpgradeArgs, ctx: &super::MarsContext, json: bool) -> Result<i32, MarsError> {
18    let request = SyncRequest {
19        resolution: ResolutionMode::Maximize {
20            targets: args
21                .sources
22                .iter()
23                .map(|s| SourceName::from(s.as_str()))
24                .collect(),
25        },
26        mutation: None,
27        options: SyncOptions::default(),
28    };
29
30    let report = crate::sync::execute(&ctx.managed_root, &request)?;
31
32    output::print_sync_report(&report, json);
33
34    if report.has_conflicts() { Ok(1) } else { Ok(0) }
35}