* revert #2001 and fix issue comments hidden * fix #2001 * fix import * improve comment type * reduce unnecessary join * fix comment on FindCommentsOptions
This commit is contained in:
		
							parent
							
								
									0a5dc640a1
								
							
						
					
					
						commit
						d71fad2ab7
					
				| @ -174,7 +174,10 @@ func (issue *Issue) loadAttributes(e Engine) (err error) { | ||||
| 	} | ||||
| 
 | ||||
| 	if issue.Comments == nil { | ||||
| 		issue.Comments, err = getCommentsByIssueID(e, issue.ID) | ||||
| 		issue.Comments, err = findComments(e, FindCommentsOptions{ | ||||
| 			IssueID: issue.ID, | ||||
| 			Type:    CommentTypeUnknown, | ||||
| 		}) | ||||
| 		if err != nil { | ||||
| 			return fmt.Errorf("getCommentsByIssueID [%d]: %v", issue.ID, err) | ||||
| 		} | ||||
|  | ||||
| @ -10,6 +10,7 @@ import ( | ||||
| 	"time" | ||||
| 
 | ||||
| 	"github.com/Unknwon/com" | ||||
| 	"github.com/go-xorm/builder" | ||||
| 	"github.com/go-xorm/xorm" | ||||
| 
 | ||||
| 	api "code.gitea.io/sdk/gitea" | ||||
| @ -21,6 +22,11 @@ import ( | ||||
| // CommentType defines whether a comment is just a simple comment, an action (like close) or a reference. | ||||
| type CommentType int | ||||
| 
 | ||||
| // define unknown comment type | ||||
| const ( | ||||
| 	CommentTypeUnknown CommentType = -1 | ||||
| ) | ||||
| 
 | ||||
| // Enumerate all the comment types | ||||
| const ( | ||||
| 	// Plain comment, can be associated with a commit (CommitID > 0) and a line (LineNum > 0) | ||||
| @ -568,47 +574,71 @@ func GetCommentByID(id int64) (*Comment, error) { | ||||
| 	return c, nil | ||||
| } | ||||
| 
 | ||||
| func getCommentsByIssueIDSince(e Engine, issueID, since int64) ([]*Comment, error) { | ||||
| 	comments := make([]*Comment, 0, 10) | ||||
| 	sess := e. | ||||
| 		Where("issue_id = ?", issueID). | ||||
| 		Where("type = ?", CommentTypeComment). | ||||
| 		Asc("created_unix") | ||||
| 	if since > 0 { | ||||
| 		sess.And("updated_unix >= ?", since) | ||||
| 	} | ||||
| 	return comments, sess.Find(&comments) | ||||
| // FindCommentsOptions describes the conditions to Find comments | ||||
| type FindCommentsOptions struct { | ||||
| 	RepoID  int64 | ||||
| 	IssueID int64 | ||||
| 	Since   int64 | ||||
| 	Type    CommentType | ||||
| } | ||||
| 
 | ||||
| func getCommentsByRepoIDSince(e Engine, repoID, since int64) ([]*Comment, error) { | ||||
| 	comments := make([]*Comment, 0, 10) | ||||
| 	sess := e.Where("issue.repo_id = ?", repoID). | ||||
| 		Where("comment.type = ?", CommentTypeComment). | ||||
| 		Join("INNER", "issue", "issue.id = comment.issue_id"). | ||||
| 		Asc("comment.created_unix") | ||||
| 	if since > 0 { | ||||
| 		sess.And("comment.updated_unix >= ?", since) | ||||
| func (opts *FindCommentsOptions) toConds() builder.Cond { | ||||
| 	var cond = builder.NewCond() | ||||
| 	if opts.RepoID > 0 { | ||||
| 		cond = cond.And(builder.Eq{"issue.repo_id": opts.RepoID}) | ||||
| 	} | ||||
| 	return comments, sess.Find(&comments) | ||||
| 	if opts.IssueID > 0 { | ||||
| 		cond = cond.And(builder.Eq{"comment.issue_id": opts.IssueID}) | ||||
| 	} | ||||
| 	if opts.Since > 0 { | ||||
| 		cond = cond.And(builder.Gte{"comment.updated_unix": opts.Since}) | ||||
| 	} | ||||
| 	if opts.Type != CommentTypeUnknown { | ||||
| 		cond = cond.And(builder.Eq{"comment.type": opts.Type}) | ||||
| 	} | ||||
| 	return cond | ||||
| } | ||||
| 
 | ||||
| func getCommentsByIssueID(e Engine, issueID int64) ([]*Comment, error) { | ||||
| 	return getCommentsByIssueIDSince(e, issueID, -1) | ||||
| func findComments(e Engine, opts FindCommentsOptions) ([]*Comment, error) { | ||||
| 	comments := make([]*Comment, 0, 10) | ||||
| 	sess := e.Where(opts.toConds()) | ||||
| 	if opts.RepoID > 0 { | ||||
| 		sess.Join("INNER", "issue", "issue.id = comment.issue_id") | ||||
| 	} | ||||
| 	return comments, sess. | ||||
| 		Asc("comment.created_unix"). | ||||
| 		Find(&comments) | ||||
| } | ||||
| 
 | ||||
| // FindComments returns all comments according options | ||||
| func FindComments(opts FindCommentsOptions) ([]*Comment, error) { | ||||
| 	return findComments(x, opts) | ||||
| } | ||||
| 
 | ||||
| // GetCommentsByIssueID returns all comments of an issue. | ||||
| func GetCommentsByIssueID(issueID int64) ([]*Comment, error) { | ||||
| 	return getCommentsByIssueID(x, issueID) | ||||
| 	return findComments(x, FindCommentsOptions{ | ||||
| 		IssueID: issueID, | ||||
| 		Type:    CommentTypeUnknown, | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| // GetCommentsByIssueIDSince returns a list of comments of an issue since a given time point. | ||||
| func GetCommentsByIssueIDSince(issueID, since int64) ([]*Comment, error) { | ||||
| 	return getCommentsByIssueIDSince(x, issueID, since) | ||||
| 	return findComments(x, FindCommentsOptions{ | ||||
| 		IssueID: issueID, | ||||
| 		Type:    CommentTypeUnknown, | ||||
| 		Since:   since, | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| // GetCommentsByRepoIDSince returns a list of comments for all issues in a repo since a given time point. | ||||
| func GetCommentsByRepoIDSince(repoID, since int64) ([]*Comment, error) { | ||||
| 	return getCommentsByRepoIDSince(x, repoID, since) | ||||
| 	return findComments(x, FindCommentsOptions{ | ||||
| 		RepoID: repoID, | ||||
| 		Type:   CommentTypeUnknown, | ||||
| 		Since:  since, | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| // UpdateComment updates information of comment. | ||||
|  | ||||
| @ -27,7 +27,11 @@ func ListIssueComments(ctx *context.APIContext) { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	comments, err := models.GetCommentsByIssueIDSince(issue.ID, since.Unix()) | ||||
| 	comments, err := models.FindComments(models.FindCommentsOptions{ | ||||
| 		IssueID: issue.ID, | ||||
| 		Since:   since.Unix(), | ||||
| 		Type:    models.CommentTypeComment, | ||||
| 	}) | ||||
| 	if err != nil { | ||||
| 		ctx.Error(500, "GetCommentsByIssueIDSince", err) | ||||
| 		return | ||||
| @ -47,7 +51,11 @@ func ListRepoIssueComments(ctx *context.APIContext) { | ||||
| 		since, _ = time.Parse(time.RFC3339, ctx.Query("since")) | ||||
| 	} | ||||
| 
 | ||||
| 	comments, err := models.GetCommentsByRepoIDSince(ctx.Repo.Repository.ID, since.Unix()) | ||||
| 	comments, err := models.FindComments(models.FindCommentsOptions{ | ||||
| 		RepoID: ctx.Repo.Repository.ID, | ||||
| 		Since:  since.Unix(), | ||||
| 		Type:   models.CommentTypeComment, | ||||
| 	}) | ||||
| 	if err != nil { | ||||
| 		ctx.Error(500, "GetCommentsByRepoIDSince", err) | ||||
| 		return | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user