1use crate::error::MarsError;
5use crate::sync::{ResolutionMode, SyncOptions, SyncRequest};
6
7use super::output;
8
9#[derive(Debug, clap::Args)]
11pub struct SyncArgs {
12 #[arg(long)]
14 pub force: bool,
15
16 #[arg(long)]
18 pub diff: bool,
19
20 #[arg(long)]
22 pub frozen: bool,
23}
24
25pub fn run(args: &SyncArgs, ctx: &super::MarsContext, json: bool) -> Result<i32, MarsError> {
27 let request = SyncRequest {
28 resolution: ResolutionMode::Normal,
29 mutation: None,
30 options: SyncOptions {
31 force: args.force,
32 dry_run: args.diff,
33 frozen: args.frozen,
34 },
35 };
36
37 let report = crate::sync::execute(&ctx.managed_root, &request)?;
38
39 output::print_sync_report(&report, json);
40
41 if report.has_conflicts() { Ok(1) } else { Ok(0) }
42}