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