mirror of
https://github.com/martinvonz/jj.git
synced 2025-05-11 10:22:51 +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())?;
|
workspace_command.check_rewritable(selected_trees.target_commits.keys())?;
|
||||||
|
|
||||||
let mut tx = workspace_command.start_transaction();
|
let mut tx = workspace_command.start_transaction();
|
||||||
let (rewritten_commits, num_rebased) =
|
let stats = absorb_hunks(tx.repo_mut(), &source, selected_trees.target_commits)?;
|
||||||
absorb_hunks(tx.repo_mut(), &source, selected_trees.target_commits)?;
|
|
||||||
|
|
||||||
if let Some(mut formatter) = ui.status_formatter() {
|
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:")?;
|
writeln!(formatter, "Absorbed changes into these revisions:")?;
|
||||||
let template = tx.commit_summary_template();
|
let template = tx.commit_summary_template();
|
||||||
for commit in rewritten_commits.iter().rev() {
|
for commit in stats.rewritten_destinations.iter().rev() {
|
||||||
write!(formatter, " ")?;
|
write!(formatter, " ")?;
|
||||||
template.format(commit, formatter.as_mut())?;
|
template.format(commit, formatter.as_mut())?;
|
||||||
writeln!(formatter)?;
|
writeln!(formatter)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if num_rebased > 0 {
|
if stats.num_rebased > 0 {
|
||||||
writeln!(formatter, "Rebased {num_rebased} descendant commits.")?;
|
writeln!(
|
||||||
|
formatter,
|
||||||
|
"Rebased {} descendant commits.",
|
||||||
|
stats.num_rebased
|
||||||
|
)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tx.finish(
|
tx.finish(
|
||||||
ui,
|
ui,
|
||||||
format!("absorb changes into {} commits", rewritten_commits.len()),
|
format!(
|
||||||
|
"absorb changes into {} commits",
|
||||||
|
stats.rewritten_destinations.len()
|
||||||
|
),
|
||||||
)?;
|
)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -268,15 +268,26 @@ fn combine_texts(text1: &[u8], text2: &[u8], selected_ranges: &[SelectedRange])
|
|||||||
.collect()
|
.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
|
/// Merges selected trees into the specified commits. Abandons the source commit
|
||||||
/// if it becomes discardable.
|
/// if it becomes discardable.
|
||||||
pub fn absorb_hunks(
|
pub fn absorb_hunks(
|
||||||
repo: &mut MutableRepo,
|
repo: &mut MutableRepo,
|
||||||
source: &AbsorbSource,
|
source: &AbsorbSource,
|
||||||
mut selected_trees: HashMap<CommitId, MergedTreeBuilder>,
|
mut selected_trees: HashMap<CommitId, MergedTreeBuilder>,
|
||||||
) -> BackendResult<(Vec<Commit>, usize)> {
|
) -> BackendResult<AbsorbStats> {
|
||||||
let store = repo.store().clone();
|
let store = repo.store().clone();
|
||||||
let mut rewritten_commits = Vec::new();
|
let mut rewritten_destinations = Vec::new();
|
||||||
let mut num_rebased = 0;
|
let mut num_rebased = 0;
|
||||||
// Rewrite commits in topological order so that descendant commits wouldn't
|
// Rewrite commits in topological order so that descendant commits wouldn't
|
||||||
// be rewritten multiple times.
|
// be rewritten multiple times.
|
||||||
@ -309,10 +320,13 @@ pub fn absorb_hunks(
|
|||||||
.set_tree_id(new_tree.id())
|
.set_tree_id(new_tree.id())
|
||||||
.set_predecessors(predecessors)
|
.set_predecessors(predecessors)
|
||||||
.write()?;
|
.write()?;
|
||||||
rewritten_commits.push(new_commit);
|
rewritten_destinations.push(new_commit);
|
||||||
Ok(())
|
Ok(())
|
||||||
})?;
|
})?;
|
||||||
Ok((rewritten_commits, num_rebased))
|
Ok(AbsorbStats {
|
||||||
|
rewritten_destinations,
|
||||||
|
num_rebased,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
struct FileValue {
|
struct FileValue {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user