]> source.dussan.org Git - gitea.git/commitdiff
Display total commit count in hook message (#21400)
authorKN4CK3R <admin@oldschoolhack.me>
Sun, 16 Oct 2022 16:22:34 +0000 (18:22 +0200)
committerGitHub <noreply@github.com>
Sun, 16 Oct 2022 16:22:34 +0000 (00:22 +0800)
Fixes #21379

The commits are capped by `setting.UI.FeedMaxCommitNum` so
`len(commits)` is not the correct number. So this PR adds a new
`TotalCommits` field.

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
13 files changed:
modules/notification/webhook/webhook.go
modules/structs/hook.go
routers/api/v1/repo/hook.go
routers/web/repo/webhook.go
services/webhook/dingtalk.go
services/webhook/dingtalk_test.go
services/webhook/discord.go
services/webhook/general_test.go
services/webhook/matrix.go
services/webhook/msteams.go
services/webhook/slack.go
services/webhook/telegram.go
services/webhook/wechatwork.go

index 0eb2099a206e011bb249c7af7f534d6acbdb34f7..b93e90368a179a7587ad2f6bc5c4559057b5d2f8 100644 (file)
@@ -645,15 +645,16 @@ func (m *webhookNotifier) NotifyPushCommits(pusher *user_model.User, repo *repo_
        }
 
        if err := webhook_services.PrepareWebhooks(repo, webhook.HookEventPush, &api.PushPayload{
-               Ref:        opts.RefFullName,
-               Before:     opts.OldCommitID,
-               After:      opts.NewCommitID,
-               CompareURL: setting.AppURL + commits.CompareURL,
-               Commits:    apiCommits,
-               HeadCommit: apiHeadCommit,
-               Repo:       convert.ToRepo(repo, perm.AccessModeOwner),
-               Pusher:     apiPusher,
-               Sender:     apiPusher,
+               Ref:          opts.RefFullName,
+               Before:       opts.OldCommitID,
+               After:        opts.NewCommitID,
+               CompareURL:   setting.AppURL + commits.CompareURL,
+               Commits:      apiCommits,
+               TotalCommits: commits.Len,
+               HeadCommit:   apiHeadCommit,
+               Repo:         convert.ToRepo(repo, perm.AccessModeOwner),
+               Pusher:       apiPusher,
+               Sender:       apiPusher,
        }); err != nil {
                log.Error("PrepareWebhooks: %v", err)
        }
@@ -875,15 +876,16 @@ func (m *webhookNotifier) NotifySyncPushCommits(pusher *user_model.User, repo *r
        }
 
        if err := webhook_services.PrepareWebhooks(repo, webhook.HookEventPush, &api.PushPayload{
-               Ref:        opts.RefFullName,
-               Before:     opts.OldCommitID,
-               After:      opts.NewCommitID,
-               CompareURL: setting.AppURL + commits.CompareURL,
-               Commits:    apiCommits,
-               HeadCommit: apiHeadCommit,
-               Repo:       convert.ToRepo(repo, perm.AccessModeOwner),
-               Pusher:     apiPusher,
-               Sender:     apiPusher,
+               Ref:          opts.RefFullName,
+               Before:       opts.OldCommitID,
+               After:        opts.NewCommitID,
+               CompareURL:   setting.AppURL + commits.CompareURL,
+               Commits:      apiCommits,
+               TotalCommits: commits.Len,
+               HeadCommit:   apiHeadCommit,
+               Repo:         convert.ToRepo(repo, perm.AccessModeOwner),
+               Pusher:       apiPusher,
+               Sender:       apiPusher,
        }); err != nil {
                log.Error("PrepareWebhooks: %v", err)
        }
index 132b24b8563c3c228ce9dabe1d561404215258fb..8321a15a8f1e856d9b3886af044cad3286e8899a 100644 (file)
@@ -267,15 +267,16 @@ func (p *ReleasePayload) JSONPayload() ([]byte, error) {
 
 // PushPayload represents a payload information of push event.
 type PushPayload struct {
-       Ref        string           `json:"ref"`
-       Before     string           `json:"before"`
-       After      string           `json:"after"`
-       CompareURL string           `json:"compare_url"`
-       Commits    []*PayloadCommit `json:"commits"`
-       HeadCommit *PayloadCommit   `json:"head_commit"`
-       Repo       *Repository      `json:"repository"`
-       Pusher     *User            `json:"pusher"`
-       Sender     *User            `json:"sender"`
+       Ref          string           `json:"ref"`
+       Before       string           `json:"before"`
+       After        string           `json:"after"`
+       CompareURL   string           `json:"compare_url"`
+       Commits      []*PayloadCommit `json:"commits"`
+       TotalCommits int              `json:"total_commits"`
+       HeadCommit   *PayloadCommit   `json:"head_commit"`
+       Repo         *Repository      `json:"repository"`
+       Pusher       *User            `json:"pusher"`
+       Sender       *User            `json:"sender"`
 }
 
 // JSONPayload FIXME
index b17142c0f647fc1c71a5600c3505b5f517b89748..86361817cb4642873b959406bd3dae4ad315fbee 100644 (file)
@@ -169,15 +169,16 @@ func TestHook(ctx *context.APIContext) {
 
        commitID := ctx.Repo.Commit.ID.String()
        if err := webhook_service.PrepareWebhook(hook, ctx.Repo.Repository, webhook.HookEventPush, &api.PushPayload{
-               Ref:        ref,
-               Before:     commitID,
-               After:      commitID,
-               CompareURL: setting.AppURL + ctx.Repo.Repository.ComposeCompareURL(commitID, commitID),
-               Commits:    []*api.PayloadCommit{commit},
-               HeadCommit: commit,
-               Repo:       convert.ToRepo(ctx.Repo.Repository, perm.AccessModeNone),
-               Pusher:     convert.ToUserWithAccessMode(ctx.Doer, perm.AccessModeNone),
-               Sender:     convert.ToUserWithAccessMode(ctx.Doer, perm.AccessModeNone),
+               Ref:          ref,
+               Before:       commitID,
+               After:        commitID,
+               CompareURL:   setting.AppURL + ctx.Repo.Repository.ComposeCompareURL(commitID, commitID),
+               Commits:      []*api.PayloadCommit{commit},
+               TotalCommits: 1,
+               HeadCommit:   commit,
+               Repo:         convert.ToRepo(ctx.Repo.Repository, perm.AccessModeNone),
+               Pusher:       convert.ToUserWithAccessMode(ctx.Doer, perm.AccessModeNone),
+               Sender:       convert.ToUserWithAccessMode(ctx.Doer, perm.AccessModeNone),
        }); err != nil {
                ctx.Error(http.StatusInternalServerError, "PrepareWebhook: ", err)
                return
index a8939e72bd6e21b7c05a7b7f83ce7fc02e25b0b9..425198ce244220426c64a7e4515495a21622c8b7 100644 (file)
@@ -668,15 +668,16 @@ func TestWebhook(ctx *context.Context) {
 
        commitID := commit.ID.String()
        p := &api.PushPayload{
-               Ref:        git.BranchPrefix + ctx.Repo.Repository.DefaultBranch,
-               Before:     commitID,
-               After:      commitID,
-               CompareURL: setting.AppURL + ctx.Repo.Repository.ComposeCompareURL(commitID, commitID),
-               Commits:    []*api.PayloadCommit{apiCommit},
-               HeadCommit: apiCommit,
-               Repo:       convert.ToRepo(ctx.Repo.Repository, perm.AccessModeNone),
-               Pusher:     apiUser,
-               Sender:     apiUser,
+               Ref:          git.BranchPrefix + ctx.Repo.Repository.DefaultBranch,
+               Before:       commitID,
+               After:        commitID,
+               CompareURL:   setting.AppURL + ctx.Repo.Repository.ComposeCompareURL(commitID, commitID),
+               Commits:      []*api.PayloadCommit{apiCommit},
+               TotalCommits: 1,
+               HeadCommit:   apiCommit,
+               Repo:         convert.ToRepo(ctx.Repo.Repository, perm.AccessModeNone),
+               Pusher:       apiUser,
+               Sender:       apiUser,
        }
        if err := webhook_service.PrepareWebhook(w, ctx.Repo.Repository, webhook.HookEventPush, p); err != nil {
                ctx.Flash.Error("PrepareWebhook: " + err.Error())
index 5112bdb347f421cb463da5c6520dc9a7371a00d4..e047e994c2f4a43e17f2e53c82dffebf15f3ee36 100644 (file)
@@ -67,14 +67,14 @@ func (d *DingtalkPayload) Push(p *api.PushPayload) (api.Payloader, error) {
        )
 
        var titleLink, linkText string
-       if len(p.Commits) == 1 {
+       if p.TotalCommits == 1 {
                commitDesc = "1 new commit"
                titleLink = p.Commits[0].URL
-               linkText = fmt.Sprintf("view commit %s", p.Commits[0].ID[:7])
+               linkText = "view commit"
        } else {
-               commitDesc = fmt.Sprintf("%d new commits", len(p.Commits))
+               commitDesc = fmt.Sprintf("%d new commits", p.TotalCommits)
                titleLink = p.CompareURL
-               linkText = fmt.Sprintf("view commit %s...%s", p.Commits[0].ID[:7], p.Commits[len(p.Commits)-1].ID[:7])
+               linkText = "view commits"
        }
        if titleLink == "" {
                titleLink = p.Repo.HTMLURL + "/src/" + util.PathEscapeSegments(branchName)
index efc9601c127815f2ce24d69ad700603599dd1076..fc15380f4daecd107f08fc8daaea9818f8f57420 100644 (file)
@@ -82,7 +82,7 @@ func TestDingTalkPayload(t *testing.T) {
 
                assert.Equal(t, "[2020558](http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778) commit message - user1\r\n[2020558](http://localhost:3000/test/repo/commit/2020558fe2e34debb818a514715839cabd25e778) commit message - user1", pl.(*DingtalkPayload).ActionCard.Text)
                assert.Equal(t, "[test/repo:test] 2 new commits", pl.(*DingtalkPayload).ActionCard.Title)
-               assert.Equal(t, "view commit 2020558...2020558", pl.(*DingtalkPayload).ActionCard.SingleTitle)
+               assert.Equal(t, "view commits", pl.(*DingtalkPayload).ActionCard.SingleTitle)
                assert.Equal(t, "http://localhost:3000/test/repo/src/test", parseRealSingleURL(pl.(*DingtalkPayload).ActionCard.SingleURL))
        })
 
index 7b6f0f0b1dbf13ee4e3e500552d3e8442d4315c2..22d75db89305d7cbadf3e0f204fe41459da0f545 100644 (file)
@@ -142,11 +142,11 @@ func (d *DiscordPayload) Push(p *api.PushPayload) (api.Payloader, error) {
        )
 
        var titleLink string
-       if len(p.Commits) == 1 {
+       if p.TotalCommits == 1 {
                commitDesc = "1 new commit"
                titleLink = p.Commits[0].URL
        } else {
-               commitDesc = fmt.Sprintf("%d new commits", len(p.Commits))
+               commitDesc = fmt.Sprintf("%d new commits", p.TotalCommits)
                titleLink = p.CompareURL
        }
        if titleLink == "" {
index 4acf51ac71d2a4b4c536a2df17351bda136c5a85..da3123d3aba294f03fc1c876cae629eb9e5ace57 100644 (file)
@@ -82,12 +82,13 @@ func pushTestPayload() *api.PushPayload {
        }
 
        return &api.PushPayload{
-               Ref:        "refs/heads/test",
-               Before:     "2020558fe2e34debb818a514715839cabd25e777",
-               After:      "2020558fe2e34debb818a514715839cabd25e778",
-               CompareURL: "",
-               HeadCommit: commit,
-               Commits:    []*api.PayloadCommit{commit, commit},
+               Ref:          "refs/heads/test",
+               Before:       "2020558fe2e34debb818a514715839cabd25e777",
+               After:        "2020558fe2e34debb818a514715839cabd25e778",
+               CompareURL:   "",
+               HeadCommit:   commit,
+               Commits:      []*api.PayloadCommit{commit, commit},
+               TotalCommits: 2,
                Repo: &api.Repository{
                        HTMLURL:  "http://localhost:3000/test/repo",
                        Name:     "repo",
index 59eae48307bc57d6aa37d66cc6154ca86bef9594..6bbae7042275069866852b6ce30eb7eacab935ca 100644 (file)
@@ -161,10 +161,10 @@ func (m *MatrixPayloadUnsafe) Release(p *api.ReleasePayload) (api.Payloader, err
 func (m *MatrixPayloadUnsafe) Push(p *api.PushPayload) (api.Payloader, error) {
        var commitDesc string
 
-       if len(p.Commits) == 1 {
+       if p.TotalCommits == 1 {
                commitDesc = "1 commit"
        } else {
-               commitDesc = fmt.Sprintf("%d commits", len(p.Commits))
+               commitDesc = fmt.Sprintf("%d commits", p.TotalCommits)
        }
 
        repoLink := MatrixLinkFormatter(p.Repo.HTMLURL, p.Repo.FullName)
index 1406004781b678b71df867aa5fc803e835c89f85..bf9e95edc57d5d142d70af74db46094b0ece35b8 100644 (file)
@@ -125,11 +125,11 @@ func (m *MSTeamsPayload) Push(p *api.PushPayload) (api.Payloader, error) {
        )
 
        var titleLink string
-       if len(p.Commits) == 1 {
+       if p.TotalCommits == 1 {
                commitDesc = "1 new commit"
                titleLink = p.Commits[0].URL
        } else {
-               commitDesc = fmt.Sprintf("%d new commits", len(p.Commits))
+               commitDesc = fmt.Sprintf("%d new commits", p.TotalCommits)
                titleLink = p.CompareURL
        }
        if titleLink == "" {
@@ -156,7 +156,7 @@ func (m *MSTeamsPayload) Push(p *api.PushPayload) (api.Payloader, error) {
                text,
                titleLink,
                greenColor,
-               &MSTeamsFact{"Commit count:", fmt.Sprintf("%d", len(p.Commits))},
+               &MSTeamsFact{"Commit count:", fmt.Sprintf("%d", p.TotalCommits)},
        ), nil
 }
 
index 63cc6f8ca2488287e51118abd0f75a6edb0dd31d..f5c69d74b678229dd208083182a42f7afdb9df13 100644 (file)
@@ -179,10 +179,10 @@ func (s *SlackPayload) Push(p *api.PushPayload) (api.Payloader, error) {
                commitString string
        )
 
-       if len(p.Commits) == 1 {
+       if p.TotalCommits == 1 {
                commitDesc = "1 new commit"
        } else {
-               commitDesc = fmt.Sprintf("%d new commits", len(p.Commits))
+               commitDesc = fmt.Sprintf("%d new commits", p.TotalCommits)
        }
        if len(p.CompareURL) > 0 {
                commitString = SlackLinkFormatter(p.CompareURL, commitDesc)
index 13471d864e551898b203506a59efc117e1d5eadb..7ca5f61062c6c7f81629e03167b409d9dd09b0ea 100644 (file)
@@ -89,11 +89,11 @@ func (t *TelegramPayload) Push(p *api.PushPayload) (api.Payloader, error) {
        )
 
        var titleLink string
-       if len(p.Commits) == 1 {
+       if p.TotalCommits == 1 {
                commitDesc = "1 new commit"
                titleLink = p.Commits[0].URL
        } else {
-               commitDesc = fmt.Sprintf("%d new commits", len(p.Commits))
+               commitDesc = fmt.Sprintf("%d new commits", p.TotalCommits)
                titleLink = p.CompareURL
        }
        if titleLink == "" {
index bd4c3e085120321a8d76ce111395ed773a51cfac..5344ccaa22db7c5b5cc109c78b0bf80a8713a390 100644 (file)
@@ -93,7 +93,7 @@ func (f *WechatworkPayload) Push(p *api.PushPayload) (api.Payloader, error) {
        for i, commit := range p.Commits {
                var authorName string
                if commit.Author != nil {
-                       authorName = "Author" + commit.Author.Name
+                       authorName = "Author" + commit.Author.Name
                }
 
                message := strings.ReplaceAll(commit.Message, "\n\n", "\r\n")