repo_tag.go 882 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package database
  2. import (
  3. "github.com/cockroachdb/errors"
  4. "github.com/gogs/git-module"
  5. )
  6. type Tag struct {
  7. RepoPath string
  8. Name string
  9. IsProtected bool
  10. Commit *git.Commit
  11. }
  12. func (ta *Tag) GetCommit() (*git.Commit, error) {
  13. gitRepo, err := git.Open(ta.RepoPath)
  14. if err != nil {
  15. return nil, errors.Newf("open repository: %v", err)
  16. }
  17. return gitRepo.TagCommit(ta.Name)
  18. }
  19. func GetTagsByPath(path string) ([]*Tag, error) {
  20. gitRepo, err := git.Open(path)
  21. if err != nil {
  22. return nil, errors.Newf("open repository: %v", err)
  23. }
  24. names, err := gitRepo.Tags()
  25. if err != nil {
  26. return nil, errors.Newf("list tags: %v", err)
  27. }
  28. tags := make([]*Tag, len(names))
  29. for i := range names {
  30. tags[i] = &Tag{
  31. RepoPath: path,
  32. Name: names[i],
  33. }
  34. }
  35. return tags, nil
  36. }
  37. func (r *Repository) GetTags() ([]*Tag, error) {
  38. return GetTagsByPath(r.RepoPath())
  39. }