diff --git a/crates/git/src/repository.rs b/crates/git/src/repository.rs index 99a490c0dc..18ccd5c400 100644 --- a/crates/git/src/repository.rs +++ b/crates/git/src/repository.rs @@ -56,6 +56,14 @@ pub struct Upstream { pub tracking: UpstreamTracking, } +impl Upstream { + pub fn remote_name(&self) -> Option<&str> { + self.ref_name + .strip_prefix("refs/remotes/") + .and_then(|stripped| stripped.split("/").next()) + } +} + #[derive(Clone, Copy, Debug, Hash, PartialEq, Eq)] pub enum UpstreamTracking { /// Remote ref not present in local repository. diff --git a/crates/project/src/buffer_store.rs b/crates/project/src/buffer_store.rs index e514d91ec2..f4ae0ce05a 100644 --- a/crates/project/src/buffer_store.rs +++ b/crates/project/src/buffer_store.rs @@ -1692,11 +1692,17 @@ impl BufferStore { Err(e) => return Task::ready(Err(e)), }; + let remote = repo_entry + .branch() + .and_then(|b| b.upstream.as_ref()) + .and_then(|b| b.remote_name()) + .unwrap_or("origin") + .to_string(); + cx.spawn(|cx| async move { - const REMOTE_NAME: &str = "origin"; let origin_url = repo - .remote_url(REMOTE_NAME) - .ok_or_else(|| anyhow!("remote \"{REMOTE_NAME}\" not found"))?; + .remote_url(&remote) + .ok_or_else(|| anyhow!("remote \"{remote}\" not found"))?; let sha = repo .head_sha()