mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Display total commit count in hook message (#21400)
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>
This commit is contained in:
		@@ -650,6 +650,7 @@ func (m *webhookNotifier) NotifyPushCommits(pusher *user_model.User, repo *repo_
 | 
				
			|||||||
		After:        opts.NewCommitID,
 | 
							After:        opts.NewCommitID,
 | 
				
			||||||
		CompareURL:   setting.AppURL + commits.CompareURL,
 | 
							CompareURL:   setting.AppURL + commits.CompareURL,
 | 
				
			||||||
		Commits:      apiCommits,
 | 
							Commits:      apiCommits,
 | 
				
			||||||
 | 
							TotalCommits: commits.Len,
 | 
				
			||||||
		HeadCommit:   apiHeadCommit,
 | 
							HeadCommit:   apiHeadCommit,
 | 
				
			||||||
		Repo:         convert.ToRepo(repo, perm.AccessModeOwner),
 | 
							Repo:         convert.ToRepo(repo, perm.AccessModeOwner),
 | 
				
			||||||
		Pusher:       apiPusher,
 | 
							Pusher:       apiPusher,
 | 
				
			||||||
@@ -880,6 +881,7 @@ func (m *webhookNotifier) NotifySyncPushCommits(pusher *user_model.User, repo *r
 | 
				
			|||||||
		After:        opts.NewCommitID,
 | 
							After:        opts.NewCommitID,
 | 
				
			||||||
		CompareURL:   setting.AppURL + commits.CompareURL,
 | 
							CompareURL:   setting.AppURL + commits.CompareURL,
 | 
				
			||||||
		Commits:      apiCommits,
 | 
							Commits:      apiCommits,
 | 
				
			||||||
 | 
							TotalCommits: commits.Len,
 | 
				
			||||||
		HeadCommit:   apiHeadCommit,
 | 
							HeadCommit:   apiHeadCommit,
 | 
				
			||||||
		Repo:         convert.ToRepo(repo, perm.AccessModeOwner),
 | 
							Repo:         convert.ToRepo(repo, perm.AccessModeOwner),
 | 
				
			||||||
		Pusher:       apiPusher,
 | 
							Pusher:       apiPusher,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -272,6 +272,7 @@ type PushPayload struct {
 | 
				
			|||||||
	After        string           `json:"after"`
 | 
						After        string           `json:"after"`
 | 
				
			||||||
	CompareURL   string           `json:"compare_url"`
 | 
						CompareURL   string           `json:"compare_url"`
 | 
				
			||||||
	Commits      []*PayloadCommit `json:"commits"`
 | 
						Commits      []*PayloadCommit `json:"commits"`
 | 
				
			||||||
 | 
						TotalCommits int              `json:"total_commits"`
 | 
				
			||||||
	HeadCommit   *PayloadCommit   `json:"head_commit"`
 | 
						HeadCommit   *PayloadCommit   `json:"head_commit"`
 | 
				
			||||||
	Repo         *Repository      `json:"repository"`
 | 
						Repo         *Repository      `json:"repository"`
 | 
				
			||||||
	Pusher       *User            `json:"pusher"`
 | 
						Pusher       *User            `json:"pusher"`
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -174,6 +174,7 @@ func TestHook(ctx *context.APIContext) {
 | 
				
			|||||||
		After:        commitID,
 | 
							After:        commitID,
 | 
				
			||||||
		CompareURL:   setting.AppURL + ctx.Repo.Repository.ComposeCompareURL(commitID, commitID),
 | 
							CompareURL:   setting.AppURL + ctx.Repo.Repository.ComposeCompareURL(commitID, commitID),
 | 
				
			||||||
		Commits:      []*api.PayloadCommit{commit},
 | 
							Commits:      []*api.PayloadCommit{commit},
 | 
				
			||||||
 | 
							TotalCommits: 1,
 | 
				
			||||||
		HeadCommit:   commit,
 | 
							HeadCommit:   commit,
 | 
				
			||||||
		Repo:         convert.ToRepo(ctx.Repo.Repository, perm.AccessModeNone),
 | 
							Repo:         convert.ToRepo(ctx.Repo.Repository, perm.AccessModeNone),
 | 
				
			||||||
		Pusher:       convert.ToUserWithAccessMode(ctx.Doer, perm.AccessModeNone),
 | 
							Pusher:       convert.ToUserWithAccessMode(ctx.Doer, perm.AccessModeNone),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -673,6 +673,7 @@ func TestWebhook(ctx *context.Context) {
 | 
				
			|||||||
		After:        commitID,
 | 
							After:        commitID,
 | 
				
			||||||
		CompareURL:   setting.AppURL + ctx.Repo.Repository.ComposeCompareURL(commitID, commitID),
 | 
							CompareURL:   setting.AppURL + ctx.Repo.Repository.ComposeCompareURL(commitID, commitID),
 | 
				
			||||||
		Commits:      []*api.PayloadCommit{apiCommit},
 | 
							Commits:      []*api.PayloadCommit{apiCommit},
 | 
				
			||||||
 | 
							TotalCommits: 1,
 | 
				
			||||||
		HeadCommit:   apiCommit,
 | 
							HeadCommit:   apiCommit,
 | 
				
			||||||
		Repo:         convert.ToRepo(ctx.Repo.Repository, perm.AccessModeNone),
 | 
							Repo:         convert.ToRepo(ctx.Repo.Repository, perm.AccessModeNone),
 | 
				
			||||||
		Pusher:       apiUser,
 | 
							Pusher:       apiUser,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -67,14 +67,14 @@ func (d *DingtalkPayload) Push(p *api.PushPayload) (api.Payloader, error) {
 | 
				
			|||||||
	)
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var titleLink, linkText string
 | 
						var titleLink, linkText string
 | 
				
			||||||
	if len(p.Commits) == 1 {
 | 
						if p.TotalCommits == 1 {
 | 
				
			||||||
		commitDesc = "1 new commit"
 | 
							commitDesc = "1 new commit"
 | 
				
			||||||
		titleLink = p.Commits[0].URL
 | 
							titleLink = p.Commits[0].URL
 | 
				
			||||||
		linkText = fmt.Sprintf("view commit %s", p.Commits[0].ID[:7])
 | 
							linkText = "view commit"
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		commitDesc = fmt.Sprintf("%d new commits", len(p.Commits))
 | 
							commitDesc = fmt.Sprintf("%d new commits", p.TotalCommits)
 | 
				
			||||||
		titleLink = p.CompareURL
 | 
							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 == "" {
 | 
						if titleLink == "" {
 | 
				
			||||||
		titleLink = p.Repo.HTMLURL + "/src/" + util.PathEscapeSegments(branchName)
 | 
							titleLink = p.Repo.HTMLURL + "/src/" + util.PathEscapeSegments(branchName)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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, "[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, "[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))
 | 
							assert.Equal(t, "http://localhost:3000/test/repo/src/test", parseRealSingleURL(pl.(*DingtalkPayload).ActionCard.SingleURL))
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -142,11 +142,11 @@ func (d *DiscordPayload) Push(p *api.PushPayload) (api.Payloader, error) {
 | 
				
			|||||||
	)
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var titleLink string
 | 
						var titleLink string
 | 
				
			||||||
	if len(p.Commits) == 1 {
 | 
						if p.TotalCommits == 1 {
 | 
				
			||||||
		commitDesc = "1 new commit"
 | 
							commitDesc = "1 new commit"
 | 
				
			||||||
		titleLink = p.Commits[0].URL
 | 
							titleLink = p.Commits[0].URL
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		commitDesc = fmt.Sprintf("%d new commits", len(p.Commits))
 | 
							commitDesc = fmt.Sprintf("%d new commits", p.TotalCommits)
 | 
				
			||||||
		titleLink = p.CompareURL
 | 
							titleLink = p.CompareURL
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if titleLink == "" {
 | 
						if titleLink == "" {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -88,6 +88,7 @@ func pushTestPayload() *api.PushPayload {
 | 
				
			|||||||
		CompareURL:   "",
 | 
							CompareURL:   "",
 | 
				
			||||||
		HeadCommit:   commit,
 | 
							HeadCommit:   commit,
 | 
				
			||||||
		Commits:      []*api.PayloadCommit{commit, commit},
 | 
							Commits:      []*api.PayloadCommit{commit, commit},
 | 
				
			||||||
 | 
							TotalCommits: 2,
 | 
				
			||||||
		Repo: &api.Repository{
 | 
							Repo: &api.Repository{
 | 
				
			||||||
			HTMLURL:  "http://localhost:3000/test/repo",
 | 
								HTMLURL:  "http://localhost:3000/test/repo",
 | 
				
			||||||
			Name:     "repo",
 | 
								Name:     "repo",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -161,10 +161,10 @@ func (m *MatrixPayloadUnsafe) Release(p *api.ReleasePayload) (api.Payloader, err
 | 
				
			|||||||
func (m *MatrixPayloadUnsafe) Push(p *api.PushPayload) (api.Payloader, error) {
 | 
					func (m *MatrixPayloadUnsafe) Push(p *api.PushPayload) (api.Payloader, error) {
 | 
				
			||||||
	var commitDesc string
 | 
						var commitDesc string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if len(p.Commits) == 1 {
 | 
						if p.TotalCommits == 1 {
 | 
				
			||||||
		commitDesc = "1 commit"
 | 
							commitDesc = "1 commit"
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		commitDesc = fmt.Sprintf("%d commits", len(p.Commits))
 | 
							commitDesc = fmt.Sprintf("%d commits", p.TotalCommits)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	repoLink := MatrixLinkFormatter(p.Repo.HTMLURL, p.Repo.FullName)
 | 
						repoLink := MatrixLinkFormatter(p.Repo.HTMLURL, p.Repo.FullName)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -125,11 +125,11 @@ func (m *MSTeamsPayload) Push(p *api.PushPayload) (api.Payloader, error) {
 | 
				
			|||||||
	)
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var titleLink string
 | 
						var titleLink string
 | 
				
			||||||
	if len(p.Commits) == 1 {
 | 
						if p.TotalCommits == 1 {
 | 
				
			||||||
		commitDesc = "1 new commit"
 | 
							commitDesc = "1 new commit"
 | 
				
			||||||
		titleLink = p.Commits[0].URL
 | 
							titleLink = p.Commits[0].URL
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		commitDesc = fmt.Sprintf("%d new commits", len(p.Commits))
 | 
							commitDesc = fmt.Sprintf("%d new commits", p.TotalCommits)
 | 
				
			||||||
		titleLink = p.CompareURL
 | 
							titleLink = p.CompareURL
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if titleLink == "" {
 | 
						if titleLink == "" {
 | 
				
			||||||
@@ -156,7 +156,7 @@ func (m *MSTeamsPayload) Push(p *api.PushPayload) (api.Payloader, error) {
 | 
				
			|||||||
		text,
 | 
							text,
 | 
				
			||||||
		titleLink,
 | 
							titleLink,
 | 
				
			||||||
		greenColor,
 | 
							greenColor,
 | 
				
			||||||
		&MSTeamsFact{"Commit count:", fmt.Sprintf("%d", len(p.Commits))},
 | 
							&MSTeamsFact{"Commit count:", fmt.Sprintf("%d", p.TotalCommits)},
 | 
				
			||||||
	), nil
 | 
						), nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -179,10 +179,10 @@ func (s *SlackPayload) Push(p *api.PushPayload) (api.Payloader, error) {
 | 
				
			|||||||
		commitString string
 | 
							commitString string
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if len(p.Commits) == 1 {
 | 
						if p.TotalCommits == 1 {
 | 
				
			||||||
		commitDesc = "1 new commit"
 | 
							commitDesc = "1 new commit"
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		commitDesc = fmt.Sprintf("%d new commits", len(p.Commits))
 | 
							commitDesc = fmt.Sprintf("%d new commits", p.TotalCommits)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if len(p.CompareURL) > 0 {
 | 
						if len(p.CompareURL) > 0 {
 | 
				
			||||||
		commitString = SlackLinkFormatter(p.CompareURL, commitDesc)
 | 
							commitString = SlackLinkFormatter(p.CompareURL, commitDesc)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -89,11 +89,11 @@ func (t *TelegramPayload) Push(p *api.PushPayload) (api.Payloader, error) {
 | 
				
			|||||||
	)
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var titleLink string
 | 
						var titleLink string
 | 
				
			||||||
	if len(p.Commits) == 1 {
 | 
						if p.TotalCommits == 1 {
 | 
				
			||||||
		commitDesc = "1 new commit"
 | 
							commitDesc = "1 new commit"
 | 
				
			||||||
		titleLink = p.Commits[0].URL
 | 
							titleLink = p.Commits[0].URL
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		commitDesc = fmt.Sprintf("%d new commits", len(p.Commits))
 | 
							commitDesc = fmt.Sprintf("%d new commits", p.TotalCommits)
 | 
				
			||||||
		titleLink = p.CompareURL
 | 
							titleLink = p.CompareURL
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if titleLink == "" {
 | 
						if titleLink == "" {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -93,7 +93,7 @@ func (f *WechatworkPayload) Push(p *api.PushPayload) (api.Payloader, error) {
 | 
				
			|||||||
	for i, commit := range p.Commits {
 | 
						for i, commit := range p.Commits {
 | 
				
			||||||
		var authorName string
 | 
							var authorName string
 | 
				
			||||||
		if commit.Author != nil {
 | 
							if commit.Author != nil {
 | 
				
			||||||
			authorName = "Author:" + commit.Author.Name
 | 
								authorName = "Author: " + commit.Author.Name
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		message := strings.ReplaceAll(commit.Message, "\n\n", "\r\n")
 | 
							message := strings.ReplaceAll(commit.Message, "\n\n", "\r\n")
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user