code.gitea.io/gitea@v1.19.3/modules/git/tree_blob_gogit.go (about) 1 // Copyright 2015 The Gogs Authors. All rights reserved. 2 // Copyright 2019 The Gitea Authors. All rights reserved. 3 // SPDX-License-Identifier: MIT 4 5 //go:build gogit 6 7 package git 8 9 import ( 10 "path" 11 "strings" 12 13 "github.com/go-git/go-git/v5/plumbing" 14 "github.com/go-git/go-git/v5/plumbing/filemode" 15 "github.com/go-git/go-git/v5/plumbing/object" 16 ) 17 18 // GetTreeEntryByPath get the tree entries according the sub dir 19 func (t *Tree) GetTreeEntryByPath(relpath string) (*TreeEntry, error) { 20 if len(relpath) == 0 { 21 return &TreeEntry{ 22 ID: t.ID, 23 // Type: ObjectTree, 24 gogitTreeEntry: &object.TreeEntry{ 25 Name: "", 26 Mode: filemode.Dir, 27 Hash: t.ID, 28 }, 29 }, nil 30 } 31 32 relpath = path.Clean(relpath) 33 parts := strings.Split(relpath, "/") 34 var err error 35 tree := t 36 for i, name := range parts { 37 if i == len(parts)-1 { 38 entries, err := tree.ListEntries() 39 if err != nil { 40 if err == plumbing.ErrObjectNotFound { 41 return nil, ErrNotExist{ 42 RelPath: relpath, 43 } 44 } 45 return nil, err 46 } 47 for _, v := range entries { 48 if v.Name() == name { 49 return v, nil 50 } 51 } 52 } else { 53 tree, err = tree.SubTree(name) 54 if err != nil { 55 if err == plumbing.ErrObjectNotFound { 56 return nil, ErrNotExist{ 57 RelPath: relpath, 58 } 59 } 60 return nil, err 61 } 62 } 63 } 64 return nil, ErrNotExist{"", relpath} 65 }