|
|
|
@ -11,7 +11,10 @@ import (
|
|
|
|
|
"os"
|
|
|
|
|
"path"
|
|
|
|
|
"path/filepath"
|
|
|
|
|
"strings"
|
|
|
|
|
"time"
|
|
|
|
|
|
|
|
|
|
"github.com/Unknwon/com"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// Repository represents a Git repository.
|
|
|
|
@ -198,3 +201,63 @@ func MoveFile(repoPath, oldTreeName, newTreeName string) error {
|
|
|
|
|
_, err := NewCommand("mv").AddArguments(oldTreeName, newTreeName).RunInDir(repoPath)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// CountObject represents repository count objects report
|
|
|
|
|
type CountObject struct {
|
|
|
|
|
Count int64
|
|
|
|
|
Size int64
|
|
|
|
|
InPack int64
|
|
|
|
|
Packs int64
|
|
|
|
|
SizePack int64
|
|
|
|
|
PrunePack int64
|
|
|
|
|
Garbage int64
|
|
|
|
|
SizeGarbage int64
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const (
|
|
|
|
|
statCount = "count: "
|
|
|
|
|
statSize = "size: "
|
|
|
|
|
statInpack = "in-pack: "
|
|
|
|
|
statPacks = "packs: "
|
|
|
|
|
statSizePack = "size-pack: "
|
|
|
|
|
statPrunePackage = "prune-package: "
|
|
|
|
|
statGarbage = "garbage: "
|
|
|
|
|
statSizeGarbage = "size-garbage: "
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// GetRepoSize returns disk consumption for repo in path
|
|
|
|
|
func GetRepoSize(repoPath string) (*CountObject, error) {
|
|
|
|
|
cmd := NewCommand("count-objects", "-v")
|
|
|
|
|
stdout, err := cmd.RunInDir(repoPath)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return parseSize(stdout), nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// parseSize parses the output from count-objects and return a CountObject
|
|
|
|
|
func parseSize(objects string) *CountObject {
|
|
|
|
|
repoSize := new(CountObject)
|
|
|
|
|
for _, line := range strings.Split(objects, "\n") {
|
|
|
|
|
switch {
|
|
|
|
|
case strings.HasPrefix(line, statCount):
|
|
|
|
|
repoSize.Count = com.StrTo(line[7:]).MustInt64()
|
|
|
|
|
case strings.HasPrefix(line, statSize):
|
|
|
|
|
repoSize.Size = com.StrTo(line[6:]).MustInt64() * 1024
|
|
|
|
|
case strings.HasPrefix(line, statInpack):
|
|
|
|
|
repoSize.InPack = com.StrTo(line[9:]).MustInt64()
|
|
|
|
|
case strings.HasPrefix(line, statPacks):
|
|
|
|
|
repoSize.Packs = com.StrTo(line[7:]).MustInt64()
|
|
|
|
|
case strings.HasPrefix(line, statSizePack):
|
|
|
|
|
repoSize.SizePack = com.StrTo(line[11:]).MustInt64() * 1024
|
|
|
|
|
case strings.HasPrefix(line, statPrunePackage):
|
|
|
|
|
repoSize.PrunePack = com.StrTo(line[16:]).MustInt64()
|
|
|
|
|
case strings.HasPrefix(line, statGarbage):
|
|
|
|
|
repoSize.Garbage = com.StrTo(line[9:]).MustInt64()
|
|
|
|
|
case strings.HasPrefix(line, statSizeGarbage):
|
|
|
|
|
repoSize.SizeGarbage = com.StrTo(line[14:]).MustInt64() * 1024
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return repoSize
|
|
|
|
|
}
|
|
|
|
|