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