You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
2.4 KiB
91 lines
2.4 KiB
package command |
|
|
|
import ( |
|
"context" |
|
"fmt" |
|
"strings" |
|
|
|
"go-common/app/tool/saga/model" |
|
"go-common/app/tool/saga/service/notification" |
|
"go-common/library/log" |
|
) |
|
|
|
func (c *Command) runPlusOne(ctx context.Context, event *model.HookComment, repo *model.Repo) (err error) { |
|
var ( |
|
author string |
|
url = event.ObjectAttributes.URL |
|
commit = event.MergeRequest.LastCommit.ID |
|
reviewer = event.User.UserName |
|
authorID = int(event.MergeRequest.AuthorID) |
|
sourceBranch = event.MergeRequest.SourceBranch |
|
targetBranch = event.MergeRequest.TargetBranch |
|
wip = event.MergeRequest.WorkInProgress |
|
) |
|
log.Info("runPlusOne start ...") |
|
if wip { |
|
c.gitlab.CreateMRNote(event.Project.ID, int(event.MergeRequest.IID), fmt.Sprintf("<pre>警告:当前MR处于WIP状态,请待开发结束后再review!</pre>")) |
|
return |
|
} |
|
if author, err = c.gitlab.UserName(authorID); err != nil { |
|
log.Error("%+v", err) |
|
return |
|
} |
|
|
|
log.Info("runPlusOne notification author: %s", author) |
|
if author != "" { |
|
go func() { |
|
notification.MailPlusOne(author, reviewer, url, commit, sourceBranch, targetBranch) |
|
}() |
|
go func() { |
|
notification.WechatPlusOne(c.dao, author, reviewer, url, commit, sourceBranch, targetBranch) |
|
}() |
|
} |
|
return |
|
} |
|
|
|
func reviewedOwner(owners []string, reviewedUsers []string, username string) (isowner bool, reviewed bool) { |
|
for _, owner := range owners { |
|
if strings.EqualFold(owner, username) || strings.EqualFold(owner, "all") { |
|
return true, true |
|
} |
|
} |
|
for _, owner := range owners { |
|
for _, user := range reviewedUsers { |
|
if strings.EqualFold(user, owner) { |
|
return false, true |
|
} |
|
} |
|
} |
|
return false, false |
|
} |
|
|
|
func (c *Command) reviewedUsers(projID int, mrIID int) (reviewedUsers []string, err error) { |
|
var awardUsers []string |
|
if reviewedUsers, err = c.gitlab.PlusUsernames(projID, mrIID); err != nil { |
|
return |
|
} |
|
if awardUsers, err = c.gitlab.AwardEmojiUsernames(projID, mrIID); err != nil { |
|
return |
|
} |
|
OUTER: |
|
for _, au := range awardUsers { |
|
for _, mu := range reviewedUsers { |
|
if au == mu { |
|
continue OUTER |
|
} |
|
} |
|
reviewedUsers = append(reviewedUsers, au) |
|
} |
|
return |
|
} |
|
|
|
func reviewedNum(reviewers []string, reviewedUsers []string) (num int) { |
|
for _, reviewer := range reviewers { |
|
for _, user := range reviewedUsers { |
|
if strings.EqualFold(user, reviewer) || strings.EqualFold(reviewer, "all") { |
|
num++ |
|
} |
|
} |
|
} |
|
return |
|
}
|
|
|