@@ -272,32 +272,28 @@ pub fn git_repo_head_ref(repo: &git2::Repository) -> Result<String> {
272272}
273273
274274pub fn git_repo_base_ref ( repo : & git2:: Repository , remote_name : & str ) -> Result < String > {
275- // Get the current HEAD commit
276- let head_commit = repo. head ( ) ?. peel_to_commit ( ) ?;
277-
278- // Try to find the remote tracking branch
279275 let remote_branch_name = format ! ( "refs/remotes/{remote_name}/HEAD" ) ;
280276 let remote_ref = repo. find_reference ( & remote_branch_name) . map_err ( |e| {
281277 anyhow:: anyhow!( "Could not find remote tracking branch for {remote_name}: {e}" )
282278 } ) ?;
283279
284- find_merge_base_ref ( repo, & head_commit, & remote_ref)
285- }
286-
287- fn find_merge_base_ref (
288- repo : & git2:: Repository ,
289- head_commit : & git2:: Commit ,
290- remote_ref : & git2:: Reference ,
291- ) -> Result < String > {
292- let remote_commit = remote_ref. peel_to_commit ( ) ?;
293- let merge_base_oid = repo. merge_base ( head_commit. id ( ) , remote_commit. id ( ) ) ?;
280+ let name = remote_ref
281+ . resolve ( ) ?
282+ . shorthand ( )
283+ . ok_or ( anyhow:: anyhow!( "Remote branch name is not valid UTF-8" ) ) ?
284+ . to_owned ( ) ;
294285
295- // Return the merge-base commit SHA as the base reference
296- let merge_base_sha = merge_base_oid. to_string ( ) ;
297- debug ! ( "Found merge-base commit as base reference: {merge_base_sha}" ) ;
298- Ok ( merge_base_sha)
286+ let expected_prefix = format ! ( "{remote_name}/" ) ;
287+ if let Some ( branch_name) = name. strip_prefix ( & expected_prefix) {
288+ Ok ( branch_name. to_owned ( ) )
289+ } else {
290+ Err ( anyhow:: anyhow!(
291+ "Remote branch name '{name}' does not start with expected prefix '{expected_prefix}'"
292+ ) )
293+ }
299294}
300295
296+
301297/// Like git_repo_base_repo_name but preserves the original case of the repository name.
302298/// This is used specifically for build upload where case preservation is important.
303299pub fn git_repo_base_repo_name_preserve_case ( repo : & git2:: Repository ) -> Result < Option < String > > {
0 commit comments