Skip to content

Commit 3c35b77

Browse files
committed
Address review comments by querying for default branch
1 parent e9ad9d8 commit 3c35b77

File tree

1 file changed

+23
-14
lines changed

1 file changed

+23
-14
lines changed

src/utils/vcs.rs

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -255,20 +255,29 @@ pub fn git_repo_base_ref(repo: &git2::Repository, remote_name: &str) -> Result<O
255255

256256
// Try to find the remote tracking branch
257257
let remote_branch_name = format!("refs/remotes/{remote_name}/HEAD");
258-
let remote_ref = match repo.find_reference(&remote_branch_name) {
259-
Ok(r) => r,
260-
Err(_) => {
261-
// If remote/HEAD doesn't exist, try to find the default branch
262-
// First try common default branch names
263-
for branch in &["main", "master", "develop"] {
264-
let remote_branch = format!("refs/remotes/{remote_name}/{branch}");
265-
if let Ok(r) = repo.find_reference(&remote_branch) {
266-
return find_merge_base_ref(repo, &head_commit, &r);
267-
}
268-
}
269-
bail!("Could not find remote tracking branch for {}", remote_name);
270-
}
271-
};
258+
let remote_ref = repo
259+
.find_reference(&remote_branch_name)
260+
.or_else(|_| {
261+
// If remote/HEAD doesn't exist, try to query the remote for its actual default branch
262+
let mut remote = repo.find_remote(remote_name)?;
263+
remote.connect(git2::Direction::Fetch)?;
264+
let default_branch_buf = remote.default_branch()?;
265+
let default_branch = default_branch_buf.as_str().unwrap();
266+
267+
// Convert "refs/heads/main" to "refs/remotes/origin/main"
268+
let branch_name = default_branch
269+
.strip_prefix("refs/heads/")
270+
.unwrap_or(default_branch);
271+
let remote_branch = format!("refs/remotes/{remote_name}/{branch_name}");
272+
repo.find_reference(&remote_branch)
273+
})
274+
.map_err(|e| {
275+
anyhow::anyhow!(
276+
"Could not find remote tracking branch for {}: {}",
277+
remote_name,
278+
e
279+
)
280+
})?;
272281

273282
find_merge_base_ref(repo, &head_commit, &remote_ref)
274283
}

0 commit comments

Comments
 (0)