diff --git a/lib/src/git.rs b/lib/src/git.rs index a73786e15..236cb8444 100644 --- a/lib/src/git.rs +++ b/lib/src/git.rs @@ -841,12 +841,7 @@ pub fn remove_remote( } fn remove_remote_refs(mut_repo: &mut MutableRepo, remote_name: &str) { - let mut branches_to_delete = vec![]; - for (branch, target) in mut_repo.view().branches() { - if target.remote_targets.contains_key(remote_name) { - branches_to_delete.push(branch.clone()); - } - } + mut_repo.remove_remote(remote_name); let prefix = format!("refs/remotes/{remote_name}/"); let git_refs_to_delete = mut_repo .view() @@ -855,9 +850,6 @@ fn remove_remote_refs(mut_repo: &mut MutableRepo, remote_name: &str) { .filter(|&r| r.starts_with(&prefix)) .cloned() .collect_vec(); - for branch in branches_to_delete { - mut_repo.set_remote_branch_target(&branch, remote_name, RefTarget::absent()); - } for git_ref in git_refs_to_delete { mut_repo.set_git_ref_target(&git_ref, RefTarget::absent()); } diff --git a/lib/src/repo.rs b/lib/src/repo.rs index 1e410e97e..e8889c42c 100644 --- a/lib/src/repo.rs +++ b/lib/src/repo.rs @@ -1007,6 +1007,10 @@ impl MutableRepo { .set_remote_branch_target(name, remote_name, target); } + pub fn remove_remote(&mut self, remote_name: &str) { + self.view_mut().remove_remote(remote_name); + } + pub fn rename_remote(&mut self, old: &str, new: &str) { self.view_mut().rename_remote(old, new); } diff --git a/lib/src/view.rs b/lib/src/view.rs index 859fbb0f5..44f34bda1 100644 --- a/lib/src/view.rs +++ b/lib/src/view.rs @@ -272,6 +272,18 @@ impl View { }) } + pub fn remove_remote(&mut self, remote_name: &str) { + let mut branches_to_delete = vec![]; + for (branch, target) in &self.data.branches { + if target.remote_targets.contains_key(remote_name) { + branches_to_delete.push(branch.clone()); + } + } + for branch in branches_to_delete { + self.remove_remote_branch(&branch, remote_name); + } + } + pub fn rename_remote(&mut self, old: &str, new: &str) { for branch in self.data.branches.values_mut() { let target = branch.remote_targets.remove(old).flatten();