fix: off-by-one errors in code comment patches (#39887)

Code comments next to a diff hunk could show one line too high in the
conversation view vs. in the code view that showed them on the correct
line.

- Treat the hunk end in `CutDiffAroundLine` as exclusive, so the line
after a hunk falls back to the unchanged-line context
- Don't count `\ No newline at end of file` markers as lines when
cutting the hunk
- Share the unchanged-line fallback with migrated review comments
This commit is contained in:
silverwind authored and GitHub committed 2026-10-20 22:10:04 +00:00
1 parent c52e7c0cd2
commit 82536a3ede
5 files changed
+41 -37

No files matched your search

+2 -4
View File
@@ -31,6 +31,7 @@ import (
"gitea.dev/modules/timeutil"
"gitea.dev/modules/uri"
"gitea.dev/modules/util"
"gitea.dev/services/gitdiff"
"gitea.dev/services/pull"
repo_service "gitea.dev/services/repository"
)
@@ -905,10 +906,7 @@ func (g *GiteaLocalUploader) CreateReviews(ctx context.Context, reviews ...*base
// SECURITY: The TreePath must be cleaned! use relative path
comment.TreePath = util.PathJoinRel(comment.TreePath)
patch, _ := git.GetFileDiffCutAroundLine(ctx,
g.gitRepo, pr.MergeBase, headCommitID, comment.TreePath,
int64((&issues_model.Comment{Line: int64(line + comment.Position - 1)}).UnsignedLine()), line < 0, setting.UI.CodeCommentLines,
)
patch, _ := gitdiff.GetCodeCommentPatch(ctx, g.gitRepo, pr.MergeBase, headCommitID, comment.TreePath, int64(line+comment.Position-1))
if comment.CreatedAt.IsZero() {
comment.CreatedAt = review.CreatedAt