Stop using git count-objects and use raw directory size for repository (#8848)
* Migrate from git count-objects to a raw directory size * As per @guillep2k ignore unusual files
This commit is contained in:
parent
44ec9b933a
commit
ee1d64ddd1
4 changed files with 26 additions and 8 deletions
|
@ -60,9 +60,9 @@ func addRepoSize(x *xorm.Engine) (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
repoPath := filepath.Join(setting.RepoRootPath, strings.ToLower(user.Name), strings.ToLower(repo.Name)) + ".git"
|
repoPath := filepath.Join(setting.RepoRootPath, strings.ToLower(user.Name), strings.ToLower(repo.Name)) + ".git"
|
||||||
countObject, err := git.GetRepoSize(repoPath)
|
countObject, err := git.CountObjects(repoPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warn("GetRepoSize: %v", err)
|
log.Warn("CountObjects: %v", err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,7 @@ import (
|
||||||
api "code.gitea.io/gitea/modules/structs"
|
api "code.gitea.io/gitea/modules/structs"
|
||||||
"code.gitea.io/gitea/modules/sync"
|
"code.gitea.io/gitea/modules/sync"
|
||||||
"code.gitea.io/gitea/modules/timeutil"
|
"code.gitea.io/gitea/modules/timeutil"
|
||||||
|
"code.gitea.io/gitea/modules/util"
|
||||||
|
|
||||||
"github.com/mcuadros/go-version"
|
"github.com/mcuadros/go-version"
|
||||||
"github.com/unknwon/com"
|
"github.com/unknwon/com"
|
||||||
|
@ -708,17 +709,17 @@ func (repo *Repository) IsOwnedBy(userID int64) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (repo *Repository) updateSize(e Engine) error {
|
func (repo *Repository) updateSize(e Engine) error {
|
||||||
repoInfoSize, err := git.GetRepoSize(repo.repoPath(e))
|
size, err := util.GetDirectorySize(repo.repoPath(e))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("UpdateSize: %v", err)
|
return fmt.Errorf("UpdateSize: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
repo.Size = repoInfoSize.Size + repoInfoSize.SizePack
|
repo.Size = size
|
||||||
_, err = e.ID(repo.ID).Cols("size").Update(repo)
|
_, err = e.ID(repo.ID).Cols("size").Update(repo)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdateSize updates the repository size, calculating it using git.GetRepoSize
|
// UpdateSize updates the repository size, calculating it using util.GetDirectorySize
|
||||||
func (repo *Repository) UpdateSize() error {
|
func (repo *Repository) UpdateSize() error {
|
||||||
return repo.updateSize(x)
|
return repo.updateSize(x)
|
||||||
}
|
}
|
||||||
|
|
|
@ -304,8 +304,8 @@ const (
|
||||||
statSizeGarbage = "size-garbage: "
|
statSizeGarbage = "size-garbage: "
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetRepoSize returns disk consumption for repo in path
|
// CountObjects returns the results of git count-objects on the repoPath
|
||||||
func GetRepoSize(repoPath string) (*CountObject, error) {
|
func CountObjects(repoPath string) (*CountObject, error) {
|
||||||
cmd := NewCommand("count-objects", "-v")
|
cmd := NewCommand("count-objects", "-v")
|
||||||
stdout, err := cmd.RunInDir(repoPath)
|
stdout, err := cmd.RunInDir(repoPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -4,7 +4,10 @@
|
||||||
|
|
||||||
package util
|
package util
|
||||||
|
|
||||||
import "path/filepath"
|
import (
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
)
|
||||||
|
|
||||||
// EnsureAbsolutePath ensure that a path is absolute, making it
|
// EnsureAbsolutePath ensure that a path is absolute, making it
|
||||||
// relative to absoluteBase if necessary
|
// relative to absoluteBase if necessary
|
||||||
|
@ -14,3 +17,17 @@ func EnsureAbsolutePath(path string, absoluteBase string) string {
|
||||||
}
|
}
|
||||||
return filepath.Join(absoluteBase, path)
|
return filepath.Join(absoluteBase, path)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const notRegularFileMode os.FileMode = os.ModeDir | os.ModeSymlink | os.ModeNamedPipe | os.ModeSocket | os.ModeDevice | os.ModeCharDevice | os.ModeIrregular
|
||||||
|
|
||||||
|
// GetDirectorySize returns the dumb disk consumption for a given path
|
||||||
|
func GetDirectorySize(path string) (int64, error) {
|
||||||
|
var size int64
|
||||||
|
err := filepath.Walk(path, func(_ string, info os.FileInfo, err error) error {
|
||||||
|
if info != nil && (info.Mode()¬RegularFileMode) == 0 {
|
||||||
|
size += info.Size()
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
})
|
||||||
|
return size, err
|
||||||
|
}
|
||||||
|
|
Reference in a new issue