]> source.dussan.org Git - gitea.git/commitdiff
Move Workaround for #12675 into it's own function (#14922)
author6543 <6543@obermui.de>
Mon, 8 Mar 2021 19:00:19 +0000 (20:00 +0100)
committerGitHub <noreply@github.com>
Mon, 8 Mar 2021 19:00:19 +0000 (20:00 +0100)
* Move Workatround for #12675 into it's own function

* use more reliable solution (as tea do)

modules/migrations/gitea_downloader.go

index 70daf8d5a320904af9257fc0d383a5aaf943c387..87ec9c102a1e7dabf7612b3a6b9b53fcb3e59f61 100644 (file)
@@ -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
+}