1package tinygit23import (4 "context"5 "errors"6 "io/fs"7 "path/filepath"8)910// StorageInventory reports retained bytes for one accepted repository. It is11// deliberately derived from the local object store so the self-hosted result12// has no hosted fuel or quota fields.13func (g *GitRelay) StorageInventory(ctx context.Context, owner, identifier string) (map[string]any, error) {14 if err := ctx.Err(); err != nil {15 return nil, err16 }17 repo, err := g.lookup(owner, identifier)18 if err != nil {19 return nil, errors.New("not found: repository")20 }21 var files, bytes int6422 err = filepath.WalkDir(g.repoPath(repo), func(_ string, entry fs.DirEntry, walkErr error) error {23 if walkErr != nil {24 return walkErr25 }26 if entry.IsDir() {27 return nil28 }29 info, err := entry.Info()30 if err != nil {31 return err32 }33 files++34 bytes += info.Size()35 return nil36 })37 if err != nil {38 return nil, err39 }40 return map[string]any{41 "repository": map[string]any{"owner": owner, "identifier": identifier, "announcement": repo.EventID},42 "backend": "filesystem",43 "objects": map[string]any{"count": files, "rawBytes": bytes, "compressedBytes": bytes, "metadataBytes": int64(0)},44 "refs": len(repo.Refs),45 "receipts": 0,46 }, nil47}