Skip to content

Commit ea1157f

Browse files
committed
can we please get go-gitea#17868 in 🙈
1 parent 3a0dee0 commit ea1157f

File tree

4 files changed

+65
-31
lines changed

4 files changed

+65
-31
lines changed

modules/git/repo_commit.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ func (repo *Repository) CommitsBetween(last, before *Commit) ([]*Commit, error)
283283
return repo.parsePrettyFormatLogToList(bytes.TrimSpace(stdout))
284284
}
285285

286-
// CommitsBetweenLimit returns a list that contains at most limit commits skipping the first skip commits between [before, last)
286+
// CommitsBetweenLimit returns a list that contains at most limit commits skipping the first skip commits between [before, last]
287287
func (repo *Repository) CommitsBetweenLimit(last, before *Commit, limit, skip int) ([]*Commit, error) {
288288
var stdout []byte
289289
var err error

modules/notification/webhook/webhook.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
package webhook
66

77
import (
8+
"context"
9+
810
"code.gitea.io/gitea/models"
911
"code.gitea.io/gitea/models/perm"
1012
repo_model "code.gitea.io/gitea/models/repo"
@@ -18,6 +20,7 @@ import (
1820
"code.gitea.io/gitea/modules/repository"
1921
"code.gitea.io/gitea/modules/setting"
2022
api "code.gitea.io/gitea/modules/structs"
23+
pull_service "code.gitea.io/gitea/services/pull"
2124
webhook_services "code.gitea.io/gitea/services/webhook"
2225
)
2326

@@ -302,11 +305,17 @@ func (m *webhookNotifier) NotifyNewPullRequest(pull *models.PullRequest, mention
302305
return
303306
}
304307

308+
commits, err := pull_service.CommitsBetweenLimit(context.TODO(), pull, 100, 0) //TODO: limit is hardcoded
309+
if err != nil {
310+
311+
}
312+
305313
mode, _ := models.AccessLevel(pull.Issue.Poster, pull.Issue.Repo)
306314
if err := webhook_services.PrepareWebhooks(pull.Issue.Repo, webhook.HookEventPullRequest, &api.PullRequestPayload{
307315
Action: api.HookIssueOpened,
308316
Index: pull.Issue.Index,
309317
PullRequest: convert.ToAPIPullRequest(pull, nil),
318+
Commits: nil, // TODO
310319
Repository: convert.ToRepo(pull.Issue.Repo, mode),
311320
Sender: convert.ToUser(pull.Issue.Poster, nil),
312321
}); err != nil {
@@ -615,6 +624,7 @@ func (*webhookNotifier) NotifyMergePullRequest(pr *models.PullRequest, doer *use
615624
apiPullRequest := &api.PullRequestPayload{
616625
Index: pr.Issue.Index,
617626
PullRequest: convert.ToAPIPullRequest(pr, nil),
627+
Commits: nil, // TODO
618628
Repository: convert.ToRepo(pr.Issue.Repo, mode),
619629
Sender: convert.ToUser(doer, nil),
620630
Action: api.HookIssueClosed,
@@ -648,6 +658,7 @@ func (m *webhookNotifier) NotifyPullRequestChangeTargetBranch(doer *user_model.U
648658
},
649659
},
650660
PullRequest: convert.ToAPIPullRequest(issue.PullRequest, nil),
661+
Commits: nil, // TODO
651662
Repository: convert.ToRepo(issue.Repo, mode),
652663
Sender: convert.ToUser(doer, nil),
653664
})
@@ -687,6 +698,7 @@ func (m *webhookNotifier) NotifyPullRequestReview(pr *models.PullRequest, review
687698
Action: api.HookIssueReviewed,
688699
Index: review.Issue.Index,
689700
PullRequest: convert.ToAPIPullRequest(pr, nil),
701+
Commits: nil, // TODO
690702
Repository: convert.ToRepo(review.Issue.Repo, mode),
691703
Sender: convert.ToUser(review.Reviewer, nil),
692704
Review: &api.ReviewPayload{
@@ -742,6 +754,7 @@ func (m *webhookNotifier) NotifyPullRequestSynchronized(doer *user_model.User, p
742754
Action: api.HookIssueSynchronized,
743755
Index: pr.Issue.Index,
744756
PullRequest: convert.ToAPIPullRequest(pr, nil),
757+
Commits: nil, // TODO
745758
Repository: convert.ToRepo(pr.Issue.Repo, perm.AccessModeNone),
746759
Sender: convert.ToUser(doer, nil),
747760
}); err != nil {

modules/structs/hook.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -378,13 +378,14 @@ type ChangesPayload struct {
378378

379379
// PullRequestPayload represents a payload information of pull request event.
380380
type PullRequestPayload struct {
381-
Action HookIssueAction `json:"action"`
382-
Index int64 `json:"number"`
383-
Changes *ChangesPayload `json:"changes,omitempty"`
384-
PullRequest *PullRequest `json:"pull_request"`
385-
Repository *Repository `json:"repository"`
386-
Sender *User `json:"sender"`
387-
Review *ReviewPayload `json:"review"`
381+
Action HookIssueAction `json:"action"`
382+
Index int64 `json:"number"`
383+
Changes *ChangesPayload `json:"changes,omitempty"`
384+
PullRequest *PullRequest `json:"pull_request"`
385+
Commits []*PayloadCommit `json:"commits"`
386+
Repository *Repository `json:"repository"`
387+
Sender *User `json:"sender"`
388+
Review *ReviewPayload `json:"review"`
388389
}
389390

390391
// JSONPayload FIXME

services/pull/pull.go

Lines changed: 43 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -562,31 +562,19 @@ func CloseRepoBranchesPulls(doer *user_model.User, repo *repo_model.Repository)
562562

563563
var commitMessageTrailersPattern = regexp.MustCompile(`(?:^|\n\n)(?:[\w-]+[ \t]*:[^\n]+\n*(?:[ \t]+[^\n]+\n*)*)+$`)
564564

565-
// GetSquashMergeCommitMessages returns the commit messages between head and merge base (if there is one)
566-
func GetSquashMergeCommitMessages(pr *models.PullRequest) string {
567-
if err := pr.LoadIssue(); err != nil {
568-
log.Error("Cannot load issue %d for PR id %d: Error: %v", pr.IssueID, pr.ID, err)
569-
return ""
570-
}
571-
572-
if err := pr.Issue.LoadPoster(); err != nil {
573-
log.Error("Cannot load poster %d for pr id %d, index %d Error: %v", pr.Issue.PosterID, pr.ID, pr.Index, err)
574-
return ""
575-
}
576-
565+
// CommitsBetweenLimit returns a list that contains at most limit commits skipping the first skip commits between [before, last]
566+
func CommitsBetweenLimit(ctx context.Context, pr *models.PullRequest, limit, skip int) ([]*git.Commit, error) {
577567
if pr.HeadRepo == nil {
578568
var err error
579569
pr.HeadRepo, err = repo_model.GetRepositoryByID(pr.HeadRepoID)
580570
if err != nil {
581-
log.Error("GetRepositoryById[%d]: %v", pr.HeadRepoID, err)
582-
return ""
571+
return nil, fmt.Errorf("GetRepositoryById[%d]: %v", pr.HeadRepoID, err)
583572
}
584573
}
585574

586575
gitRepo, err := git.OpenRepository(pr.HeadRepo.RepoPath())
587576
if err != nil {
588-
log.Error("Unable to open head repository: Error: %v", err)
589-
return ""
577+
return nil, fmt.Errorf("Unable to open head repository: Error: %v", err)
590578
}
591579
defer gitRepo.Close()
592580

@@ -596,27 +584,59 @@ func GetSquashMergeCommitMessages(pr *models.PullRequest) string {
596584
} else {
597585
pr.HeadCommitID, err = gitRepo.GetRefCommitID(pr.GetGitRefName())
598586
if err != nil {
599-
log.Error("Unable to get head commit: %s Error: %v", pr.GetGitRefName(), err)
600-
return ""
587+
return nil, fmt.Errorf("Unable to get head commit: %s Error: %v", pr.GetGitRefName(), err)
601588
}
602589
headCommit, err = gitRepo.GetCommit(pr.HeadCommitID)
603590
}
604591
if err != nil {
605-
log.Error("Unable to get head commit: %s Error: %v", pr.HeadBranch, err)
606-
return ""
592+
return nil, fmt.Errorf("Unable to get head commit: %s Error: %v", pr.HeadBranch, err)
607593
}
608594

609595
mergeBase, err := gitRepo.GetCommit(pr.MergeBase)
610596
if err != nil {
611-
log.Error("Unable to get merge base commit: %s Error: %v", pr.MergeBase, err)
597+
return nil, fmt.Errorf("Unable to get merge base commit: %s Error: %v", pr.MergeBase, err)
598+
}
599+
600+
commits, err := gitRepo.CommitsBetweenLimit(headCommit, mergeBase, limit, skip)
601+
if err != nil {
602+
return nil, fmt.Errorf("Unable to get commits between: %s %s Error: %v", pr.HeadBranch, pr.MergeBase, err)
603+
}
604+
return commits, nil
605+
}
606+
607+
// GetSquashMergeCommitMessages returns the commit messages between head and merge base (if there is one)
608+
func GetSquashMergeCommitMessages(pr *models.PullRequest) string {
609+
if err := pr.LoadIssue(); err != nil {
610+
log.Error("Cannot load issue %d for PR id %d: Error: %v", pr.IssueID, pr.ID, err)
611+
return ""
612+
}
613+
614+
if err := pr.Issue.LoadPoster(); err != nil {
615+
log.Error("Cannot load poster %d for pr id %d, index %d Error: %v", pr.Issue.PosterID, pr.ID, pr.Index, err)
616+
return ""
617+
}
618+
619+
if pr.HeadRepo == nil {
620+
var err error
621+
pr.HeadRepo, err = repo_model.GetRepositoryByID(pr.HeadRepoID)
622+
if err != nil {
623+
log.Error("GetRepositoryById[%d]: %v", pr.HeadRepoID, err)
624+
return ""
625+
}
626+
}
627+
628+
gitRepo, err := git.OpenRepository(pr.HeadRepo.RepoPath())
629+
if err != nil {
630+
log.Error("Unable to open head repository: Error: %v", err)
612631
return ""
613632
}
633+
defer gitRepo.Close()
614634

615635
limit := setting.Repository.PullRequest.DefaultMergeMessageCommitsLimit
616636

617-
commits, err := gitRepo.CommitsBetweenLimit(headCommit, mergeBase, limit, 0)
637+
commits, err := CommitsBetweenLimit(context.TODO(), pr, limit, 0)
618638
if err != nil {
619-
log.Error("Unable to get commits between: %s %s Error: %v", pr.HeadBranch, pr.MergeBase, err)
639+
log.Error("CommitsBetweenLimit: %v", err)
620640
return ""
621641
}
622642

0 commit comments

Comments
 (0)