12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- 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
- }
|