use crate::error::MarsError;
use crate::sync::{ConfigMutation, ResolutionMode, SyncOptions, SyncRequest};
use crate::types::SourceName;
use super::output;
#[derive(Debug, clap::Args)]
pub struct OverrideArgs {
pub source: String,
#[arg(long)]
pub path: std::path::PathBuf,
}
pub fn run(args: &OverrideArgs, ctx: &super::MarsContext, json: bool) -> Result<i32, MarsError> {
let request = SyncRequest {
resolution: ResolutionMode::Normal,
mutation: Some(ConfigMutation::SetOverride {
source_name: SourceName::from(args.source.as_str()),
local_path: args.path.clone(),
}),
options: SyncOptions::default(),
recovery: crate::sync::RecoveryPolicy::DeferOnUnreadable,
lossiness_mode: crate::diagnostic::LossinessMode::Hidden,
};
let report = crate::sync::execute(ctx, &request)?;
if !json && report.recovery_halt.is_none() {
output::print_success(&format!(
"override `{}` → {}",
args.source,
args.path.display()
));
}
output::print_sync_report(&report, json, true);
Ok(if report.recovery_halt.is_some() { 2 } else { 0 })
}