loading up the forgejo repo on tangled to test page performance
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request 'feat: Trivial default quota configuration' (#5125) from algernon/forgejo:falling-in-reverse into forgejo

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/5125
Reviewed-by: Otto <otto@codeberg.org>

Otto bf65f1e5 a9a89738

+86 -4
+25
models/quota/default.go
··· 1 + // Copyright 2024 The Forgejo Authors. All rights reserved. 2 + // SPDX-License-Identifier: MIT 3 + 4 + package quota 5 + 6 + import ( 7 + "code.gitea.io/gitea/modules/setting" 8 + ) 9 + 10 + func EvaluateDefault(used Used, forSubject LimitSubject) bool { 11 + groups := GroupList{ 12 + &Group{ 13 + Name: "builtin-default-group", 14 + Rules: []Rule{ 15 + { 16 + Name: "builtin-default-rule", 17 + Limit: setting.Quota.Default.Total, 18 + Subjects: LimitSubjects{LimitSubjectSizeAll}, 19 + }, 20 + }, 21 + }, 22 + } 23 + 24 + return groups.Evaluate(used, forSubject) 25 + }
+2 -2
models/quota/group.go
··· 230 230 } 231 231 232 232 func (gl *GroupList) Evaluate(used Used, forSubject LimitSubject) bool { 233 - // If there are no groups, default to success: 233 + // If there are no groups, use the configured defaults: 234 234 if gl == nil || len(*gl) == 0 { 235 - return true 235 + return EvaluateDefault(used, forSubject) 236 236 } 237 237 238 238 for _, group := range *gl {
+9
modules/setting/quota.go
··· 7 7 var Quota = struct { 8 8 Enabled bool `ini:"ENABLED"` 9 9 DefaultGroups []string `ini:"DEFAULT_GROUPS"` 10 + 11 + Default struct { 12 + Total int64 13 + } `ini:"quota.default"` 10 14 }{ 11 15 Enabled: false, 12 16 DefaultGroups: []string{}, 17 + Default: struct { 18 + Total int64 19 + }{ 20 + Total: -1, 21 + }, 13 22 } 14 23 15 24 func loadQuotaFrom(rootCfg ConfigProvider) {
+50 -2
tests/integration/quota_use_test.go
··· 548 548 }) 549 549 } 550 550 551 + func TestQuotaConfigDefault(t *testing.T) { 552 + onGiteaRun(t, func(t *testing.T, u *url.URL) { 553 + env := createQuotaWebEnv(t) 554 + defer env.Cleanup() 555 + 556 + t.Run("with config-based default", func(t *testing.T) { 557 + defer tests.PrintCurrentTest(t)() 558 + defer test.MockVariableValue(&setting.Quota.Default.Total, 0)() 559 + 560 + env.As(t, env.Users.Ungrouped). 561 + With(Context{ 562 + Payload: &Payload{ 563 + "uid": env.Users.Ungrouped.ID().AsString(), 564 + "repo_name": "quota-config-default", 565 + }, 566 + }). 567 + PostToPage("/repo/create"). 568 + ExpectStatus(http.StatusRequestEntityTooLarge) 569 + }) 570 + 571 + t.Run("without config-based default", func(t *testing.T) { 572 + defer tests.PrintCurrentTest(t)() 573 + 574 + env.As(t, env.Users.Ungrouped). 575 + With(Context{ 576 + Payload: &Payload{ 577 + "uid": env.Users.Ungrouped.ID().AsString(), 578 + "repo_name": "quota-config-default", 579 + }, 580 + }). 581 + PostToPage("/repo/create"). 582 + ExpectStatus(http.StatusSeeOther) 583 + }) 584 + }) 585 + } 586 + 551 587 /********************** 552 588 * Here be dragons! * 553 589 * * ··· 568 604 type quotaWebEnvUsers struct { 569 605 Limited quotaWebEnvUser 570 606 Contributor quotaWebEnvUser 607 + Ungrouped quotaWebEnvUser 571 608 } 572 609 573 610 type quotaWebEnvOrgs struct { ··· 1005 1042 1006 1043 // *** helpers *** 1007 1044 1008 - // Create a user, its quota group & rule 1009 - makeUser := func(t *testing.T, limit int64) quotaWebEnvUser { 1045 + makeUngroupedUser := func(t *testing.T) quotaWebEnvUser { 1010 1046 t.Helper() 1011 1047 1012 1048 user := quotaWebEnvUser{} ··· 1020 1056 // Create a repository for the user 1021 1057 repo, _, _ := tests.CreateDeclarativeRepoWithOptions(t, user.User, tests.DeclarativeRepoOptions{}) 1022 1058 user.Repo = repo 1059 + 1060 + return user 1061 + } 1062 + 1063 + // Create a user, its quota group & rule 1064 + makeUser := func(t *testing.T, limit int64) quotaWebEnvUser { 1065 + t.Helper() 1066 + 1067 + user := makeUngroupedUser(t) 1068 + userName := user.User.Name 1023 1069 1024 1070 // Create a quota group for them 1025 1071 group, err := quota_model.CreateGroup(db.DefaultContext, userName) ··· 1094 1140 env.Users.Contributor = makeUser(t, int64(0)) 1095 1141 env.Orgs.Limited = makeOrg(t, env.Users.Limited.User, int64(0)) 1096 1142 env.Orgs.Unlimited = makeOrg(t, env.Users.Limited.User, int64(-1)) 1143 + 1144 + env.Users.Ungrouped = makeUngroupedUser(t) 1097 1145 1098 1146 return &env 1099 1147 }