mirror of https://github.com/go-gitea/gitea
Backport #31788 by @wolfogre Fix #31784. Before: <img width="1648" alt="image" src="https://github.com/user-attachments/assets/03f32545-4a85-42ed-bafc-2b193a5d8023"> After: <img width="1653" alt="image" src="https://github.com/user-attachments/assets/e5bcaf93-49cb-421f-aac1-5122bc488b02"> Co-authored-by: Jason Song <i@wolfogre.com>pull/31819/head
parent
e563297c34
commit
a39fe53252
@ -0,0 +1,54 @@ |
||||
// Copyright 2024 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package git |
||||
|
||||
import ( |
||||
"context" |
||||
"fmt" |
||||
|
||||
"code.gitea.io/gitea/models/db" |
||||
user_model "code.gitea.io/gitea/models/user" |
||||
"code.gitea.io/gitea/modules/container" |
||||
) |
||||
|
||||
// LFSLockList is a list of LFSLock
|
||||
type LFSLockList []*LFSLock |
||||
|
||||
// LoadAttributes loads the attributes for the given locks
|
||||
func (locks LFSLockList) LoadAttributes(ctx context.Context) error { |
||||
if len(locks) == 0 { |
||||
return nil |
||||
} |
||||
|
||||
if err := locks.LoadOwner(ctx); err != nil { |
||||
return fmt.Errorf("load owner: %w", err) |
||||
} |
||||
|
||||
return nil |
||||
} |
||||
|
||||
// LoadOwner loads the owner of the locks
|
||||
func (locks LFSLockList) LoadOwner(ctx context.Context) error { |
||||
if len(locks) == 0 { |
||||
return nil |
||||
} |
||||
|
||||
usersIDs := container.FilterSlice(locks, func(lock *LFSLock) (int64, bool) { |
||||
return lock.OwnerID, true |
||||
}) |
||||
users := make(map[int64]*user_model.User, len(usersIDs)) |
||||
if err := db.GetEngine(ctx). |
||||
In("id", usersIDs). |
||||
Find(&users); err != nil { |
||||
return fmt.Errorf("find users: %w", err) |
||||
} |
||||
for _, v := range locks { |
||||
v.Owner = users[v.OwnerID] |
||||
if v.Owner == nil { // not exist
|
||||
v.Owner = user_model.NewGhostUser() |
||||
} |
||||
} |
||||
|
||||
return nil |
||||
} |
Loading…
Reference in new issue