Skip to content

Commit

Permalink
Use GhostUser if needed for TrackedTimes
Browse files Browse the repository at this point in the history
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 go-gitea#22006

Signed-off-by: Andrew Thornton <art27@cantab.net>
  • Loading branch information
zeripath committed Dec 3, 2022
1 parent 0e46499 commit 2c6defa
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 15 deletions.
27 changes: 18 additions & 9 deletions models/issues/tracked_time.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ package issues

import (
"context"
"errors"
"time"

"code.gitea.io/gitea/models/db"
Expand Down Expand Up @@ -46,33 +47,41 @@ func (t *TrackedTime) LoadAttributes() (err error) {
}

func (t *TrackedTime) loadAttributes(ctx context.Context) (err error) {
// Load the issue
if t.Issue == nil {
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)
if err != nil {
return
if err != nil && !errors.Is(err, util.ErrNotExist) {
return err
}
}
// Load the user
if t.User == nil {
t.User, err = user_model.GetUserByID(ctx, t.UserID)
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
func (tl TrackedTimeList) LoadAttributes() (err error) {
func (tl TrackedTimeList) LoadAttributes() error {
for _, t := range tl {
if err = t.LoadAttributes(); err != nil {
if err := t.LoadAttributes(); err != nil {
return err
}
}
return err
return nil
}

// FindTrackedTimesOptions represent the filters for tracked times. If an ID is 0 it will be ignored.
Expand Down
11 changes: 5 additions & 6 deletions modules/convert/issue.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,12 +110,11 @@ func ToAPIIssueList(ctx context.Context, il issues_model.IssueList) []*api.Issue
// ToTrackedTime converts TrackedTime to API format
func ToTrackedTime(ctx context.Context, t *issues_model.TrackedTime) (apiT *api.TrackedTime) {
apiT = &api.TrackedTime{
ID: t.ID,
IssueID: t.IssueID,
UserID: t.UserID,
UserName: t.User.Name,
Time: t.Time,
Created: t.Created,
ID: t.ID,
IssueID: t.IssueID,
UserID: t.UserID,
Time: t.Time,
Created: t.Created,
}
if t.Issue != nil {
apiT.Issue = ToAPIIssue(ctx, t.Issue)
Expand Down

0 comments on commit 2c6defa

Please sign in to comment.