gitea源码

commit_submodule.go 1.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // Copyright 2024 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package git
  4. type SubmoduleWebLink struct {
  5. RepoWebLink, CommitWebLink string
  6. }
  7. // GetSubModules get all the submodules of current revision git tree
  8. func (c *Commit) GetSubModules() (*ObjectCache[*SubModule], error) {
  9. if c.submoduleCache != nil {
  10. return c.submoduleCache, nil
  11. }
  12. entry, err := c.GetTreeEntryByPath(".gitmodules")
  13. if err != nil {
  14. if _, ok := err.(ErrNotExist); ok {
  15. return nil, nil
  16. }
  17. return nil, err
  18. }
  19. rd, err := entry.Blob().DataAsync()
  20. if err != nil {
  21. return nil, err
  22. }
  23. defer rd.Close()
  24. // at the moment we do not strictly limit the size of the .gitmodules file because some users would have huge .gitmodules files (>1MB)
  25. c.submoduleCache, err = configParseSubModules(rd)
  26. if err != nil {
  27. return nil, err
  28. }
  29. return c.submoduleCache, nil
  30. }
  31. // GetSubModule gets the submodule by the entry name.
  32. // It returns "nil, nil" if the submodule does not exist, caller should always remember to check the "nil"
  33. func (c *Commit) GetSubModule(entryName string) (*SubModule, error) {
  34. modules, err := c.GetSubModules()
  35. if err != nil {
  36. return nil, err
  37. }
  38. if modules != nil {
  39. if module, has := modules.Get(entryName); has {
  40. return module, nil
  41. }
  42. }
  43. return nil, nil
  44. }