forked from forgejo/forgejo
Add push commits history comment on PR time-line (#11167)
* Add push commits history comment on PR time-line * Add notify by email and ui of this comment type also Signed-off-by: a1012112796 <1012112796@qq.com> * Add migrations for IsForcePush * fix wrong force-push judgement * Apply suggestions from code review * Remove commit number check * add own notify fun * fix some typo Co-authored-by: guillep2k <18600385+guillep2k@users.noreply.github.com> * fix lint * fix style again, I forgot something before * Change email notify way * fix api * add number check if It's force-push * Add repo commit link fuction remove unnecessary check skip show push commits comment which not have commits alive * Update issue_comment.go * Apply suggestions from code review Co-authored-by: mrsdizzie <info@mrsdizzie.com> * Apply suggestions from code review * fix ui view Co-authored-by: silverwind <me@silverwind.io> * fix height * remove unnecessary style define * simplify GetBranchName * Apply suggestions from code review * save commit ids and isForce push by json * simplify GetBranchName * fix bug Co-authored-by: guillep2k <18600385+guillep2k@users.noreply.github.com> Co-authored-by: mrsdizzie <info@mrsdizzie.com> Co-authored-by: Lauris BH <lauris@nix.lv> Co-authored-by: silverwind <me@silverwind.io>
This commit is contained in:
parent
9e0e2a9fcf
commit
0903b1ac8c
18 changed files with 478 additions and 6 deletions
|
@ -466,15 +466,15 @@ func (c *Commit) GetSubModule(entryname string) (*SubModule, error) {
|
|||
return nil, nil
|
||||
}
|
||||
|
||||
// GetBranchName gets the closes branch name (as returned by 'git name-rev')
|
||||
// GetBranchName gets the closes branch name (as returned by 'git name-rev --name-only')
|
||||
func (c *Commit) GetBranchName() (string, error) {
|
||||
data, err := NewCommand("name-rev", c.ID.String()).RunInDirBytes(c.repo.Path)
|
||||
data, err := NewCommand("name-rev", "--name-only", c.ID.String()).RunInDir(c.repo.Path)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
// name-rev commitID output will be "COMMIT_ID master" or "COMMIT_ID master~12"
|
||||
return strings.Split(strings.Split(string(data), " ")[1], "~")[0], nil
|
||||
// name-rev commitID output will be "master" or "master~12"
|
||||
return strings.SplitN(strings.TrimSpace(data), "~", 2)[0], nil
|
||||
}
|
||||
|
||||
// CommitFileStatus represents status of files in a commit.
|
||||
|
|
|
@ -454,3 +454,21 @@ func (repo *Repository) getBranches(commit *Commit, limit int) ([]string, error)
|
|||
}
|
||||
return branches, nil
|
||||
}
|
||||
|
||||
// GetCommitsFromIDs get commits from commit IDs
|
||||
func (repo *Repository) GetCommitsFromIDs(commitIDs []string) (commits *list.List) {
|
||||
if len(commitIDs) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
commits = list.New()
|
||||
|
||||
for _, commitID := range commitIDs {
|
||||
commit, err := repo.GetCommit(commitID)
|
||||
if err == nil && commit != nil {
|
||||
commits.PushBack(commit)
|
||||
}
|
||||
}
|
||||
|
||||
return commits
|
||||
}
|
||||
|
|
|
@ -36,6 +36,7 @@ type Notifier interface {
|
|||
NotifyPullRequestSynchronized(doer *models.User, pr *models.PullRequest)
|
||||
NotifyPullRequestReview(*models.PullRequest, *models.Review, *models.Comment)
|
||||
NotifyPullRequestChangeTargetBranch(doer *models.User, pr *models.PullRequest, oldBranch string)
|
||||
NotifyPullRequestPushCommits(doer *models.User, pr *models.PullRequest, comment *models.Comment)
|
||||
|
||||
NotifyCreateIssueComment(*models.User, *models.Repository,
|
||||
*models.Issue, *models.Comment)
|
||||
|
|
|
@ -54,6 +54,10 @@ func (*NullNotifier) NotifyPullRequestSynchronized(doer *models.User, pr *models
|
|||
func (*NullNotifier) NotifyPullRequestChangeTargetBranch(doer *models.User, pr *models.PullRequest, oldBranch string) {
|
||||
}
|
||||
|
||||
// NotifyPullRequestPushCommits notifies when push commits to pull request's head branch
|
||||
func (*NullNotifier) NotifyPullRequestPushCommits(doer *models.User, pr *models.PullRequest, comment *models.Comment) {
|
||||
}
|
||||
|
||||
// NotifyUpdateComment places a place holder function
|
||||
func (*NullNotifier) NotifyUpdateComment(doer *models.User, c *models.Comment, oldContent string) {
|
||||
}
|
||||
|
|
|
@ -37,6 +37,8 @@ func (m *mailNotifier) NotifyCreateIssueComment(doer *models.User, repo *models.
|
|||
act = models.ActionCommentIssue
|
||||
} else if comment.Type == models.CommentTypeCode {
|
||||
act = models.ActionCommentIssue
|
||||
} else if comment.Type == models.CommentTypePullPush {
|
||||
act = 0
|
||||
}
|
||||
|
||||
if err := mailer.MailParticipantsComment(comment, act, issue); err != nil {
|
||||
|
@ -117,3 +119,29 @@ func (m *mailNotifier) NotifyMergePullRequest(pr *models.PullRequest, doer *mode
|
|||
log.Error("MailParticipants: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func (m *mailNotifier) NotifyPullRequestPushCommits(doer *models.User, pr *models.PullRequest, comment *models.Comment) {
|
||||
var err error
|
||||
if err = comment.LoadIssue(); err != nil {
|
||||
log.Error("comment.LoadIssue: %v", err)
|
||||
return
|
||||
}
|
||||
if err = comment.Issue.LoadRepo(); err != nil {
|
||||
log.Error("comment.Issue.LoadRepo: %v", err)
|
||||
return
|
||||
}
|
||||
if err = comment.Issue.LoadPullRequest(); err != nil {
|
||||
log.Error("comment.Issue.LoadPullRequest: %v", err)
|
||||
return
|
||||
}
|
||||
if err = comment.Issue.PullRequest.LoadBaseRepo(); err != nil {
|
||||
log.Error("comment.Issue.PullRequest.LoadBaseRepo: %v", err)
|
||||
return
|
||||
}
|
||||
if err := comment.LoadPushCommits(); err != nil {
|
||||
log.Error("comment.LoadPushCommits: %v", err)
|
||||
}
|
||||
comment.Content = ""
|
||||
|
||||
m.NotifyCreateIssueComment(doer, comment.Issue.Repo, comment.Issue, comment)
|
||||
}
|
||||
|
|
|
@ -94,6 +94,13 @@ func NotifyPullRequestChangeTargetBranch(doer *models.User, pr *models.PullReque
|
|||
}
|
||||
}
|
||||
|
||||
// NotifyPullRequestPushCommits notifies when push commits to pull request's head branch
|
||||
func NotifyPullRequestPushCommits(doer *models.User, pr *models.PullRequest, comment *models.Comment) {
|
||||
for _, notifier := range notifiers {
|
||||
notifier.NotifyPullRequestPushCommits(doer, pr, comment)
|
||||
}
|
||||
}
|
||||
|
||||
// NotifyUpdateComment notifies update comment to notifiers
|
||||
func NotifyUpdateComment(doer *models.User, c *models.Comment, oldContent string) {
|
||||
for _, notifier := range notifiers {
|
||||
|
|
|
@ -105,6 +105,15 @@ func (ns *notificationService) NotifyPullRequestReview(pr *models.PullRequest, r
|
|||
_ = ns.issueQueue.Push(opts)
|
||||
}
|
||||
|
||||
func (ns *notificationService) NotifyPullRequestPushCommits(doer *models.User, pr *models.PullRequest, comment *models.Comment) {
|
||||
var opts = issueNotificationOpts{
|
||||
IssueID: pr.IssueID,
|
||||
NotificationAuthorID: doer.ID,
|
||||
CommentID: comment.ID,
|
||||
}
|
||||
_ = ns.issueQueue.Push(opts)
|
||||
}
|
||||
|
||||
func (ns *notificationService) NotifyIssueChangeAssignee(doer *models.User, issue *models.Issue, assignee *models.User, removed bool, comment *models.Comment) {
|
||||
if !removed {
|
||||
var opts = issueNotificationOpts{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue