summaryrefslogtreecommitdiffstats
path: root/models/repo
diff options
context:
space:
mode:
authora1012112796 <1012112796@qq.com>2023-06-29 06:41:02 +0800
committerGitHub <noreply@github.com>2023-06-28 22:41:02 +0000
commit4aba8a6a5ff96f0995ada7e183c7864f8f5bc05c (patch)
treed3fc062a47fbbe8faccc347af2d0aff84078e872 /models/repo
parent953884236454e6e6a9e23dac21b8a4c124689723 (diff)
downloadgitea-4aba8a6a5ff96f0995ada7e183c7864f8f5bc05c.tar.gz
gitea-4aba8a6a5ff96f0995ada7e183c7864f8f5bc05c.zip
Split lfs size from repository size (#22900)
releated to #21820 - Split `Size` in repository table as two new colunms, one is `GitSize` for git size, the other is `LFSSize` for lfs data. still store full size in `Size` colunm. - Show full size on ui, but show each of them by a `title`; example: ![image](https://user-images.githubusercontent.com/25342410/218636251-e200f085-d7e7-4a25-9ff1-b586a63e07a9.png) - Return full size in api response. --------- Signed-off-by: a1012112796 <1012112796@qq.com> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: silverwind <me@silverwind.io> Co-authored-by: DmitryFrolovTri <23313323+DmitryFrolovTri@users.noreply.github.com> Co-authored-by: Giteabot <teabot@gitea.io>
Diffstat (limited to 'models/repo')
-rw-r--r--models/repo/repo.go39
-rw-r--r--models/repo/update.go8
2 files changed, 44 insertions, 3 deletions
diff --git a/models/repo/repo.go b/models/repo/repo.go
index d3e6daa95b..b7c02057c2 100644
--- a/models/repo/repo.go
+++ b/models/repo/repo.go
@@ -16,6 +16,7 @@ import (
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/unit"
user_model "code.gitea.io/gitea/models/user"
+ "code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/markup"
"code.gitea.io/gitea/modules/setting"
@@ -163,6 +164,8 @@ type Repository struct {
IsTemplate bool `xorm:"INDEX NOT NULL DEFAULT false"`
TemplateID int64 `xorm:"INDEX"`
Size int64 `xorm:"NOT NULL DEFAULT 0"`
+ GitSize int64 `xorm:"NOT NULL DEFAULT 0"`
+ LFSSize int64 `xorm:"NOT NULL DEFAULT 0"`
CodeIndexerStatus *RepoIndexerStatus `xorm:"-"`
StatsIndexerStatus *RepoIndexerStatus `xorm:"-"`
IsFsckEnabled bool `xorm:"NOT NULL DEFAULT true"`
@@ -196,6 +199,42 @@ func (repo *Repository) SanitizedOriginalURL() string {
return u.String()
}
+// text representations to be returned in SizeDetail.Name
+const (
+ SizeDetailNameGit = "git"
+ SizeDetailNameLFS = "lfs"
+)
+
+type SizeDetail struct {
+ Name string
+ Size int64
+}
+
+// SizeDetails forms a struct with various size details about repository
+func (repo *Repository) SizeDetails() []SizeDetail {
+ sizeDetails := []SizeDetail{
+ {
+ Name: SizeDetailNameGit,
+ Size: repo.GitSize,
+ },
+ {
+ Name: SizeDetailNameLFS,
+ Size: repo.LFSSize,
+ },
+ }
+ return sizeDetails
+}
+
+// SizeDetailsString returns a concatenation of all repository size details as a string
+func (repo *Repository) SizeDetailsString() string {
+ var str strings.Builder
+ sizeDetails := repo.SizeDetails()
+ for _, detail := range sizeDetails {
+ str.WriteString(fmt.Sprintf("%s: %s, ", detail.Name, base.FileSize(detail.Size)))
+ }
+ return strings.TrimSuffix(str.String(), ", ")
+}
+
func (repo *Repository) LogString() string {
if repo == nil {
return "<Repository nil>"
diff --git a/models/repo/update.go b/models/repo/update.go
index 4894e0a1b9..c4fba32ad2 100644
--- a/models/repo/update.go
+++ b/models/repo/update.go
@@ -185,9 +185,11 @@ func ChangeRepositoryName(doer *user_model.User, repo *Repository, newRepoName s
}
// UpdateRepoSize updates the repository size, calculating it using getDirectorySize
-func UpdateRepoSize(ctx context.Context, repoID, size int64) error {
- _, err := db.GetEngine(ctx).ID(repoID).Cols("size").NoAutoTime().Update(&Repository{
- Size: size,
+func UpdateRepoSize(ctx context.Context, repoID, gitSize, lfsSize int64) error {
+ _, err := db.GetEngine(ctx).ID(repoID).Cols("size", "git_size", "lfs_size").NoAutoTime().Update(&Repository{
+ Size: gitSize + lfsSize,
+ GitSize: gitSize,
+ LFSSize: lfsSize,
})
return err
}