use super::types::UndoResult;
use crate::error::Result;
use crate::traits::StateStore;
pub fn undo_sync(repo: &impl rung_git::GitOps, state: &impl StateStore) -> Result<UndoResult> {
let backup_id = state.latest_backup()?;
let refs = state.load_backup(&backup_id)?;
for (branch_name, sha) in &refs {
let oid = rung_git::Oid::from_str(sha).map_err(|e| {
crate::error::Error::SyncFailed(format!(
"invalid backup commit '{sha}' for branch '{branch_name}': {e}"
))
})?;
repo.reset_branch(branch_name, oid)?;
}
let branches_restored = refs.len();
state.delete_backup(&backup_id)?;
Ok(UndoResult {
branches_restored,
backup_id,
})
}