Skip to content

Commit 9e080d2

Browse files
committed
Use gix::Repository::virtual_merge_base() for better merge-bases.
Just like Git in merge-ORT, a virtual merge base helps to deal with multiple merge bases which can happen more easily when more than two commits are involved.
1 parent f0d7d4c commit 9e080d2

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

crates/gitbutler-workspace/src/branch_trees.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,14 @@ pub fn checkout_branch_trees<'a>(
3636

3737
Ok(tree)
3838
} else {
39-
let merge_base = repository
40-
.merge_base_octopussy(&stacks.iter().map(|b| b.head()).collect::<Vec<_>>())?;
41-
4239
let gix_repo = ctx.gix_repository_for_merging()?;
43-
let merge_base_tree_id =
44-
git2_to_gix_object_id(repository.find_commit(merge_base)?.tree_id());
45-
let mut final_tree_id = merge_base_tree_id;
40+
let merge_base_tree_id = gix_repo
41+
.merge_base_octopus(stacks.iter().map(|b| git2_to_gix_object_id(b.head())))?
42+
.object()?
43+
.into_commit()
44+
.tree_id()?;
4645

46+
let mut final_tree_id = merge_base_tree_id;
4747
let (merge_options_fail_fast, conflict_kind) = gix_repo.merge_options_fail_fast()?;
4848
for branch in stacks {
4949
let their_tree_id = git2_to_gix_object_id(branch.tree);
@@ -59,7 +59,7 @@ pub fn checkout_branch_trees<'a>(
5959
bail!("There appears to be conflicts between the virtual branches");
6060
};
6161

62-
final_tree_id = merge.tree.write()?.detach();
62+
final_tree_id = merge.tree.write()?;
6363
}
6464

6565
let final_tree = repository.find_tree(gix_to_git2_oid(final_tree_id))?;

0 commit comments

Comments
 (0)