Browse Source

Split sendCreateCommentAction as two parts, one for update comment related informations, another for actions (#8784)

* Split sendCreateCommentAction as two parts, one for update comment related informations, another for actions

* fix lint
tags/v1.11.0-rc1
Lunny Xiao 4 years ago
parent
commit
12170d26a7
2 changed files with 48 additions and 30 deletions
  1. 42
    28
      models/issue_comment.go
  2. 6
    2
      models/review.go

+ 42
- 28
models/issue_comment.go View File

return nil, err return nil, err
} }


if err = updateCommentInfos(e, opts, comment); err != nil {
return nil, err
}

if err = sendCreateCommentAction(e, opts, comment); err != nil { if err = sendCreateCommentAction(e, opts, comment); err != nil {
return nil, err return nil, err
} }
return comment, nil return comment, nil
} }


func sendCreateCommentAction(e *xorm.Session, opts *CreateCommentOptions, comment *Comment) (err error) {
// Compose comment action, could be plain comment, close or reopen issue/pull request.
// This object will be used to notify watchers in the end of function.
act := &Action{
ActUserID: opts.Doer.ID,
ActUser: opts.Doer,
Content: fmt.Sprintf("%d|%s", opts.Issue.Index, strings.Split(opts.Content, "\n")[0]),
RepoID: opts.Repo.ID,
Repo: opts.Repo,
Comment: comment,
CommentID: comment.ID,
IsPrivate: opts.Repo.IsPrivate,
}
func updateCommentInfos(e *xorm.Session, opts *CreateCommentOptions, comment *Comment) (err error) {
// Check comment type. // Check comment type.
switch opts.Type { switch opts.Type {
case CommentTypeCode: case CommentTypeCode:
} }
fallthrough fallthrough
case CommentTypeComment: case CommentTypeComment:
act.OpType = ActionCommentIssue

if _, err = e.Exec("UPDATE `issue` SET num_comments=num_comments+1 WHERE id=?", opts.Issue.ID); err != nil { if _, err = e.Exec("UPDATE `issue` SET num_comments=num_comments+1 WHERE id=?", opts.Issue.ID); err != nil {
return err return err
} }
return fmt.Errorf("update attachment [%d]: %v", attachments[i].ID, err) return fmt.Errorf("update attachment [%d]: %v", attachments[i].ID, err)
} }
} }
case CommentTypeReopen, CommentTypeClose:
if err = opts.Issue.updateClosedNum(e); err != nil {
return err
}
}
// update the issue's updated_unix column
return updateIssueCols(e, opts.Issue, "updated_unix")
}


func sendCreateCommentAction(e *xorm.Session, opts *CreateCommentOptions, comment *Comment) (err error) {
// Compose comment action, could be plain comment, close or reopen issue/pull request.
// This object will be used to notify watchers in the end of function.
act := &Action{
ActUserID: opts.Doer.ID,
ActUser: opts.Doer,
Content: fmt.Sprintf("%d|%s", opts.Issue.Index, strings.Split(opts.Content, "\n")[0]),
RepoID: opts.Repo.ID,
Repo: opts.Repo,
Comment: comment,
CommentID: comment.ID,
IsPrivate: opts.Repo.IsPrivate,
}
// Check comment type.
switch opts.Type {
case CommentTypeCode:
if comment.ReviewID != 0 {
if comment.Review == nil {
if err := comment.loadReview(e); err != nil {
return err
}
}
if comment.Review.Type <= ReviewTypePending {
return nil
}
}
fallthrough
case CommentTypeComment:
act.OpType = ActionCommentIssue
case CommentTypeReopen: case CommentTypeReopen:
act.OpType = ActionReopenIssue act.OpType = ActionReopenIssue
if opts.Issue.IsPull { if opts.Issue.IsPull {
act.OpType = ActionReopenPullRequest act.OpType = ActionReopenPullRequest
} }

if err = opts.Issue.updateClosedNum(e); err != nil {
return err
}

case CommentTypeClose: case CommentTypeClose:
act.OpType = ActionCloseIssue act.OpType = ActionCloseIssue
if opts.Issue.IsPull { if opts.Issue.IsPull {
act.OpType = ActionClosePullRequest act.OpType = ActionClosePullRequest
} }

if err = opts.Issue.updateClosedNum(e); err != nil {
return err
}
}
// update the issue's updated_unix column
if err = updateIssueCols(e, opts.Issue, "updated_unix"); err != nil {
return err
} }
// Notify watchers for whatever action comes in, ignore if no action type. // Notify watchers for whatever action comes in, ignore if no action type.
if act.OpType > 0 { if act.OpType > 0 {

+ 6
- 2
models/review.go View File

go func(en *xorm.Engine, review *Review, comm *Comment) { go func(en *xorm.Engine, review *Review, comm *Comment) {
sess := en.NewSession() sess := en.NewSession()
defer sess.Close() defer sess.Close()
if err := sendCreateCommentAction(sess, &CreateCommentOptions{
opts := &CreateCommentOptions{
Doer: comm.Poster, Doer: comm.Poster,
Issue: review.Issue, Issue: review.Issue,
Repo: review.Issue.Repo, Repo: review.Issue.Repo,
Type: comm.Type, Type: comm.Type,
Content: comm.Content, Content: comm.Content,
}, comm); err != nil {
}
if err := updateCommentInfos(sess, opts, comm); err != nil {
log.Warn("updateCommentInfos: %v", err)
}
if err := sendCreateCommentAction(sess, opts, comm); err != nil {
log.Warn("sendCreateCommentAction: %v", err) log.Warn("sendCreateCommentAction: %v", err)
} }
}(e, r, comment) }(e, r, comment)

Loading…
Cancel
Save