gitea源码

tree_blob_nogogit.go 863B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // Copyright 2020 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. //go:build !gogit
  4. package git
  5. import (
  6. "path"
  7. "strings"
  8. )
  9. // GetTreeEntryByPath get the tree entries according the sub dir
  10. func (t *Tree) GetTreeEntryByPath(relpath string) (_ *TreeEntry, err error) {
  11. if len(relpath) == 0 {
  12. return &TreeEntry{
  13. ptree: t,
  14. ID: t.ID,
  15. name: "",
  16. entryMode: EntryModeTree,
  17. }, nil
  18. }
  19. relpath = path.Clean(relpath)
  20. parts := strings.Split(relpath, "/")
  21. tree := t
  22. for _, name := range parts[:len(parts)-1] {
  23. tree, err = tree.SubTree(name)
  24. if err != nil {
  25. return nil, err
  26. }
  27. }
  28. name := parts[len(parts)-1]
  29. entries, err := tree.ListEntries()
  30. if err != nil {
  31. return nil, err
  32. }
  33. for _, v := range entries {
  34. if v.Name() == name {
  35. return v, nil
  36. }
  37. }
  38. return nil, ErrNotExist{"", relpath}
  39. }