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