Skip to content

Commit 10f6542

Browse files
authored
Merge branch 'master' into fix-14908-labels-not-in-repository-part-1
2 parents 5a10bac + 177da71 commit 10f6542

File tree

2 files changed

+40
-7
lines changed

2 files changed

+40
-7
lines changed

modules/convert/pull.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,24 @@ func ToAPIPullRequest(pr *models.PullRequest) *api.PullRequest {
134134
}
135135
}
136136

137+
if len(apiPullRequest.Head.Sha) == 0 && len(apiPullRequest.Head.Ref) != 0 {
138+
baseGitRepo, err := git.OpenRepository(pr.BaseRepo.RepoPath())
139+
if err != nil {
140+
log.Error("OpenRepository[%s]: %v", pr.BaseRepo.RepoPath(), err)
141+
return nil
142+
}
143+
defer baseGitRepo.Close()
144+
refs, err := baseGitRepo.GetRefsFiltered(apiPullRequest.Head.Ref)
145+
if err != nil {
146+
log.Error("GetRefsFiltered[%s]: %v", apiPullRequest.Head.Ref, err)
147+
return nil
148+
} else if len(refs) == 0 {
149+
log.Error("unable to resolve PR head ref")
150+
} else {
151+
apiPullRequest.Head.Sha = refs[0].Object.String()
152+
}
153+
}
154+
137155
if pr.Status != models.PullRequestStatusChecking {
138156
mergeable := !(pr.Status == models.PullRequestStatusConflict || pr.Status == models.PullRequestStatusError) && !pr.IsWorkInProgress()
139157
apiPullRequest.Mergeable = mergeable

modules/migrations/gitea_downloader.go

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -525,15 +525,11 @@ func (g *GiteaDownloader) GetPullRequests(page, perPage int) ([]*base.PullReques
525525
headRepoName = pr.Head.Repository.Name
526526
headCloneURL = pr.Head.Repository.CloneURL
527527
}
528+
if err := fixPullHeadSha(g.client, pr); err != nil {
529+
return nil, false, fmt.Errorf("error while resolving head git ref: %s for pull #%d. Error: %v", pr.Head.Ref, pr.Index, err)
530+
}
528531
headSHA = pr.Head.Sha
529532
headRef = pr.Head.Ref
530-
if headSHA == "" {
531-
headCommit, _, err := g.client.GetSingleCommit(g.repoOwner, g.repoName, url.PathEscape(pr.Head.Ref))
532-
if err != nil {
533-
return nil, false, fmt.Errorf("error while resolving head git ref: %s for pull #%d. Error: %v", pr.Head.Ref, pr.Index, err)
534-
}
535-
headSHA = headCommit.SHA
536-
}
537533
}
538534

539535
var mergeCommitSHA string
@@ -683,3 +679,22 @@ func (g *GiteaDownloader) GetReviews(index int64) ([]*base.Review, error) {
683679
}
684680
return allReviews, nil
685681
}
682+
683+
// fixPullHeadSha is a workaround for https://github.com/go-gitea/gitea/issues/12675
684+
// When no head sha is available, this is because the branch got deleted in the base repo.
685+
// pr.Head.Ref points in this case not to the head repo branch name, but the base repo ref,
686+
// which stays available to resolve the commit sha.
687+
func fixPullHeadSha(client *gitea_sdk.Client, pr *gitea_sdk.PullRequest) error {
688+
owner := pr.Base.Repository.Owner.UserName
689+
repo := pr.Base.Repository.Name
690+
if pr.Head != nil && pr.Head.Sha == "" {
691+
refs, _, err := client.GetRepoRefs(owner, repo, pr.Head.Ref)
692+
if err != nil {
693+
return err
694+
} else if len(refs) == 0 {
695+
return fmt.Errorf("unable to resolve PR ref '%s'", pr.Head.Ref)
696+
}
697+
pr.Head.Sha = refs[0].Object.SHA
698+
}
699+
return nil
700+
}

0 commit comments

Comments
 (0)