summaryrefslogtreecommitdiffstats
path: root/routers
diff options
context:
space:
mode:
authorGusted <postmaster@gusted.xyz>2024-12-03 05:29:07 +0100
committerGusted <postmaster@gusted.xyz>2024-12-03 05:32:51 +0100
commitb500c48fa032e4f3cd5f63911ed24a4434639f04 (patch)
treeafe53619980ab6eb4b08951d6bfe8cf6e2d9f1ff /routers
parentMerge pull request 'fix: dbconsistency check adding missing quotes' (#6124) f... (diff)
downloadforgejo-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.go12
-rw-r--r--routers/web/repo/helper_test.go11
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)
}