Use GhostUser if needed for TrackedTimes (#22021) (#22029)

Backport #22021

When getting tracked times out of the db and loading their attributes
handle not exist errors in a nicer way. (Also prevent an NPE.)

Fix #22006

Signed-off-by: Andrew Thornton <art27@cantab.net>

Signed-off-by: Andrew Thornton <art27@cantab.net>
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
tokarchuk/v1.18
zeripath 2 years ago committed by GitHub
parent 6e4ba04843
commit 35fc9ad984
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 28
      models/issues/tracked_time.go
  2. 1
      modules/convert/issue.go

@ -6,6 +6,7 @@ package issues
import ( import (
"context" "context"
"errors"
"time" "time"
"code.gitea.io/gitea/models/db" "code.gitea.io/gitea/models/db"
@ -47,33 +48,42 @@ func (t *TrackedTime) LoadAttributes() (err error) {
} }
func (t *TrackedTime) loadAttributes(ctx context.Context) (err error) { func (t *TrackedTime) loadAttributes(ctx context.Context) (err error) {
// Load the issue
if t.Issue == nil { if t.Issue == nil {
t.Issue, err = GetIssueByID(ctx, t.IssueID) t.Issue, err = GetIssueByID(ctx, t.IssueID)
if err != nil {
return if err != nil && !errors.Is(err, util.ErrNotExist) {
return err
} }
}
// Now load the repo for the issue (which we may have just loaded)
if t.Issue != nil {
err = t.Issue.LoadRepo(ctx) err = t.Issue.LoadRepo(ctx)
if err != nil { if err != nil && !errors.Is(err, util.ErrNotExist) {
return return err
} }
} }
// Load the user
if t.User == nil { if t.User == nil {
t.User, err = user_model.GetUserByIDCtx(ctx, t.UserID) t.User, err = user_model.GetUserByIDCtx(ctx, t.UserID)
if err != nil { if err != nil {
return if !errors.Is(err, util.ErrNotExist) {
return err
} }
t.User = user_model.NewGhostUser()
} }
return err }
return nil
} }
// LoadAttributes load Issue, User // LoadAttributes load Issue, User
func (tl TrackedTimeList) LoadAttributes() (err error) { func (tl TrackedTimeList) LoadAttributes() error {
for _, t := range tl { for _, t := range tl {
if err = t.LoadAttributes(); err != nil { if err := t.LoadAttributes(); err != nil {
return err return err
} }
} }
return err return nil
} }
// FindTrackedTimesOptions represent the filters for tracked times. If an ID is 0 it will be ignored. // FindTrackedTimesOptions represent the filters for tracked times. If an ID is 0 it will be ignored.

@ -113,7 +113,6 @@ func ToTrackedTime(t *issues_model.TrackedTime) (apiT *api.TrackedTime) {
ID: t.ID, ID: t.ID,
IssueID: t.IssueID, IssueID: t.IssueID,
UserID: t.UserID, UserID: t.UserID,
UserName: t.User.Name,
Time: t.Time, Time: t.Time,
Created: t.Created, Created: t.Created,
} }

Loading…
Cancel
Save