forked from tangled.org/core
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, path) 37 } 38 } 39 40 return files, nil 41} 42 43func (g *GitRepo) makeNiceTree(t *object.Tree, parent string) []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 var fpath string 51 if parent != "" { 52 fpath = fmt.Sprintf("%s/%s", parent, e.Name) 53 } else { 54 fpath = e.Name 55 } 56 lastCommit, err := g.LastCommitForPath(fpath) 57 if err != nil { 58 fmt.Println("error getting last commit time:", err) 59 continue 60 } 61 62 nts = append(nts, types.NiceTree{ 63 Name: e.Name, 64 Mode: mode.String(), 65 IsFile: e.Mode.IsFile(), 66 Size: sz, 67 LastCommit: lastCommit, 68 }) 69 70 } 71 72 return nts 73}