mirror of https://github.com/gogits/gogs.git
Unknown
11 years ago
8 changed files with 313 additions and 48 deletions
@ -0,0 +1,83 @@
|
||||
// Copyright 2014 The Gogs Authors. All rights reserved.
|
||||
// Use of this source code is governed by a MIT-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package models |
||||
|
||||
import ( |
||||
"errors" |
||||
"strings" |
||||
"time" |
||||
|
||||
"github.com/Unknwon/com" |
||||
"github.com/gogits/git" |
||||
) |
||||
|
||||
var ( |
||||
ErrReleaseAlreadyExist = errors.New("Release already exist") |
||||
) |
||||
|
||||
// Release represents a release of repository.
|
||||
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"` |
||||
} |
||||
|
||||
// GetReleasesByRepoId returns a list of releases of repository.
|
||||
func GetReleasesByRepoId(repoId int64) (rels []*Release, err error) { |
||||
err = orm.Desc("created").Find(&rels, Release{RepoId: repoId}) |
||||
return rels, err |
||||
} |
||||
|
||||
// IsReleaseExist returns true if release with given tag name already exists.
|
||||
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)}) |
||||
} |
||||
|
||||
// CreateRelease creates a new release of repository.
|
||||
func CreateRelease(repoPath string, rel *Release, gitRepo *git.Repository) error { |
||||
isExist, err := IsReleaseExist(rel.RepoId, rel.TagName) |
||||
if err != nil { |
||||
return err |
||||
} else if isExist { |
||||
return ErrReleaseAlreadyExist |
||||
} |
||||
|
||||
if !git.IsTagExist(repoPath, rel.TagName) { |
||||
_, stderr, err := com.ExecCmdDir(repoPath, "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 |
||||
} |
@ -0,0 +1,50 @@
|
||||
// Copyright 2014 The Gogs Authors. All rights reserved.
|
||||
// Use of this source code is governed by a MIT-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package auth |
||||
|
||||
import ( |
||||
"net/http" |
||||
"reflect" |
||||
|
||||
"github.com/go-martini/martini" |
||||
|
||||
"github.com/gogits/gogs/modules/base" |
||||
"github.com/gogits/gogs/modules/log" |
||||
) |
||||
|
||||
type NewReleaseForm struct { |
||||
TagName string `form:"tag_name" binding:"Required"` |
||||
Title string `form:"title" binding:"Required"` |
||||
Content string `form:"content" binding:"Required"` |
||||
Prerelease bool `form:"prerelease"` |
||||
} |
||||
|
||||
func (f *NewReleaseForm) Name(field string) string { |
||||
names := map[string]string{ |
||||
"TagName": "Tag name", |
||||
"Title": "Release title", |
||||
"Content": "Release content", |
||||
} |
||||
return names[field] |
||||
} |
||||
|
||||
func (f *NewReleaseForm) Validate(errors *base.BindingErrors, req *http.Request, context martini.Context) { |
||||
if req.Method == "GET" || errors.Count() == 0 { |
||||
return |
||||
} |
||||
|
||||
data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) |
||||
data["HasError"] = true |
||||
AssignForm(f, data) |
||||
|
||||
if len(errors.Overall) > 0 { |
||||
for _, err := range errors.Overall { |
||||
log.Error("NewReleaseForm.Validate: %v", err) |
||||
} |
||||
return |
||||
} |
||||
|
||||
validate(errors, data, f) |
||||
} |
Loading…
Reference in new issue