mirror of
https://github.com/martinvonz/jj.git
synced 2025-01-24 21:13:47 +00:00
rewrite: remove redundant branch lookup from update_all_references()
It no longer makes sense to look up branches by old_commit_id. Just loop over branch (name, target) pairs instead.
This commit is contained in:
parent
781351e4d0
commit
1b6617bbd7
1 changed files with 21 additions and 34 deletions
|
@ -20,6 +20,7 @@ use std::collections::HashSet;
|
||||||
use std::fmt::Debug;
|
use std::fmt::Debug;
|
||||||
use std::fmt::Formatter;
|
use std::fmt::Formatter;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
|
use std::iter;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::slice;
|
use std::slice;
|
||||||
|
@ -1075,7 +1076,9 @@ impl MutableRepo {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn update_all_references(&mut self, settings: &UserSettings) -> BackendResult<()> {
|
fn update_all_references(&mut self, settings: &UserSettings) -> BackendResult<()> {
|
||||||
for (old_id, new_ids) in self.resolve_rewrite_mapping_with(|_| true) {
|
let rewrite_mapping = self.resolve_rewrite_mapping_with(|_| true);
|
||||||
|
self.update_local_branches(&rewrite_mapping);
|
||||||
|
for (old_id, new_ids) in rewrite_mapping {
|
||||||
self.update_references(settings, old_id, new_ids)?;
|
self.update_references(settings, old_id, new_ids)?;
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -1096,47 +1099,31 @@ impl MutableRepo {
|
||||||
&old_commit_id,
|
&old_commit_id,
|
||||||
&new_commit_ids,
|
&new_commit_ids,
|
||||||
abandoned_old_commit,
|
abandoned_old_commit,
|
||||||
)?;
|
)
|
||||||
|
|
||||||
// Build a map from commit to branches pointing to it, so we don't need to scan
|
|
||||||
// all branches each time we rebase a commit.
|
|
||||||
// TODO: We no longer need to do this now that we update branches for all
|
|
||||||
// commits at once.
|
|
||||||
let mut branches: HashMap<_, HashSet<_>> = HashMap::new();
|
|
||||||
for (branch_name, target) in self.view().local_branches() {
|
|
||||||
for commit in target.added_ids() {
|
|
||||||
branches
|
|
||||||
.entry(commit.clone())
|
|
||||||
.or_default()
|
|
||||||
.insert(branch_name.to_owned());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if let Some(branch_names) = branches.get(&old_commit_id).cloned() {
|
|
||||||
let mut branch_updates = vec![];
|
|
||||||
for branch_name in &branch_names {
|
|
||||||
let local_target = self.get_local_branch(branch_name);
|
|
||||||
for old_add in local_target.added_ids() {
|
|
||||||
if *old_add == old_commit_id {
|
|
||||||
branch_updates.push(branch_name.clone());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn update_local_branches(&mut self, rewrite_mapping: &HashMap<CommitId, Vec<CommitId>>) {
|
||||||
|
let changed_branches = self
|
||||||
|
.view()
|
||||||
|
.local_branches()
|
||||||
|
.flat_map(|(name, target)| {
|
||||||
|
target.added_ids().filter_map(|id| {
|
||||||
|
let change = rewrite_mapping.get_key_value(id)?;
|
||||||
|
Some((name.to_owned(), change))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.collect_vec();
|
||||||
|
for (branch_name, (old_commit_id, new_commit_ids)) in changed_branches {
|
||||||
let old_target = RefTarget::normal(old_commit_id.clone());
|
let old_target = RefTarget::normal(old_commit_id.clone());
|
||||||
assert!(!new_commit_ids.is_empty());
|
assert!(!new_commit_ids.is_empty());
|
||||||
let new_target = RefTarget::from_legacy_form(
|
let new_target = RefTarget::from_legacy_form(
|
||||||
std::iter::repeat(old_commit_id).take(new_commit_ids.len() - 1),
|
iter::repeat(old_commit_id.clone()).take(new_commit_ids.len() - 1),
|
||||||
new_commit_ids,
|
new_commit_ids.iter().cloned(),
|
||||||
);
|
);
|
||||||
for branch_name in &branch_updates {
|
self.merge_local_branch(&branch_name, &old_target, &new_target);
|
||||||
self.merge_local_branch(branch_name, &old_target, &new_target);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn update_wc_commits(
|
fn update_wc_commits(
|
||||||
&mut self,
|
&mut self,
|
||||||
settings: &UserSettings,
|
settings: &UserSettings,
|
||||||
|
|
Loading…
Reference in a new issue