Change summary
crates/git/src/repository.rs | 8 ++++++++
crates/project/src/buffer_store.rs | 12 +++++++++---
2 files changed, 17 insertions(+), 3 deletions(-)
Detailed changes
@@ -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.
@@ -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()