mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	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:  - 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>
This commit is contained in:
		@@ -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>"
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user