summaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
authorzeripath <art27@cantab.net>2019-11-10 21:33:47 +0000
committerGitHub <noreply@github.com>2019-11-10 21:33:47 +0000
commitee1d64ddd1456764de692fcdeb42db1398fcf97b (patch)
treebe5069e203bf34b42f1f5aee4fe387c8a6b305c6 /modules
parent44ec9b933afe7a7c84e18ff525f377240d8dd4f0 (diff)
downloadgitea-ee1d64ddd1456764de692fcdeb42db1398fcf97b.tar.gz
gitea-ee1d64ddd1456764de692fcdeb42db1398fcf97b.zip
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
Diffstat (limited to 'modules')
-rw-r--r--modules/git/repo.go4
-rw-r--r--modules/util/path.go19
2 files changed, 20 insertions, 3 deletions
diff --git a/modules/git/repo.go b/modules/git/repo.go
index 4c6690b913..80f6109772 100644
--- a/modules/git/repo.go
+++ b/modules/git/repo.go
@@ -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 {
diff --git a/modules/util/path.go b/modules/util/path.go
index f79334209c..2b198eb6dc 100644
--- a/modules/util/path.go
+++ b/modules/util/path.go
@@ -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
@@ -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
+}