mirror of
https://github.com/martinvonz/jj.git
synced 2024-12-24 12:48:55 +00:00
merge: use recursive merge when there are multiple common ancestors
This commit is contained in:
parent
afe754a4e0
commit
6d61475f66
1 changed files with 7 additions and 5 deletions
|
@ -31,11 +31,13 @@ pub fn merge_commit_trees(repo: RepoRef, commits: &[Commit]) -> Tree {
|
|||
let mut new_tree = commits[0].tree();
|
||||
let commit_ids: Vec<_> = commits.iter().map(|commit| commit.id().clone()).collect();
|
||||
for (i, other_commit) in commits.iter().enumerate().skip(1) {
|
||||
let ancestors = index.common_ancestors(&commit_ids[0..i], &[commit_ids[i].clone()]);
|
||||
// TODO: Do recursive merge here instead of using just the first ancestor.
|
||||
let ancestor = store.get_commit(&ancestors[0]).unwrap();
|
||||
let new_tree_id =
|
||||
merge_trees(&new_tree, &ancestor.tree(), &other_commit.tree()).unwrap();
|
||||
let ancestor_ids = index.common_ancestors(&commit_ids[0..i], &[commit_ids[i].clone()]);
|
||||
let ancestors: Vec<_> = ancestor_ids
|
||||
.iter()
|
||||
.map(|id| store.get_commit(id).unwrap())
|
||||
.collect();
|
||||
let ancestor_tree = merge_commit_trees(repo, &ancestors);
|
||||
let new_tree_id = merge_trees(&new_tree, &ancestor_tree, &other_commit.tree()).unwrap();
|
||||
new_tree = store.get_tree(&DirRepoPath::root(), &new_tree_id).unwrap();
|
||||
}
|
||||
new_tree
|
||||
|
|
Loading…
Reference in a new issue