tree_blob.go 929 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package git
  2. import (
  3. "path"
  4. "strings"
  5. )
  6. func (t *Tree) GetTreeEntryByPath(relpath string) (*TreeEntry, error) {
  7. if len(relpath) == 0 {
  8. return &TreeEntry{
  9. ID: t.ID,
  10. Type: OBJECT_TREE,
  11. mode: ENTRY_MODE_TREE,
  12. }, nil
  13. }
  14. relpath = path.Clean(relpath)
  15. parts := strings.Split(relpath, "/")
  16. var err error
  17. tree := t
  18. for i, name := range parts {
  19. if i == len(parts)-1 {
  20. entries, err := tree.ListEntries()
  21. if err != nil {
  22. return nil, err
  23. }
  24. for _, v := range entries {
  25. if v.name == name {
  26. return v, nil
  27. }
  28. }
  29. } else {
  30. tree, err = tree.SubTree(name)
  31. if err != nil {
  32. return nil, err
  33. }
  34. }
  35. }
  36. return nil, ErrNotExist{"", relpath}
  37. }
  38. func (t *Tree) GetBlobByPath(relpath string) (*Blob, error) {
  39. entry, err := t.GetTreeEntryByPath(relpath)
  40. if err != nil {
  41. return nil, err
  42. }
  43. if !entry.IsDir() {
  44. return entry.Blob(), nil
  45. }
  46. return nil, ErrNotExist{"", relpath}
  47. }