release.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // Copyright 2014 The Gogs Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package models
  5. import (
  6. "errors"
  7. "strings"
  8. "time"
  9. // "github.com/Unknwon/com"
  10. "github.com/gogits/git"
  11. )
  12. var (
  13. ErrReleaseAlreadyExist = errors.New("Release already exist")
  14. )
  15. // Release represents a release of repository.
  16. type Release struct {
  17. Id int64
  18. RepoId int64
  19. PublisherId int64
  20. Publisher *User `xorm:"-"`
  21. Title string
  22. TagName string
  23. LowerTagName string
  24. Target string
  25. Sha1 string `xorm:"VARCHAR(40)"`
  26. NumCommits int
  27. NumCommitsBehind int `xorm:"-"`
  28. Note string `xorm:"TEXT"`
  29. IsPrerelease bool
  30. Created time.Time `xorm:"created"`
  31. }
  32. // GetReleasesByRepoId returns a list of releases of repository.
  33. func GetReleasesByRepoId(repoId int64) (rels []*Release, err error) {
  34. err = orm.Desc("created").Find(&rels, Release{RepoId: repoId})
  35. return rels, err
  36. }
  37. // IsReleaseExist returns true if release with given tag name already exists.
  38. func IsReleaseExist(repoId int64, tagName string) (bool, error) {
  39. if len(tagName) == 0 {
  40. return false, nil
  41. }
  42. return orm.Get(&Release{RepoId: repoId, LowerTagName: strings.ToLower(tagName)})
  43. }
  44. // CreateRelease creates a new release of repository.
  45. func CreateRelease(gitRepo *git.Repository, rel *Release) error {
  46. isExist, err := IsReleaseExist(rel.RepoId, rel.TagName)
  47. if err != nil {
  48. return err
  49. } else if isExist {
  50. return ErrReleaseAlreadyExist
  51. }
  52. if !gitRepo.IsTagExist(rel.TagName) {
  53. commit, err := gitRepo.GetCommitOfBranch(rel.Target)
  54. if err != nil {
  55. return err
  56. }
  57. if err = gitRepo.CreateTag(rel.TagName, commit.Id.String()); err != nil {
  58. return err
  59. }
  60. } else {
  61. commit, err := gitRepo.GetCommitOfTag(rel.TagName)
  62. if err != nil {
  63. return err
  64. }
  65. rel.NumCommits, err = commit.CommitsCount()
  66. if err != nil {
  67. return err
  68. }
  69. }
  70. rel.LowerTagName = strings.ToLower(rel.TagName)
  71. _, err = orm.InsertOne(rel)
  72. return err
  73. }