Skip to main content

mars_agents/cli/
upgrade.rs

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