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  }