mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 00:20:25 +08:00 
			
		
		
		
	* Move Workatround for #12675 into it's own function * use more reliable solution (as tea do)
This commit is contained in:
		@@ -525,15 +525,11 @@ func (g *GiteaDownloader) GetPullRequests(page, perPage int) ([]*base.PullReques
 | 
			
		||||
				headRepoName = pr.Head.Repository.Name
 | 
			
		||||
				headCloneURL = pr.Head.Repository.CloneURL
 | 
			
		||||
			}
 | 
			
		||||
			if err := fixPullHeadSha(g.client, pr); err != nil {
 | 
			
		||||
				return nil, false, fmt.Errorf("error while resolving head git ref: %s for pull #%d. Error: %v", pr.Head.Ref, pr.Index, err)
 | 
			
		||||
			}
 | 
			
		||||
			headSHA = pr.Head.Sha
 | 
			
		||||
			headRef = pr.Head.Ref
 | 
			
		||||
			if headSHA == "" {
 | 
			
		||||
				headCommit, _, err := g.client.GetSingleCommit(g.repoOwner, g.repoName, url.PathEscape(pr.Head.Ref))
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					return nil, false, fmt.Errorf("error while resolving head git ref: %s for pull #%d. Error: %v", pr.Head.Ref, pr.Index, err)
 | 
			
		||||
				}
 | 
			
		||||
				headSHA = headCommit.SHA
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		var mergeCommitSHA string
 | 
			
		||||
@@ -683,3 +679,22 @@ func (g *GiteaDownloader) GetReviews(index int64) ([]*base.Review, error) {
 | 
			
		||||
	}
 | 
			
		||||
	return allReviews, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// fixPullHeadSha is a workaround for https://github.com/go-gitea/gitea/issues/12675
 | 
			
		||||
// When no head sha is available, this is because the branch got deleted in the base repo.
 | 
			
		||||
// pr.Head.Ref points in this case not to the head repo branch name, but the base repo ref,
 | 
			
		||||
// which stays available to resolve the commit sha.
 | 
			
		||||
func fixPullHeadSha(client *gitea_sdk.Client, pr *gitea_sdk.PullRequest) error {
 | 
			
		||||
	owner := pr.Base.Repository.Owner.UserName
 | 
			
		||||
	repo := pr.Base.Repository.Name
 | 
			
		||||
	if pr.Head != nil && pr.Head.Sha == "" {
 | 
			
		||||
		refs, _, err := client.GetRepoRefs(owner, repo, pr.Head.Ref)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		} else if len(refs) == 0 {
 | 
			
		||||
			return fmt.Errorf("unable to resolve PR ref '%s'", pr.Head.Ref)
 | 
			
		||||
		}
 | 
			
		||||
		pr.Head.Sha = refs[0].Object.SHA
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user