summaryrefslogtreecommitdiffstats
path: root/models/issue_comment.go
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2018-12-13 23:55:43 +0800
committertechknowlogick <hello@techknowlogick.com>2018-12-13 10:55:43 -0500
commitb3b7598ec6846d53d7deb2c84781b06e22c93044 (patch)
tree53c85943b23867b20e2b31742fbe06fcda088ccd /models/issue_comment.go
parent49ea6e0deb7ecef327b0c2f41920f75c6aaf80d3 (diff)
downloadgitea-b3b7598ec6846d53d7deb2c84781b06e22c93044.tar.gz
gitea-b3b7598ec6846d53d7deb2c84781b06e22c93044.zip
Improve performance of dashboard (#4977)
Diffstat (limited to 'models/issue_comment.go')
-rw-r--r--models/issue_comment.go94
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
}