This commit is contained in:
Ilya Grigoriev 2025-03-11 20:36:11 -07:00
parent f5f0616b08
commit 183c73b5e9

View File

@ -55,7 +55,6 @@ use crate::index::IndexStore;
use crate::index::MutableIndex; use crate::index::MutableIndex;
use crate::index::ReadonlyIndex; use crate::index::ReadonlyIndex;
use crate::local_backend::LocalBackend; use crate::local_backend::LocalBackend;
use crate::merge::trivial_merge;
use crate::merge::MergeBuilder; use crate::merge::MergeBuilder;
use crate::object_id::HexPrefix; use crate::object_id::HexPrefix;
use crate::object_id::ObjectId; use crate::object_id::ObjectId;
@ -1673,20 +1672,19 @@ impl MutableRepo {
let changed_wc_commits = diff_named_commit_ids(base.wc_commit_ids(), other.wc_commit_ids()); let changed_wc_commits = diff_named_commit_ids(base.wc_commit_ids(), other.wc_commit_ids());
for (workspace_id, (base_target, other_target)) in changed_wc_commits { for (workspace_id, (base_target, other_target)) in changed_wc_commits {
let self_target = self.view().get_wc_commit_id(workspace_id); let self_target = self.view().get_wc_commit_id(workspace_id);
if let Some(&new_target) = trivial_merge(&[self_target, base_target, other_target]) { if let Some(other_target) = other_target {
if let Some(target) = new_target.cloned() { if base_target == self_target {
self.view_mut().set_wc_commit(workspace_id.clone(), target); self.view_mut()
.set_wc_commit(workspace_id.clone(), other_target.clone());
} else { } else {
self.view_mut().remove_wc_commit(workspace_id); // If there's a conflict, we keep the `self` side unchanged
} }
} else { } else {
// If there's a conflict, we keep the `self` side unchanged, with one exception // The other side removed the workspace. We want to remove it
// below. // even in the conflicted case (if the self side also changed
if other_target.is_none() { // the working-copy commit). TODO(ilyagr): I'm not sure why
// The other side removed the workspace. We want to remove it even if the self // doing this in the conflicted case makes sense.
// side changed the working-copy commit. TODO(ilyagr): I'm not sure why self.view_mut().remove_wc_commit(workspace_id);
self.view_mut().remove_wc_commit(workspace_id);
}
} }
} }