this repo has no description
1package git 2 3import ( 4 "fmt" 5 6 "github.com/go-git/go-git/v5/plumbing/object" 7) 8 9func (g *GitRepo) FileTree(path string) ([]NiceTree, error) { 10 c, err := g.r.CommitObject(g.h) 11 if err != nil { 12 return nil, fmt.Errorf("commit object: %w", err) 13 } 14 15 files := []NiceTree{} 16 tree, err := c.Tree() 17 if err != nil { 18 return nil, fmt.Errorf("file tree: %w", err) 19 } 20 21 if path == "" { 22 files = makeNiceTree(tree) 23 } else { 24 o, err := tree.FindEntry(path) 25 if err != nil { 26 return nil, err 27 } 28 29 if !o.Mode.IsFile() { 30 subtree, err := tree.Tree(path) 31 if err != nil { 32 return nil, err 33 } 34 35 files = makeNiceTree(subtree) 36 } 37 } 38 39 return files, nil 40} 41 42// A nicer git tree representation. 43type NiceTree struct { 44 Name string 45 Mode string 46 Size int64 47 IsFile bool 48 IsSubtree bool 49} 50 51func makeNiceTree(t *object.Tree) []NiceTree { 52 nts := []NiceTree{} 53 54 for _, e := range t.Entries { 55 mode, _ := e.Mode.ToOSFileMode() 56 sz, _ := t.Size(e.Name) 57 nts = append(nts, NiceTree{ 58 Name: e.Name, 59 Mode: mode.String(), 60 IsFile: e.Mode.IsFile(), 61 Size: sz, 62 }) 63 } 64 65 return nts 66}