Skip to content
Merged
4 changes: 2 additions & 2 deletions models/migrations/v28.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
countObject, err := git.GetRepoSize(repoPath)
countObject, err := git.CountObjects(repoPath)
if err != nil {
log.Warn("GetRepoSize: %v", err)
log.Warn("CountObjects: %v", err)
continue
}

Expand Down
7 changes: 4 additions & 3 deletions models/repo.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import (
api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/modules/sync"
"code.gitea.io/gitea/modules/timeutil"
"code.gitea.io/gitea/modules/util"

"github.com/mcuadros/go-version"
"github.com/unknwon/com"
Expand Down Expand Up @@ -708,17 +709,17 @@ func (repo *Repository) IsOwnedBy(userID int64) bool {
}

func (repo *Repository) updateSize(e Engine) error {
repoInfoSize, err := git.GetRepoSize(repo.repoPath(e))
size, err := util.GetDirectorySize(repo.repoPath(e))
if err != nil {
return fmt.Errorf("UpdateSize: %v", err)
}

repo.Size = repoInfoSize.Size + repoInfoSize.SizePack
repo.Size = size
_, err = e.ID(repo.ID).Cols("size").Update(repo)
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 {
return repo.updateSize(x)
}
Expand Down
4 changes: 2 additions & 2 deletions modules/git/repo.go
Original file line number Diff line number Diff line change
Expand Up @@ -304,8 +304,8 @@ const (
statSizeGarbage = "size-garbage: "
)

// GetRepoSize returns disk consumption for repo in path
func GetRepoSize(repoPath string) (*CountObject, error) {
// CountObjects returns the results of git count-objects on the repoPath
func CountObjects(repoPath string) (*CountObject, error) {
cmd := NewCommand("count-objects", "-v")
stdout, err := cmd.RunInDir(repoPath)
if err != nil {
Expand Down
19 changes: 18 additions & 1 deletion modules/util/path.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@

package util

import "path/filepath"
import (
"os"
"path/filepath"
)

// EnsureAbsolutePath ensure that a path is absolute, making it
// relative to absoluteBase if necessary
Expand All @@ -14,3 +17,17 @@ func EnsureAbsolutePath(path string, absoluteBase string) string {
}
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()&notRegularFileMode) == 0 {
size += info.Size()
}
return err
})
return size, err
}