use crate::objects::ObjectId;
use crate::repo::Repository;
use crate::stripspace::{process, Mode};
use super::error::HistoryError;
use super::plan::plan_rewrite;
use super::types::{CommitEdit, HistoryEdits, RewriteOptions, RewritePlan};
pub fn normalize_rewrite_message(raw: &str) -> Result<String, HistoryError> {
let trimmed = raw.trim();
let processed = process(trimmed.as_bytes(), &Mode::Default);
let message = String::from_utf8(processed).map_err(|_| HistoryError::EmptyMessage)?;
if message.is_empty() {
return Err(HistoryError::EmptyMessage);
}
let mut message = message;
if !message.ends_with('\n') {
message.push('\n');
}
Ok(message)
}
pub fn reword(
repo: &Repository,
commit: ObjectId,
message: String,
opts: &RewriteOptions,
) -> Result<RewritePlan, HistoryError> {
let message = normalize_rewrite_message(&message)?;
let mut edits = HistoryEdits::new();
edits.insert(
commit,
CommitEdit::Rewrite {
tree: None,
message: Some(message),
author: None,
parents: None,
},
);
plan_rewrite(repo, &edits, opts)
}