diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2018-12-13 23:55:43 +0800 |
---|---|---|
committer | techknowlogick <hello@techknowlogick.com> | 2018-12-13 10:55:43 -0500 |
commit | b3b7598ec6846d53d7deb2c84781b06e22c93044 (patch) | |
tree | 53c85943b23867b20e2b31742fbe06fcda088ccd /models/issue_comment.go | |
parent | 49ea6e0deb7ecef327b0c2f41920f75c6aaf80d3 (diff) | |
download | gitea-b3b7598ec6846d53d7deb2c84781b06e22c93044.tar.gz gitea-b3b7598ec6846d53d7deb2c84781b06e22c93044.zip |
Improve performance of dashboard (#4977)
Diffstat (limited to 'models/issue_comment.go')
-rw-r--r-- | models/issue_comment.go | 94 |
1 files changed, 71 insertions, 23 deletions
diff --git a/models/issue_comment.go b/models/issue_comment.go index 96b162ca19..577de1d84d 100644 --- a/models/issue_comment.go +++ b/models/issue_comment.go @@ -150,25 +150,6 @@ func (c *Comment) LoadIssue() (err error) { return } -// AfterLoad is invoked from XORM after setting the values of all fields of this object. -func (c *Comment) AfterLoad(session *xorm.Session) { - var err error - c.Attachments, err = getAttachmentsByCommentID(session, c.ID) - if err != nil { - log.Error(3, "getAttachmentsByCommentID[%d]: %v", c.ID, err) - } - - c.Poster, err = getUserByID(session, c.PosterID) - if err != nil { - if IsErrUserNotExist(err) { - c.PosterID = -1 - c.Poster = NewGhostUser() - } else { - log.Error(3, "getUserByID[%d]: %v", c.ID, err) - } - } -} - // AfterDelete is invoked from XORM after the object is deleted. func (c *Comment) AfterDelete() { if c.ID <= 0 { @@ -189,6 +170,11 @@ func (c *Comment) HTMLURL() string { log.Error(4, "LoadIssue(%d): %v", c.IssueID, err) return "" } + err = c.Issue.loadRepo(x) + if err != nil { // Silently dropping errors :unamused: + log.Error(4, "loadRepo(%d): %v", c.Issue.RepoID, err) + return "" + } if c.Type == CommentTypeCode { if c.ReviewID == 0 { return fmt.Sprintf("%s/files#%s", c.Issue.HTMLURL(), c.HashTag()) @@ -217,6 +203,12 @@ func (c *Comment) IssueURL() string { if c.Issue.IsPull { return "" } + + err = c.Issue.loadRepo(x) + if err != nil { // Silently dropping errors :unamused: + log.Error(4, "loadRepo(%d): %v", c.Issue.RepoID, err) + return "" + } return c.Issue.HTMLURL() } @@ -228,6 +220,12 @@ func (c *Comment) PRURL() string { return "" } + err = c.Issue.loadRepo(x) + if err != nil { // Silently dropping errors :unamused: + log.Error(4, "loadRepo(%d): %v", c.Issue.RepoID, err) + return "" + } + if !c.Issue.IsPull { return "" } @@ -303,6 +301,39 @@ func (c *Comment) LoadMilestone() error { return nil } +// LoadPoster loads comment poster +func (c *Comment) LoadPoster() error { + if c.PosterID <= 0 || c.Poster != nil { + return nil + } + + var err error + c.Poster, err = getUserByID(x, c.PosterID) + if err != nil { + if IsErrUserNotExist(err) { + c.PosterID = -1 + c.Poster = NewGhostUser() + } else { + log.Error(3, "getUserByID[%d]: %v", c.ID, err) + } + } + return nil +} + +// LoadAttachments loads attachments +func (c *Comment) LoadAttachments() error { + if len(c.Attachments) > 0 { + return nil + } + + var err error + c.Attachments, err = getAttachmentsByCommentID(x, c.ID) + if err != nil { + log.Error(3, "getAttachmentsByCommentID[%d]: %v", c.ID, err) + } + return nil +} + // LoadAssigneeUser if comment.Type is CommentTypeAssignees, then load assignees func (c *Comment) LoadAssigneeUser() error { var err error @@ -375,8 +406,10 @@ func (c *Comment) LoadReactions() error { } func (c *Comment) loadReview(e Engine) (err error) { - if c.Review, err = getReviewByID(e, c.ReviewID); err != nil { - return err + if c.Review == nil { + if c.Review, err = getReviewByID(e, c.ReviewID); err != nil { + return err + } } return nil } @@ -454,6 +487,11 @@ func (c *Comment) CodeCommentURL() string { log.Error(4, "LoadIssue(%d): %v", c.IssueID, err) return "" } + err = c.Issue.loadRepo(x) + if err != nil { // Silently dropping errors :unamused: + log.Error(4, "loadRepo(%d): %v", c.Issue.RepoID, err) + return "" + } return fmt.Sprintf("%s/files#%s", c.Issue.HTMLURL(), c.HashTag()) } @@ -601,7 +639,7 @@ func sendCreateCommentAction(e *xorm.Session, opts *CreateCommentOptions, commen return nil } -func createStatusComment(e *xorm.Session, doer *User, repo *Repository, issue *Issue) (*Comment, error) { +func createStatusComment(e *xorm.Session, doer *User, issue *Issue) (*Comment, error) { cmtType := CommentTypeClose if !issue.IsClosed { cmtType = CommentTypeReopen @@ -609,7 +647,7 @@ func createStatusComment(e *xorm.Session, doer *User, repo *Repository, issue *I return createComment(e, &CreateCommentOptions{ Type: cmtType, Doer: doer, - Repo: repo, + Repo: issue.Repo, Issue: issue, }) } @@ -983,6 +1021,9 @@ func UpdateComment(doer *User, c *Comment, oldContent string) error { UpdateIssueIndexer(c.IssueID) } + if err := c.LoadPoster(); err != nil { + return err + } if err := c.LoadIssue(); err != nil { return err } @@ -1040,6 +1081,9 @@ func DeleteComment(doer *User, comment *Comment) error { UpdateIssueIndexer(comment.IssueID) } + if err := comment.LoadPoster(); err != nil { + return err + } if err := comment.LoadIssue(); err != nil { return err } @@ -1095,6 +1139,10 @@ func fetchCodeCommentsByReview(e Engine, issue *Issue, currentUser *User, review return nil, err } + if err := CommentList(comments).loadPosters(e); err != nil { + return nil, err + } + if err := issue.loadRepo(e); err != nil { return nil, err } |