1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- package models
- import (
- "errors"
- "strings"
- "time"
- "github.com/Unknwon/com"
- "github.com/gogits/git"
- )
- var (
- ErrReleaseAlreadyExist = errors.New("Release already exist")
- )
- type Release struct {
- Id int64
- RepoId int64
- PublisherId int64
- Publisher *User `xorm:"-"`
- Title string
- TagName string
- LowerTagName string
- SHA1 string
- NumCommits int
- NumCommitsBehind int `xorm:"-"`
- Note string `xorm:"TEXT"`
- IsPrerelease bool
- Created time.Time `xorm:"created"`
- }
- func GetReleasesByRepoId(repoId int64) (rels []*Release, err error) {
- err = orm.Desc("created").Find(&rels, Release{RepoId: repoId})
- return rels, err
- }
- func IsReleaseExist(repoId int64, tagName string) (bool, error) {
- if len(tagName) == 0 {
- return false, nil
- }
- return orm.Get(&Release{RepoId: repoId, LowerTagName: strings.ToLower(tagName)})
- }
- func CreateRelease(gitRepo *git.Repository, rel *Release) error {
- isExist, err := IsReleaseExist(rel.RepoId, rel.TagName)
- if err != nil {
- return err
- } else if isExist {
- return ErrReleaseAlreadyExist
- }
- if !gitRepo.IsTagExist(rel.TagName) {
- _, stderr, err := com.ExecCmdDir(gitRepo.Path, "git", "tag", rel.TagName, "-m", rel.Title)
- if err != nil {
- return err
- } else if strings.Contains(stderr, "fatal:") {
- return errors.New(stderr)
- }
- } else {
- commit, err := gitRepo.GetCommitOfTag(rel.TagName)
- if err != nil {
- return err
- }
- rel.NumCommits, err = commit.CommitsCount()
- if err != nil {
- return err
- }
- }
- rel.LowerTagName = strings.ToLower(rel.TagName)
- _, err = orm.InsertOne(rel)
- return err
- }
|