This commit is contained in:
Jabberwocky238
2026-07-15 11:06:48 -04:00
commit c746f88bbe
69 changed files with 14975 additions and 0 deletions
+58
View File
@@ -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
}