mirror of
https://github.com/martinvonz/jj.git
synced 2025-05-08 00:42:50 +00:00
absorb: wrap absorb_hunks() result in struct
This patch also renames rewritten_commits as I'm going to add rewritten_source field.
This commit is contained in:
parent
3711979a8f
commit
e910ac4040
@ -91,27 +91,33 @@ pub(crate) fn cmd_absorb(
|
||||
workspace_command.check_rewritable(selected_trees.target_commits.keys())?;
|
||||
|
||||
let mut tx = workspace_command.start_transaction();
|
||||
let (rewritten_commits, num_rebased) =
|
||||
absorb_hunks(tx.repo_mut(), &source, selected_trees.target_commits)?;
|
||||
let stats = absorb_hunks(tx.repo_mut(), &source, selected_trees.target_commits)?;
|
||||
|
||||
if let Some(mut formatter) = ui.status_formatter() {
|
||||
if !rewritten_commits.is_empty() {
|
||||
if !stats.rewritten_destinations.is_empty() {
|
||||
writeln!(formatter, "Absorbed changes into these revisions:")?;
|
||||
let template = tx.commit_summary_template();
|
||||
for commit in rewritten_commits.iter().rev() {
|
||||
for commit in stats.rewritten_destinations.iter().rev() {
|
||||
write!(formatter, " ")?;
|
||||
template.format(commit, formatter.as_mut())?;
|
||||
writeln!(formatter)?;
|
||||
}
|
||||
}
|
||||
if num_rebased > 0 {
|
||||
writeln!(formatter, "Rebased {num_rebased} descendant commits.")?;
|
||||
if stats.num_rebased > 0 {
|
||||
writeln!(
|
||||
formatter,
|
||||
"Rebased {} descendant commits.",
|
||||
stats.num_rebased
|
||||
)?;
|
||||
}
|
||||
}
|
||||
|
||||
tx.finish(
|
||||
ui,
|
||||
format!("absorb changes into {} commits", rewritten_commits.len()),
|
||||
format!(
|
||||
"absorb changes into {} commits",
|
||||
stats.rewritten_destinations.len()
|
||||
),
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
|
@ -268,15 +268,26 @@ fn combine_texts(text1: &[u8], text2: &[u8], selected_ranges: &[SelectedRange])
|
||||
.collect()
|
||||
}
|
||||
|
||||
/// Describes changes made by [`absorb_hunks()`].
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct AbsorbStats {
|
||||
/// Rewritten commits which the source hunks were absorbed into, in forward
|
||||
/// topological order.
|
||||
pub rewritten_destinations: Vec<Commit>,
|
||||
/// Number of descendant commits which were rebased. The number of rewritten
|
||||
/// destination commits are not included.
|
||||
pub num_rebased: usize,
|
||||
}
|
||||
|
||||
/// Merges selected trees into the specified commits. Abandons the source commit
|
||||
/// if it becomes discardable.
|
||||
pub fn absorb_hunks(
|
||||
repo: &mut MutableRepo,
|
||||
source: &AbsorbSource,
|
||||
mut selected_trees: HashMap<CommitId, MergedTreeBuilder>,
|
||||
) -> BackendResult<(Vec<Commit>, usize)> {
|
||||
) -> BackendResult<AbsorbStats> {
|
||||
let store = repo.store().clone();
|
||||
let mut rewritten_commits = Vec::new();
|
||||
let mut rewritten_destinations = Vec::new();
|
||||
let mut num_rebased = 0;
|
||||
// Rewrite commits in topological order so that descendant commits wouldn't
|
||||
// be rewritten multiple times.
|
||||
@ -309,10 +320,13 @@ pub fn absorb_hunks(
|
||||
.set_tree_id(new_tree.id())
|
||||
.set_predecessors(predecessors)
|
||||
.write()?;
|
||||
rewritten_commits.push(new_commit);
|
||||
rewritten_destinations.push(new_commit);
|
||||
Ok(())
|
||||
})?;
|
||||
Ok((rewritten_commits, num_rebased))
|
||||
Ok(AbsorbStats {
|
||||
rewritten_destinations,
|
||||
num_rebased,
|
||||
})
|
||||
}
|
||||
|
||||
struct FileValue {
|
||||
|
Loading…
x
Reference in New Issue
Block a user