diff options
author | Gusted <postmaster@gusted.xyz> | 2024-12-03 05:29:07 +0100 |
---|---|---|
committer | Gusted <postmaster@gusted.xyz> | 2024-12-03 05:32:51 +0100 |
commit | b500c48fa032e4f3cd5f63911ed24a4434639f04 (patch) | |
tree | afe53619980ab6eb4b08951d6bfe8cf6e2d9f1ff /routers | |
parent | Merge pull request 'fix: dbconsistency check adding missing quotes' (#6124) f... (diff) | |
download | forgejo-b500c48fa032e4f3cd5f63911ed24a4434639f04.tar.xz forgejo-b500c48fa032e4f3cd5f63911ed24a4434639f04.zip |
feat: avoid sorting for `MakeSelfOnTop`
- Although sorting can be used to make the doer the first user of the
list, this isn't optimal and can be instead done with a linear search,
remove that entry and add the doer to the front of the slice.
- Extra unit test added.
Diffstat (limited to 'routers')
-rw-r--r-- | routers/web/repo/helper.go | 12 | ||||
-rw-r--r-- | routers/web/repo/helper_test.go | 11 |
2 files changed, 17 insertions, 6 deletions
diff --git a/routers/web/repo/helper.go b/routers/web/repo/helper.go index 5e1e116018..6fa7579231 100644 --- a/routers/web/repo/helper.go +++ b/routers/web/repo/helper.go @@ -5,7 +5,7 @@ package repo import ( "net/url" - "sort" + "slices" "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/git" @@ -14,12 +14,12 @@ import ( func MakeSelfOnTop(doer *user.User, users []*user.User) []*user.User { if doer != nil { - sort.Slice(users, func(i, j int) bool { - if users[i].ID == users[j].ID { - return false - } - return users[i].ID == doer.ID // if users[i] is self, put it before others, so less=true + doerIndex := slices.IndexFunc(users, func(user *user.User) bool { + return user.ID == doer.ID }) + if doerIndex != -1 { + return slices.Insert(slices.Delete(users, doerIndex, doerIndex+1), 0, doer) + } } return users } diff --git a/routers/web/repo/helper_test.go b/routers/web/repo/helper_test.go index 978758e77f..844ad5bf79 100644 --- a/routers/web/repo/helper_test.go +++ b/routers/web/repo/helper_test.go @@ -23,4 +23,15 @@ func TestMakeSelfOnTop(t *testing.T) { users = MakeSelfOnTop(&user.User{ID: 2}, []*user.User{{ID: 2}, {ID: 1}}) assert.Len(t, users, 2) assert.EqualValues(t, 2, users[0].ID) + + users = MakeSelfOnTop(&user.User{ID: 2}, []*user.User{{ID: 1}}) + assert.Len(t, users, 1) + assert.EqualValues(t, 1, users[0].ID) + + users = MakeSelfOnTop(&user.User{ID: 2}, []*user.User{{ID: 1}, {ID: 2}, {ID: 3}, {ID: 4}}) + assert.Len(t, users, 4) + assert.EqualValues(t, 2, users[0].ID) + assert.EqualValues(t, 1, users[1].ID) + assert.EqualValues(t, 3, users[2].ID) + assert.EqualValues(t, 4, users[3].ID) } |