This reverts commit 3cab3bee57.
			
			
This commit is contained in:
		
							parent
							
								
									3c7908b51c
								
							
						
					
					
						commit
						35cc82abbf
					
				
					 4 changed files with 24 additions and 151 deletions
				
			
		|  | @ -712,7 +712,6 @@ func createComment(e *xorm.Session, opts *CreateCommentOptions) (_ *Comment, err | |||
| 		RefAction:        opts.RefAction, | ||||
| 		RefIsPull:        opts.RefIsPull, | ||||
| 		IsForcePush:      opts.IsForcePush, | ||||
| 		Invalidated:      opts.Invalidated, | ||||
| 	} | ||||
| 	if _, err = e.Insert(comment); err != nil { | ||||
| 		return nil, err | ||||
|  | @ -879,7 +878,6 @@ type CreateCommentOptions struct { | |||
| 	RefAction        references.XRefAction | ||||
| 	RefIsPull        bool | ||||
| 	IsForcePush      bool | ||||
| 	Invalidated      bool | ||||
| } | ||||
| 
 | ||||
| // CreateComment creates comment of issue or commit.
 | ||||
|  | @ -955,8 +953,6 @@ type FindCommentsOptions struct { | |||
| 	ReviewID int64 | ||||
| 	Since    int64 | ||||
| 	Before   int64 | ||||
| 	Line     int64 | ||||
| 	TreePath string | ||||
| 	Type     CommentType | ||||
| } | ||||
| 
 | ||||
|  | @ -980,12 +976,6 @@ func (opts *FindCommentsOptions) toConds() builder.Cond { | |||
| 	if opts.Type != CommentTypeUnknown { | ||||
| 		cond = cond.And(builder.Eq{"comment.type": opts.Type}) | ||||
| 	} | ||||
| 	if opts.Line > 0 { | ||||
| 		cond = cond.And(builder.Eq{"comment.line": opts.Line}) | ||||
| 	} | ||||
| 	if len(opts.TreePath) > 0 { | ||||
| 		cond = cond.And(builder.Eq{"comment.tree_path": opts.TreePath}) | ||||
| 	} | ||||
| 	return cond | ||||
| } | ||||
| 
 | ||||
|  | @ -1000,8 +990,6 @@ func findComments(e Engine, opts FindCommentsOptions) ([]*Comment, error) { | |||
| 		sess = opts.setSessionPagination(sess) | ||||
| 	} | ||||
| 
 | ||||
| 	// WARNING: If you change this order you will need to fix createCodeComment
 | ||||
| 
 | ||||
| 	return comments, sess. | ||||
| 		Asc("comment.created_unix"). | ||||
| 		Asc("comment.id"). | ||||
|  |  | |||
|  | @ -250,8 +250,6 @@ var migrations = []Migration{ | |||
| 	NewMigration("fix publisher ID for tag releases", fixPublisherIDforTagReleases), | ||||
| 	// v157 -> v158
 | ||||
| 	NewMigration("ensure repo topics are up-to-date", fixRepoTopics), | ||||
| 	// v158 -> v159
 | ||||
| 	NewMigration("code comment replies should have the commitID of the review they are replying to", updateCodeCommentReplies), | ||||
| } | ||||
| 
 | ||||
| // GetCurrentDBVersion returns the current db version
 | ||||
|  |  | |||
|  | @ -1,78 +0,0 @@ | |||
| // Copyright 2020 The Gitea Authors. All rights reserved.
 | ||||
| // Use of this source code is governed by a MIT-style
 | ||||
| // license that can be found in the LICENSE file.
 | ||||
| 
 | ||||
| package migrations | ||||
| 
 | ||||
| import ( | ||||
| 	"code.gitea.io/gitea/modules/log" | ||||
| 
 | ||||
| 	"xorm.io/xorm" | ||||
| ) | ||||
| 
 | ||||
| func updateCodeCommentReplies(x *xorm.Engine) error { | ||||
| 	type Comment struct { | ||||
| 		ID          int64  `xorm:"pk autoincr"` | ||||
| 		CommitSHA   string `xorm:"VARCHAR(40)"` | ||||
| 		Patch       string `xorm:"TEXT patch"` | ||||
| 		Invalidated bool | ||||
| 
 | ||||
| 		// Not extracted but used in the below query
 | ||||
| 		Type     int   `xorm:"INDEX"` | ||||
| 		Line     int64 // - previous line / + proposed line
 | ||||
| 		TreePath string | ||||
| 		ReviewID int64 `xorm:"index"` | ||||
| 	} | ||||
| 
 | ||||
| 	if err := x.Sync2(new(Comment)); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	sess := x.NewSession() | ||||
| 	defer sess.Close() | ||||
| 	if err := sess.Begin(); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	var start = 0 | ||||
| 	var batchSize = 100 | ||||
| 	for { | ||||
| 		var comments = make([]*Comment, 0, batchSize) | ||||
| 		if err := sess.SQL(`SELECT comment.id as id, first.commit_sha as commit_sha, first.patch as patch, first.invalidated as invalidated | ||||
| 		FROM comment INNER JOIN ( | ||||
| 			SELECT C.id, C.review_id, C.line, C.tree_path, C.patch, C.commit_sha, C.invalidated | ||||
| 			FROM comment AS C  | ||||
| 			WHERE C.type = 21 | ||||
| 				AND C.created_unix =  | ||||
| 					(SELECT MIN(comment.created_unix) | ||||
| 						FROM comment | ||||
| 						WHERE comment.review_id = C.review_id | ||||
| 						AND comment.type = 21 | ||||
| 						AND comment.line = C.line | ||||
| 						AND comment.tree_path = C.tree_path) | ||||
| 			) AS first | ||||
| 			ON comment.review_id = first.review_id | ||||
| 				AND comment.tree_path = first.tree_path AND comment.line = first.line | ||||
| 		WHERE comment.type = 21 | ||||
| 			AND comment.id != first.id | ||||
| 			AND comment.commit_sha != first.commit_sha`).Limit(batchSize, start).Find(&comments); err != nil { | ||||
| 			log.Error("failed to select: %v", err) | ||||
| 			return err | ||||
| 		} | ||||
| 
 | ||||
| 		for _, comment := range comments { | ||||
| 			if _, err := sess.Table("comment").Cols("commit_sha", "patch", "invalidated").Update(comment); err != nil { | ||||
| 				log.Error("failed to update comment[%d]: %v %v", comment.ID, comment, err) | ||||
| 				return err | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		start += len(comments) | ||||
| 
 | ||||
| 		if len(comments) < batchSize { | ||||
| 			break | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return sess.Commit() | ||||
| } | ||||
|  | @ -122,76 +122,41 @@ func createCodeComment(doer *models.User, repo *models.Repository, issue *models | |||
| 	} | ||||
| 	defer gitRepo.Close() | ||||
| 
 | ||||
| 	invalidated := false | ||||
| 	head := pr.GetGitRefName() | ||||
| 	// FIXME validate treePath
 | ||||
| 	// Get latest commit referencing the commented line
 | ||||
| 	// No need for get commit for base branch changes
 | ||||
| 	if line > 0 { | ||||
| 		if reviewID != 0 { | ||||
| 			first, err := models.FindComments(models.FindCommentsOptions{ | ||||
| 				ReviewID: reviewID, | ||||
| 				Line:     line, | ||||
| 				TreePath: treePath, | ||||
| 				Type:     models.CommentTypeCode, | ||||
| 				ListOptions: models.ListOptions{ | ||||
| 					PageSize: 1, | ||||
| 					Page:     1, | ||||
| 				}, | ||||
| 			}) | ||||
| 			if err == nil && len(first) > 0 { | ||||
| 				commitID = first[0].CommitSHA | ||||
| 				invalidated = first[0].Invalidated | ||||
| 				patch = first[0].Patch | ||||
| 			} else if err != nil && !models.IsErrCommentNotExist(err) { | ||||
| 				return nil, fmt.Errorf("Find first comment for %d line %d path %s. Error: %v", reviewID, line, treePath, err) | ||||
| 			} else { | ||||
| 				review, err := models.GetReviewByID(reviewID) | ||||
| 				if err == nil && len(review.CommitID) > 0 { | ||||
| 					head = review.CommitID | ||||
| 				} else if err != nil && !models.IsErrReviewNotExist(err) { | ||||
| 					return nil, fmt.Errorf("GetReviewByID %d. Error: %v", reviewID, err) | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		if len(commitID) == 0 { | ||||
| 			// FIXME validate treePath
 | ||||
| 			// Get latest commit referencing the commented line
 | ||||
| 			// No need for get commit for base branch changes
 | ||||
| 			commit, err := gitRepo.LineBlame(head, gitRepo.Path, treePath, uint(line)) | ||||
| 			if err == nil { | ||||
| 				commitID = commit.ID.String() | ||||
| 			} else if !(strings.Contains(err.Error(), "exit status 128 - fatal: no such path") || notEnoughLines.MatchString(err.Error())) { | ||||
| 				return nil, fmt.Errorf("LineBlame[%s, %s, %s, %d]: %v", pr.GetGitRefName(), gitRepo.Path, treePath, line, err) | ||||
| 			} | ||||
| 		commit, err := gitRepo.LineBlame(pr.GetGitRefName(), gitRepo.Path, treePath, uint(line)) | ||||
| 		if err == nil { | ||||
| 			commitID = commit.ID.String() | ||||
| 		} else if !(strings.Contains(err.Error(), "exit status 128 - fatal: no such path") || notEnoughLines.MatchString(err.Error())) { | ||||
| 			return nil, fmt.Errorf("LineBlame[%s, %s, %s, %d]: %v", pr.GetGitRefName(), gitRepo.Path, treePath, line, err) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	// Only fetch diff if comment is review comment
 | ||||
| 	if len(patch) == 0 && reviewID != 0 { | ||||
| 		if len(commitID) == 0 { | ||||
| 			commitID, err = gitRepo.GetRefCommitID(pr.GetGitRefName()) | ||||
| 			if err != nil { | ||||
| 				return nil, fmt.Errorf("GetRefCommitID[%s]: %v", pr.GetGitRefName(), err) | ||||
| 			} | ||||
| 	if reviewID != 0 { | ||||
| 		headCommitID, err := gitRepo.GetRefCommitID(pr.GetGitRefName()) | ||||
| 		if err != nil { | ||||
| 			return nil, fmt.Errorf("GetRefCommitID[%s]: %v", pr.GetGitRefName(), err) | ||||
| 		} | ||||
| 
 | ||||
| 		patchBuf := new(bytes.Buffer) | ||||
| 		if err := git.GetRepoRawDiffForFile(gitRepo, pr.MergeBase, commitID, git.RawDiffNormal, treePath, patchBuf); err != nil { | ||||
| 			return nil, fmt.Errorf("GetRawDiffForLine[%s, %s, %s, %s]: %v", gitRepo.Path, pr.MergeBase, commitID, treePath, err) | ||||
| 		if err := git.GetRepoRawDiffForFile(gitRepo, pr.MergeBase, headCommitID, git.RawDiffNormal, treePath, patchBuf); err != nil { | ||||
| 			return nil, fmt.Errorf("GetRawDiffForLine[%s, %s, %s, %s]: %v", err, gitRepo.Path, pr.MergeBase, headCommitID, treePath) | ||||
| 		} | ||||
| 		patch = git.CutDiffAroundLine(patchBuf, int64((&models.Comment{Line: line}).UnsignedLine()), line < 0, setting.UI.CodeCommentLines) | ||||
| 	} | ||||
| 	return models.CreateComment(&models.CreateCommentOptions{ | ||||
| 		Type:        models.CommentTypeCode, | ||||
| 		Doer:        doer, | ||||
| 		Repo:        repo, | ||||
| 		Issue:       issue, | ||||
| 		Content:     content, | ||||
| 		LineNum:     line, | ||||
| 		TreePath:    treePath, | ||||
| 		CommitSHA:   commitID, | ||||
| 		ReviewID:    reviewID, | ||||
| 		Patch:       patch, | ||||
| 		Invalidated: invalidated, | ||||
| 		Type:      models.CommentTypeCode, | ||||
| 		Doer:      doer, | ||||
| 		Repo:      repo, | ||||
| 		Issue:     issue, | ||||
| 		Content:   content, | ||||
| 		LineNum:   line, | ||||
| 		TreePath:  treePath, | ||||
| 		CommitSHA: commitID, | ||||
| 		ReviewID:  reviewID, | ||||
| 		Patch:     patch, | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue