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