]> source.dussan.org Git - gitea.git/commitdiff
show pull link for agit pull request also (#18235)
authora1012112796 <1012112796@qq.com>
Mon, 17 Jan 2022 05:56:43 +0000 (13:56 +0800)
committerGitHub <noreply@github.com>
Mon, 17 Jan 2022 05:56:43 +0000 (13:56 +0800)
routers/private/hook_post_receive.go

index 7124ae9e810b78c96a103266bb6caeb4b25ed952..5e315ede478de4e5642b3e99a6b883e9428c0fea 100644 (file)
@@ -8,6 +8,7 @@ package private
 import (
        "fmt"
        "net/http"
+       "strconv"
        "strings"
 
        "code.gitea.io/gitea/models"
@@ -124,6 +125,43 @@ func HookPostReceive(ctx *gitea_context.PrivateContext) {
                refFullName := opts.RefFullNames[i]
                newCommitID := opts.NewCommitIDs[i]
 
+               // post update for agit pull request
+               if git.SupportProcReceive && strings.HasPrefix(refFullName, git.PullPrefix) {
+                       if repo == nil {
+                               repo = loadRepository(ctx, ownerName, repoName)
+                               if ctx.Written() {
+                                       return
+                               }
+                       }
+
+                       pullIndexStr := strings.TrimPrefix(refFullName, git.PullPrefix)
+                       pullIndexStr = strings.Split(pullIndexStr, "/")[0]
+                       pullIndex, _ := strconv.ParseInt(pullIndexStr, 10, 64)
+                       if pullIndex <= 0 {
+                               continue
+                       }
+
+                       pr, err := models.GetPullRequestByIndex(repo.ID, pullIndex)
+                       if err != nil && !models.IsErrPullRequestNotExist(err) {
+                               log.Error("Failed to get PR by index %v Error: %v", pullIndex, err)
+                               ctx.JSON(http.StatusInternalServerError, private.Response{
+                                       Err: fmt.Sprintf("Failed to get PR by index %v Error: %v", pullIndex, err),
+                               })
+                               return
+                       }
+                       if pr == nil {
+                               continue
+                       }
+
+                       results = append(results, private.HookPostReceiveBranchResult{
+                               Message: setting.Git.PullRequestPushMessage && repo.AllowsPulls(),
+                               Create:  false,
+                               Branch:  "",
+                               URL:     fmt.Sprintf("%s/pulls/%d", repo.HTMLURL(), pr.Index),
+                       })
+                       continue
+               }
+
                branch := git.RefEndName(opts.RefFullNames[i])
 
                // If we've pushed a branch (and not deleted it)