From 4e1d4caf9863236f4b9cb9c0de1b0c45a9690010 Mon Sep 17 00:00:00 2001 From: Brook Date: Thu, 11 Sep 2025 16:30:04 +0200 Subject: [PATCH] fix: quotas double counting repo size when calculating size:all (#9234) Resolves forgejo/forgejo#7860 Reviewed-by: Gusted Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9234 Co-authored-by: Brook Co-committed-by: Brook --- models/quota/used.go | 2 +- models/quota/used_test.go | 37 ++++++++++++++++++++++++++++++++++--- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/models/quota/used.go b/models/quota/used.go index 22815165f6..0d8f62ab78 100644 --- a/models/quota/used.go +++ b/models/quota/used.go @@ -25,7 +25,7 @@ type UsedSize struct { } func (u UsedSize) All() int64 { - return u.Repos.All() + u.Git.All(u.Repos) + u.Assets.All() + return u.Git.All(u.Repos) + u.Assets.All() } type UsedSizeRepos struct { diff --git a/models/quota/used_test.go b/models/quota/used_test.go index 82cc5b9bcc..0fed83342b 100644 --- a/models/quota/used_test.go +++ b/models/quota/used_test.go @@ -1,23 +1,54 @@ // Copyright 2025 The Forgejo Authors. All rights reserved. // SPDX-License-Identifier: GPL-3.0-or-later -package quota +package quota_test import ( "testing" + quota_model "forgejo.org/models/quota" "forgejo.org/models/unittest" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) -func TestGetUsedForUser(t *testing.T) { +func TestQuotaUsedGetUsedForUser(t *testing.T) { defer unittest.OverrideFixtures("models/fixtures/TestGetUsedForUser/")() require.NoError(t, unittest.PrepareTestDatabase()) - used, err := GetUsedForUser(t.Context(), 5) + used, err := quota_model.GetUsedForUser(t.Context(), 5) require.NoError(t, err) assert.EqualValues(t, 4096, used.Size.Assets.Artifacts) } + +func TestQuotaUsedTotals(t *testing.T) { + used := quota_model.Used{ + Size: quota_model.UsedSize{ + Repos: quota_model.UsedSizeRepos{ + Public: 2, + Private: 3, + }, + Git: quota_model.UsedSizeGit{ + LFS: 7, + }, + Assets: quota_model.UsedSizeAssets{ + Attachments: quota_model.UsedSizeAssetsAttachments{ + Issues: 11, + Releases: 13, + }, + Artifacts: 17, + Packages: quota_model.UsedSizeAssetsPackages{ + All: 19, + }, + }, + }, + } + + assert.EqualValues(t, 5, used.Size.Repos.All()) // repos public + repos private + assert.EqualValues(t, 12, used.Size.Git.All(used.Size.Repos)) // repos all + git lfs + assert.EqualValues(t, 24, used.Size.Assets.Attachments.All()) // issues + releases + assert.EqualValues(t, 60, used.Size.Assets.All()) // attachments all + artifacts + packages + assert.EqualValues(t, 72, used.Size.All()) // git all + assets all +}