code.gitea.io/gitea@v1.19.3/modules/git/tree_blob_nogogit.go (about) 1 // Copyright 2020 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 //go:build !gogit 5 6 package git 7 8 import ( 9 "path" 10 "strings" 11 ) 12 13 // GetTreeEntryByPath get the tree entries according the sub dir 14 func (t *Tree) GetTreeEntryByPath(relpath string) (*TreeEntry, error) { 15 if len(relpath) == 0 { 16 return &TreeEntry{ 17 ptree: t, 18 ID: t.ID, 19 name: "", 20 fullName: "", 21 entryMode: EntryModeTree, 22 }, nil 23 } 24 25 // FIXME: This should probably use git cat-file --batch to be a bit more efficient 26 relpath = path.Clean(relpath) 27 parts := strings.Split(relpath, "/") 28 var err error 29 tree := t 30 for i, name := range parts { 31 if i == len(parts)-1 { 32 entries, err := tree.ListEntries() 33 if err != nil { 34 return nil, err 35 } 36 for _, v := range entries { 37 if v.Name() == name { 38 return v, nil 39 } 40 } 41 } else { 42 tree, err = tree.SubTree(name) 43 if err != nil { 44 return nil, err 45 } 46 } 47 } 48 return nil, ErrNotExist{"", relpath} 49 }