diff --git a/crates/git/src/repository.rs b/crates/git/src/repository.rs index 02b8e1cf89..20b13e1f8a 100644 --- a/crates/git/src/repository.rs +++ b/crates/git/src/repository.rs @@ -78,6 +78,10 @@ pub struct Upstream { } impl Upstream { + pub fn is_remote(&self) -> bool { + self.remote_name().is_some() + } + pub fn remote_name(&self) -> Option<&str> { self.ref_name .strip_prefix("refs/remotes/") diff --git a/crates/git_ui/src/branch_picker.rs b/crates/git_ui/src/branch_picker.rs index 04c5575d1f..59a3f3594b 100644 --- a/crates/git_ui/src/branch_picker.rs +++ b/crates/git_ui/src/branch_picker.rs @@ -98,15 +98,18 @@ impl BranchList { let all_branches = cx .background_spawn(async move { - let upstreams: HashSet<_> = all_branches + let remote_upstreams: HashSet<_> = all_branches .iter() .filter_map(|branch| { - let upstream = branch.upstream.as_ref()?; - Some(upstream.ref_name.clone()) + branch + .upstream + .as_ref() + .filter(|upstream| upstream.is_remote()) + .map(|upstream| upstream.ref_name.clone()) }) .collect(); - all_branches.retain(|branch| !upstreams.contains(&branch.ref_name)); + all_branches.retain(|branch| !remote_upstreams.contains(&branch.ref_name)); all_branches.sort_by_key(|branch| { branch