s
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
package gitcmd
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type CountObjectsResult struct {
|
||||
Count int64 `json:"count"`
|
||||
Size int64 `json:"size"`
|
||||
InPack int64 `json:"in_pack"`
|
||||
Packs int64 `json:"packs"`
|
||||
SizePack int64 `json:"size_pack"`
|
||||
Garbage int64 `json:"garbage"`
|
||||
SizeGarbage int64 `json:"size_garbage"`
|
||||
}
|
||||
|
||||
func (c CountObjectsResult) TotalSize() int64 {
|
||||
return c.Size + c.SizePack
|
||||
}
|
||||
|
||||
func (r *Repository) CountObjects() (*CountObjectsResult, error) {
|
||||
out, _, err := NewCommand("count-objects", "-v").
|
||||
WithDir(r.Path).
|
||||
RunStdString(r.ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return parseCountObjects(out), nil
|
||||
}
|
||||
|
||||
func parseCountObjects(out string) *CountObjectsResult {
|
||||
res := &CountObjectsResult{}
|
||||
for _, line := range strings.Split(out, "\n") {
|
||||
key, val, ok := strings.Cut(line, ":")
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
n, _ := strconv.ParseInt(strings.TrimSpace(val), 10, 64)
|
||||
switch strings.TrimSpace(key) {
|
||||
case "count":
|
||||
res.Count = n
|
||||
case "size":
|
||||
res.Size = n * 1024
|
||||
case "in-pack":
|
||||
res.InPack = n
|
||||
case "packs":
|
||||
res.Packs = n
|
||||
case "size-pack":
|
||||
res.SizePack = n * 1024
|
||||
case "garbage":
|
||||
res.Garbage = n
|
||||
case "size-garbage":
|
||||
res.SizeGarbage = n * 1024
|
||||
}
|
||||
}
|
||||
return res
|
||||
}
|
||||
Reference in New Issue
Block a user