use crate::cli::upgrade::UpgradeArgs;
use crate::context::AppContext;
use crate::error::AppError;
use crate::output;
use crate::services::upgrader::{UpgradeOptions, upgrade};
pub fn run(ctx: &AppContext, args: UpgradeArgs) -> Result<(), AppError> {
let target = if args.target.is_absolute() {
args.target
} else if args.target == "." {
ctx.cwd.clone()
} else {
return Err(AppError::Usage("target must be absolute or .".to_string()));
};
let outcome = upgrade(&UpgradeOptions {
target,
dry_run: args.dry_run,
})?;
for line in &outcome.lines {
output::line(line);
}
if outcome.failures > 0 {
return Err(AppError::Violations {
count: outcome.failures,
});
}
Ok(())
}