}
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
}
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"
}
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)
}
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 {
package util
-import "path/filepath"
+import (
+ "os"
+ "path/filepath"
+)
// EnsureAbsolutePath ensure that a path is absolute, making it
// relative to absoluteBase if necessary
}
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
+}