git: Don't filter local upstreams from branch picker (#30557)

Cole Miller created

Release Notes:

- Fixed local git branches being excluded from the branch selector when
they were set as the upstream of another local branch.

Change summary

crates/git/src/repository.rs       |  4 ++++
crates/git_ui/src/branch_picker.rs | 11 +++++++----
2 files changed, 11 insertions(+), 4 deletions(-)

Detailed changes

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/")

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