aboutsummaryrefslogtreecommitdiffstats
path: root/models/issues
diff options
context:
space:
mode:
authorsebastian-sauer <sauer.sebastian@gmail.com>2023-06-21 18:08:12 +0200
committerGitHub <noreply@github.com>2023-06-21 16:08:12 +0000
commit25455bc670910111d8cbb5293f95713416d22a0e (patch)
tree651e73a1742a45743715da6b82401c87af6314ea /models/issues
parentce46834b938eb687152a680669ada95a26304178 (diff)
downloadgitea-25455bc670910111d8cbb5293f95713416d22a0e.tar.gz
gitea-25455bc670910111d8cbb5293f95713416d22a0e.zip
Show outdated comments in files changed tab (#24936)
If enabled show a clickable label in the comment. A click on the label opens the Conversation tab with the comment focussed - there you're able to view the old diff (or original diff the comment was created on). **Screenshots** ![image](https://github.com/go-gitea/gitea/assets/1135157/63ab9571-a9ee-4900-9f02-94ab0095f9e7) ![image](https://github.com/go-gitea/gitea/assets/1135157/78f7c225-8d76-46f5-acfd-9b8aab988a6c) When resolved and outdated: ![image](https://github.com/go-gitea/gitea/assets/1135157/6ece9ebd-c792-4aa5-9c35-628694e9d093) Option to enable/disable this (stored in user settings - default is disabled): ![image](https://github.com/go-gitea/gitea/assets/1135157/ed99dfe4-76dc-4c12-bd96-e7e62da50ab5) ![image](https://github.com/go-gitea/gitea/assets/1135157/e837a052-e92e-4a28-906d-9db5bacf93a6) fixes #24913 --------- Co-authored-by: silverwind <me@silverwind.io>
Diffstat (limited to 'models/issues')
-rw-r--r--models/issues/comment_code.go18
-rw-r--r--models/issues/comment_test.go4
-rw-r--r--models/issues/review.go2
3 files changed, 13 insertions, 11 deletions
diff --git a/models/issues/comment_code.go b/models/issues/comment_code.go
index 304ac4569f..d447d7542c 100644
--- a/models/issues/comment_code.go
+++ b/models/issues/comment_code.go
@@ -18,11 +18,11 @@ import (
type CodeComments map[string]map[int64][]*Comment
// FetchCodeComments will return a 2d-map: ["Path"]["Line"] = Comments at line
-func FetchCodeComments(ctx context.Context, issue *Issue, currentUser *user_model.User) (CodeComments, error) {
- return fetchCodeCommentsByReview(ctx, issue, currentUser, nil)
+func FetchCodeComments(ctx context.Context, issue *Issue, currentUser *user_model.User, showOutdatedComments bool) (CodeComments, error) {
+ return fetchCodeCommentsByReview(ctx, issue, currentUser, nil, showOutdatedComments)
}
-func fetchCodeCommentsByReview(ctx context.Context, issue *Issue, currentUser *user_model.User, review *Review) (CodeComments, error) {
+func fetchCodeCommentsByReview(ctx context.Context, issue *Issue, currentUser *user_model.User, review *Review, showOutdatedComments bool) (CodeComments, error) {
pathToLineToComment := make(CodeComments)
if review == nil {
review = &Review{ID: 0}
@@ -33,7 +33,7 @@ func fetchCodeCommentsByReview(ctx context.Context, issue *Issue, currentUser *u
ReviewID: review.ID,
}
- comments, err := findCodeComments(ctx, opts, issue, currentUser, review)
+ comments, err := findCodeComments(ctx, opts, issue, currentUser, review, showOutdatedComments)
if err != nil {
return nil, err
}
@@ -47,15 +47,17 @@ func fetchCodeCommentsByReview(ctx context.Context, issue *Issue, currentUser *u
return pathToLineToComment, nil
}
-func findCodeComments(ctx context.Context, opts FindCommentsOptions, issue *Issue, currentUser *user_model.User, review *Review) ([]*Comment, error) {
+func findCodeComments(ctx context.Context, opts FindCommentsOptions, issue *Issue, currentUser *user_model.User, review *Review, showOutdatedComments bool) ([]*Comment, error) {
var comments CommentList
if review == nil {
review = &Review{ID: 0}
}
conds := opts.ToConds()
- if review.ID == 0 {
+
+ if !showOutdatedComments && review.ID == 0 {
conds = conds.And(builder.Eq{"invalidated": false})
}
+
e := db.GetEngine(ctx)
if err := e.Where(conds).
Asc("comment.created_unix").
@@ -118,12 +120,12 @@ func findCodeComments(ctx context.Context, opts FindCommentsOptions, issue *Issu
}
// FetchCodeCommentsByLine fetches the code comments for a given treePath and line number
-func FetchCodeCommentsByLine(ctx context.Context, issue *Issue, currentUser *user_model.User, treePath string, line int64) ([]*Comment, error) {
+func FetchCodeCommentsByLine(ctx context.Context, issue *Issue, currentUser *user_model.User, treePath string, line int64, showOutdatedComments bool) ([]*Comment, error) {
opts := FindCommentsOptions{
Type: CommentTypeCode,
IssueID: issue.ID,
TreePath: treePath,
Line: line,
}
- return findCodeComments(ctx, opts, issue, currentUser, nil)
+ return findCodeComments(ctx, opts, issue, currentUser, nil, showOutdatedComments)
}
diff --git a/models/issues/comment_test.go b/models/issues/comment_test.go
index 43bad1660f..d766625be3 100644
--- a/models/issues/comment_test.go
+++ b/models/issues/comment_test.go
@@ -50,7 +50,7 @@ func TestFetchCodeComments(t *testing.T) {
issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 2})
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
- res, err := issues_model.FetchCodeComments(db.DefaultContext, issue, user)
+ res, err := issues_model.FetchCodeComments(db.DefaultContext, issue, user, false)
assert.NoError(t, err)
assert.Contains(t, res, "README.md")
assert.Contains(t, res["README.md"], int64(4))
@@ -58,7 +58,7 @@ func TestFetchCodeComments(t *testing.T) {
assert.Equal(t, int64(4), res["README.md"][4][0].ID)
user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
- res, err = issues_model.FetchCodeComments(db.DefaultContext, issue, user2)
+ res, err = issues_model.FetchCodeComments(db.DefaultContext, issue, user2, false)
assert.NoError(t, err)
assert.Len(t, res, 1)
}
diff --git a/models/issues/review.go b/models/issues/review.go
index 3a1ab7468a..3685c65ce5 100644
--- a/models/issues/review.go
+++ b/models/issues/review.go
@@ -141,7 +141,7 @@ func (r *Review) LoadCodeComments(ctx context.Context) (err error) {
if err = r.loadIssue(ctx); err != nil {
return
}
- r.CodeComments, err = fetchCodeCommentsByReview(ctx, r.Issue, nil, r)
+ r.CodeComments, err = fetchCodeCommentsByReview(ctx, r.Issue, nil, r, false)
return err
}