mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-04 04:14:01 +01:00 
			
		
		
		
	* 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