mirror of
https://github.com/go-gitea/gitea.git
synced 2026-10-23 08:03:42 +02:00
fix #1958
This commit is contained in:
1 parent
1a901433e2
commit
18de67380c
15 files changed
+417
-278
No files matched your search
@@ -5,7 +5,7 @@ Gogs - Go Git Service [
|
||||
|
||||
##### Current version: 0.7.11 Beta
|
||||
##### Current version: 0.7.12 Beta
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
|
||||
@@ -368,9 +368,7 @@ fork_from_self = You cannot fork repository you already owned!
|
||||
copy_link = Copy
|
||||
copy_link_success = Copied!
|
||||
copy_link_error = Press ⌘-C or Ctrl-C to copy
|
||||
click_to_copy = Copy to clipboard
|
||||
copied = Copied OK
|
||||
clone_helper = Need help cloning? Visit <a target="_blank" href="%s">Help</a>!
|
||||
unwatch = Unwatch
|
||||
watch = Watch
|
||||
unstar = Unstar
|
||||
@@ -634,21 +632,21 @@ release.stable = Stable
|
||||
release.edit = edit
|
||||
release.ahead = <strong>%d</strong> commits to %s since this release
|
||||
release.source_code = Source Code
|
||||
release.new_subheader = Publish releases to iterate product.
|
||||
release.edit_subheader = Detailed change log can help users understand what has been improved.
|
||||
release.tag_name = Tag name
|
||||
release.target = Target
|
||||
release.tag_helper = Choose an existing tag, or create a new tag on publish.
|
||||
release.release_title = Release title
|
||||
release.content_with_md = Content with <a href="%s">Markdown</a>
|
||||
release.write = Write
|
||||
release.preview = Preview
|
||||
release.content_placeholder = Write some content
|
||||
release.loading = Loading...
|
||||
release.title = Title
|
||||
release.content = Content
|
||||
release.prerelease_desc = This is a pre-release
|
||||
release.prerelease_helper = We’ll point out that this release is not production-ready.
|
||||
release.cancel = Cancel
|
||||
release.publish = Publish Release
|
||||
release.save_draft = Save Draft
|
||||
release.edit_release = Edit Release
|
||||
release.tag_name_already_exist = Release with this tag name has already existed.
|
||||
release.downloads = Downloads
|
||||
|
||||
[org]
|
||||
org_name_holder = Organization Name
|
||||
|
||||
@@ -17,7 +17,7 @@ import (
|
||||
"github.com/gogits/gogs/modules/setting"
|
||||
)
|
||||
|
||||
const APP_VER = "0.7.11.1115 Beta"
|
||||
const APP_VER = "0.7.12.1115 Beta"
|
||||
|
||||
func init() {
|
||||
runtime.GOMAXPROCS(runtime.NumCPU())
|
||||
|
||||
@@ -288,6 +288,32 @@ func (err ErrUpdateTaskNotExist) Error() string {
|
||||
return fmt.Sprintf("update task does not exist [uuid: %s]", err.UUID)
|
||||
}
|
||||
|
||||
type ErrReleaseAlreadyExist struct {
|
||||
TagName string
|
||||
}
|
||||
|
||||
func IsErrReleaseAlreadyExist(err error) bool {
|
||||
_, ok := err.(ErrReleaseAlreadyExist)
|
||||
return ok
|
||||
}
|
||||
|
||||
func (err ErrReleaseAlreadyExist) Error() string {
|
||||
return fmt.Sprintf("Release tag already exist [tag_name: %s]", err.TagName)
|
||||
}
|
||||
|
||||
type ErrReleaseNotExist struct {
|
||||
TagName string
|
||||
}
|
||||
|
||||
func IsErrReleaseNotExist(err error) bool {
|
||||
_, ok := err.(ErrReleaseNotExist)
|
||||
return ok
|
||||
}
|
||||
|
||||
func (err ErrReleaseNotExist) Error() string {
|
||||
return fmt.Sprintf("Release tag does not exist [tag_name: %s]", err.TagName)
|
||||
}
|
||||
|
||||
// __ __ ___. .__ __
|
||||
// / \ / \ ____\_ |__ | |__ ____ ____ | | __
|
||||
// \ \/\/ // __ \| __ \| | \ / _ \ / _ \| |/ /
|
||||
|
||||
+14
-20
@@ -5,7 +5,6 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"sort"
|
||||
"strings"
|
||||
"time"
|
||||
@@ -15,16 +14,11 @@ import (
|
||||
"github.com/gogits/gogs/modules/git"
|
||||
)
|
||||
|
||||
var (
|
||||
ErrReleaseAlreadyExist = errors.New("Release already exist")
|
||||
ErrReleaseNotExist = errors.New("Release does not exist")
|
||||
)
|
||||
|
||||
// Release represents a release of repository.
|
||||
type Release struct {
|
||||
Id int64
|
||||
RepoId int64
|
||||
PublisherId int64
|
||||
ID int64 `xorm:"pk autoincr"`
|
||||
RepoID int64
|
||||
PublisherID int64
|
||||
Publisher *User `xorm:"-"`
|
||||
TagName string
|
||||
LowerTagName string
|
||||
@@ -47,12 +41,12 @@ func (r *Release) AfterSet(colName string, _ xorm.Cell) {
|
||||
}
|
||||
|
||||
// IsReleaseExist returns true if release with given tag name already exists.
|
||||
func IsReleaseExist(repoId int64, tagName string) (bool, error) {
|
||||
func IsReleaseExist(repoID int64, tagName string) (bool, error) {
|
||||
if len(tagName) == 0 {
|
||||
return false, nil
|
||||
}
|
||||
|
||||
return x.Get(&Release{RepoId: repoId, LowerTagName: strings.ToLower(tagName)})
|
||||
return x.Get(&Release{RepoID: repoID, LowerTagName: strings.ToLower(tagName)})
|
||||
}
|
||||
|
||||
func createTag(gitRepo *git.Repository, rel *Release) error {
|
||||
@@ -84,11 +78,11 @@ func createTag(gitRepo *git.Repository, rel *Release) error {
|
||||
|
||||
// CreateRelease creates a new release of repository.
|
||||
func CreateRelease(gitRepo *git.Repository, rel *Release) error {
|
||||
isExist, err := IsReleaseExist(rel.RepoId, rel.TagName)
|
||||
isExist, err := IsReleaseExist(rel.RepoID, rel.TagName)
|
||||
if err != nil {
|
||||
return err
|
||||
} else if isExist {
|
||||
return ErrReleaseAlreadyExist
|
||||
return ErrReleaseAlreadyExist{rel.TagName}
|
||||
}
|
||||
|
||||
if err = createTag(gitRepo, rel); err != nil {
|
||||
@@ -100,22 +94,22 @@ func CreateRelease(gitRepo *git.Repository, rel *Release) error {
|
||||
}
|
||||
|
||||
// GetRelease returns release by given ID.
|
||||
func GetRelease(repoId int64, tagName string) (*Release, error) {
|
||||
isExist, err := IsReleaseExist(repoId, tagName)
|
||||
func GetRelease(repoID int64, tagName string) (*Release, error) {
|
||||
isExist, err := IsReleaseExist(repoID, tagName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else if !isExist {
|
||||
return nil, ErrReleaseNotExist
|
||||
return nil, ErrReleaseNotExist{tagName}
|
||||
}
|
||||
|
||||
rel := &Release{RepoId: repoId, LowerTagName: strings.ToLower(tagName)}
|
||||
rel := &Release{RepoID: repoID, LowerTagName: strings.ToLower(tagName)}
|
||||
_, err = x.Get(rel)
|
||||
return rel, err
|
||||
}
|
||||
|
||||
// GetReleasesByRepoId returns a list of releases of repository.
|
||||
func GetReleasesByRepoId(repoId int64) (rels []*Release, err error) {
|
||||
err = x.Desc("created").Find(&rels, Release{RepoId: repoId})
|
||||
func GetReleasesByRepoId(repoID int64) (rels []*Release, err error) {
|
||||
err = x.Desc("created").Find(&rels, Release{RepoID: repoID})
|
||||
return rels, err
|
||||
}
|
||||
|
||||
@@ -150,6 +144,6 @@ func UpdateRelease(gitRepo *git.Repository, rel *Release) (err error) {
|
||||
if err = createTag(gitRepo, rel); err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = x.Id(rel.Id).AllCols().Update(rel)
|
||||
_, err = x.Id(rel.ID).AllCols().Update(rel)
|
||||
return err
|
||||
}
|
||||
+1
-1
@@ -1116,7 +1116,7 @@ func DeleteRepository(uid, repoID int64) error {
|
||||
return err
|
||||
} else if _, err = sess.Delete(&Milestone{RepoID: repoID}); err != nil {
|
||||
return err
|
||||
} else if _, err = sess.Delete(&Release{RepoId: repoID}); err != nil {
|
||||
} else if _, err = sess.Delete(&Release{RepoID: repoID}); err != nil {
|
||||
return err
|
||||
} else if _, err = sess.Delete(&Collaboration{RepoID: repoID}); err != nil {
|
||||
return err
|
||||
|
||||
@@ -215,12 +215,12 @@ func (f *CreateLabelForm) Validate(ctx *macaron.Context, errs binding.Errors) bi
|
||||
// \/ \/ \/ \/ \/ \/
|
||||
|
||||
type NewReleaseForm struct {
|
||||
TagName string `form:"tag_name" binding:"Required"`
|
||||
TagName string `binding:"Required"`
|
||||
Target string `form:"tag_target" binding:"Required"`
|
||||
Title string `form:"title" binding:"Required"`
|
||||
Content string `form:"content" binding:"Required"`
|
||||
Draft string `form:"draft"`
|
||||
Prerelease bool `form:"prerelease"`
|
||||
Title string `binding:"Required"`
|
||||
Content string
|
||||
Draft string
|
||||
Prerelease bool
|
||||
}
|
||||
|
||||
func (f *NewReleaseForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {
|
||||
|
||||
@@ -4364,7 +4364,7 @@ func confLocaleLocale_deDeIni() (*asset, error) {
|
||||
return a, nil
|
||||
}
|
||||
|
||||
var _confLocaleLocale_enUsIni = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xbc\x7d\xeb\x72\xdc\x48\xae\xe6\x7f\x3e\x05\xdb\x27\x1c\xb6\x23\xe4\x72\x74\xf7\xde\xa2\xa3\xed\x5e\x59\x6a\x5f\xe6\x58\x96\xc6\x52\xcf\x6c\xaf\xc3\xc1\x66\x15\x59\x55\x1c\x57\x91\xd5\x24\xcb\xb2\xe6\xc4\x89\xd8\x07\xd8\x07\xd8\x7d\xbd\xf3\x24\x0b\x7c\x00\xf2\x42\xb2\x24\xbb\x67\x62\xfd\xc3\x62\x65\x22\x6f\x48\x24\x12\x89\x04\x90\xf9\x6e\x97\x15\x65\xb7\x48\x9f\xa6\xc7\xe9\x2e\xaf\xea\x4d\xd9\x75\x69\x57\x6e\x96\x8f\xd7\x4d\xd7\x97\x45\xfa\xb2\xea\xe9\x77\xfb\xa9\x5a\x94\x49\xb2\x6e\xb6\x25\x81\xbe\xa2\x3f\x49\x91\x77\xeb\x79\x93\xb7\x05\x25\x9c\xda\x77\x52\x7e\xde\x6d\x9a\x96\x81\x7e\x96\xaf\x64\x5d\x6e\x76\x5c\x86\xfe\x24\x5d\xb5\xaa\xb3\xaa\xa6\x9f\x97\xf4\x95\xbe\xae\x25\xa5\xd9\xf7\x96\x74\xbe\xef\x25\x6d\xbf\xb3\xa4\x5f\x76\x49\x5b\xae\x2a\xea\x4d\x4b\x49\xef\xf4\x33\xb9\x2e\xe7\x5d\xd5\x73\x4b\x7f\x95\xaf\xe4\x53\xd9\x76\x55\xc3\xb5\xff\x45\xbe\x92\x5d\xbe\x62\x80\x0b\xfa\x93\xf4\xe5\x76\xb7\xc9\x51\xe0\x4a\x3f\x93\x4d\x5e\xaf\xf6\x02\xf3\x46\x3f\x93\x45\x5b\x52\x56\x56\x97\xd7\x94\x7a\x82\x1f\xb3\xd9\x2c\xd9\x13\x12\xb2\x5d\xdb\x2c\xab\x4d\x99\xe5\x75\x91\x6d\x65\x98\xbf\x50\x7a\xaa\xe9\x29\xa5\xa7\x9c\x8e\x21\x94\x05\x0d\x35\xcb\x3b\x1d\x07\xe1\x92\x46\x9e\x77\x09\xaa\xaa\xf3\xad\x95\xe6\xcf\xa4\xdc\xe6\xd5\x86\xb1\xf6\x98\x3f\xa8\xe3\x5d\x77\xdd\x00\xb7\x17\xfa\x49\x48\xc8\xfa\x9b\x5d\x09\x1c\x3c\xbe\xa2\xaf\x64\x91\xef\xfa\xc5\x3a\xe7\x7e\xca\x57\x42\x40\xbb\x86\x90\xd1\xb4\x37\x80\xb3\x1f\x49\xd3\xae\xf2\xba\xfa\x7b\xde\x0b\x82\xce\x83\x9f\xc9\xb6\x6a\xdb\x86\x71\x7b\x86\x8f\x84\x86\x9e\x71\x3d\x94\xf2\x96\xb0\x10\xd4\xc2\x39\xdb\x6a\xd5\x0a\x1a\x39\xf3\x0c\xbf\xb8\x16\xce\x5b\x36\xed\x47\xcd\x78\xc1\x9f\x83\xa2\xd4\x09\xcd\x8d\xdb\xcf\x6b\x42\xbc\xe6\x9e\xe1\x47\x04\xd0\x25\x79\xb1\x25\x54\xee\xf2\xba\x64\x1c\x1d\xf3\x2f\xc2\x0b\xfd\x4a\xf2\xc5\xa2\xd9\xd7\x7d\xd6\x95\x7d\x5f\xd5\x2b\x46\xf6\xb1\x24\xa5\x97\x9a\x94\x04\x79\x2e\xed\xa6\xd9\xbb\xe9\xa4\xf4\x5f\xe9\x67\x7a\x21\x3f\x25\x2f\x28\x84\x4c\x57\x92\x47\xd2\x65\xcb\xb2\x2c\x64\x2c\x5d\xfa\x82\xbe\x93\xdd\x7e\xb3\x21\xac\xfd\xbe\x2f\xbb\x9e\x0b\x5d\xd0\x6f\x1a\xbf\xfc\x4e\xaa\xae\xa3\x0f\x4a\x7e\x8d\x8f\x84\xa6\xae\x5e\x60\x30\x27\xf8\x48\x92\xf7\x5d\x99\xb7\x8b\xf5\x87\x44\xfe\xa2\xaf\xfc\xc1\xb4\x77\x68\x52\x99\x90\x94\x88\xa4\x05\x6b\x20\x59\x34\x05\xff\x38\xa1\x3f\x54\x75\x55\x77\x7d\xbe\xd9\x7c\x48\xf4\x83\xc1\xe4\x4b\x26\xa0\xaf\x7a\x60\x41\x13\xd3\xcb\xbe\xdc\x75\x3c\x83\xe9\x8b\xaa\xed\xfa\xc7\x7d\x45\xc4\xfa\x6e\x5f\x27\x45\xb3\xf8\x48\xcb\x80\x97\x34\x5a\x7e\xbd\x4c\x09\x59\x0f\x68\x21\xb4\xfb\xba\x26\xf4\xa4\x2f\x1b\x42\x19\x35\x53\x51\xfb\xa7\x80\x3e\x4a\x77\x9b\x32\xef\x08\xa4\xcc\x8b\xf4\xc7\x3c\xed\xf3\x76\x55\xf6\x4f\xef\x65\x73\x5a\x7e\x1f\xef\xa5\xeb\xb6\x5c\x3e\xbd\x77\xbf\xbb\xf7\xec\xe5\x9e\x8a\x6d\xaa\xba\xec\x7e\x7c\x92\x3f\x4b\x17\x39\xe5\x10\x1a\x6f\xd2\x79\xb9\xe4\xd5\x46\x6d\xa5\x44\xe5\xf5\x8a\x57\xda\x4d\xbf\xe6\x06\x89\x12\xe8\xa3\x4b\x79\xa9\x7f\x93\xf0\x04\x10\x2b\xc8\x8a\xb9\xb1\x35\x74\x08\xc9\x2d\x4d\xc0\xd9\xcd\xe5\x9f\xdf\x1c\xa5\x17\xc4\xdb\x56\x6d\x89\x6f\xfa\x8f\x4a\x7c\x9f\xd2\x68\xaf\xaa\xd3\xe7\xb3\x84\xca\x1a\x42\x4e\xf3\x3e\x9f\x73\xdf\xdd\xec\x73\xa6\x2c\x42\x97\x87\xa5\xc8\xdc\x12\x9c\xb1\xeb\xa3\x69\x99\x5a\xc8\x54\x87\x2e\x7f\x57\xc7\x5b\xe6\x01\x94\xee\x30\x7b\x21\x38\xa3\xaa\xd2\xd7\x6f\xdf\x9e\x9f\x3e\x4f\xcb\x7a\x45\x98\x49\xaf\xab\x7e\x9d\xee\xfb\xe5\x7f\xcb\x56\x65\x5d\xb6\xf9\x26\x5b\x54\x8c\x94\x96\x08\x36\x25\x2c\xc9\x10\x67\x49\xd7\x6d\x88\x45\x81\x0a\x2e\x2f\xdf\xa4\x67\x4c\x09\xbb\xbc\x5f\xa3\x23\xfd\x3a\xe9\x7e\xdf\x30\xa2\x5c\x83\x57\xeb\x32\xc5\x62\x00\x50\xb3\x1c\xe2\x25\x2d\xb4\xaf\xb3\xa4\x6c\xdb\x8c\x38\x68\x7f\xc3\x68\xd6\x3a\x0f\x41\x4b\x75\x44\xed\x75\xd3\xd3\x34\xa6\x28\x27\x55\x54\xf5\xa7\x7c\x53\x15\x84\x6c\x8f\x90\xb8\x2c\x12\x8b\x86\xe6\x8d\x4b\x13\x65\x36\xd7\x18\x6a\xbe\xa0\x0d\xa0\x4b\xef\xcd\xee\x81\xe3\xde\x7b\x7c\x6f\x96\xd4\x4d\x26\x5c\x82\x79\x73\x51\x75\xf9\x9c\xf8\xb4\xec\x1b\xad\x71\xbd\x5f\x99\x7e\xa4\x2b\x0a\x91\x46\x10\x8c\x5b\xde\x8b\xb0\x05\x30\x71\xe5\xc4\xb0\xc1\x6c\x94\xcd\x84\x63\x37\x9e\xe4\xe6\x57\xd8\x92\x4b\x18\x8d\x39\xb1\x09\x33\xea\x3a\xde\xed\x36\xd5\x42\x9a\x7e\x29\x79\x9e\xd0\x78\x67\x56\xa4\x84\x70\x20\x14\xcb\x0b\xc8\x85\x7a\xcd\x6c\x2b\x8d\xf8\x3c\xca\xaf\x4b\x5a\x39\xeb\xfd\x4a\x76\xa7\x4d\xb3\x2f\xbe\x01\x43\xb1\x99\xf3\xfc\x24\x7d\xd7\x50\x87\x41\x1d\x0e\xc0\x37\x71\x4c\x8c\x81\x85\x81\xb6\xdc\x36\x3d\x23\x4e\x8b\x55\x34\x3d\xd7\x15\x65\xd2\x48\xbb\xfc\x13\xb1\xc5\xbe\x91\x25\x59\xd0\x92\x5b\x70\xc5\xc4\xc1\xf6\xb4\xa3\xcb\xb2\x20\x3e\x22\x4b\xc3\xd2\x62\x1a\x04\xd4\x76\x4f\xab\x69\x4d\x95\x31\xe2\x59\x22\xa1\x2a\xa7\xfa\x89\x21\x51\x3d\x58\xe5\xb4\x72\x1b\xda\x3c\x79\xa2\x4f\xf1\xa1\xbf\xc3\xfa\xa9\x57\xf9\x72\x49\xbd\xea\x68\x55\xbc\x4a\x17\x9b\x86\x96\xd4\x2f\xef\xde\x74\xbc\x60\xd6\xd9\xae\x69\x21\x89\x50\xd6\x05\x7d\xba\xb4\x00\xd1\x0c\x51\xef\xb7\x73\xfa\x75\xbd\xae\x88\x51\x03\xed\x5c\x82\xa5\x24\x4a\xa5\x26\xf6\x1d\x4d\xe1\x51\x4a\x4b\x98\x4Line truncated
|
||||
var _confLocaleLocale_enUsIni = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xbc\x7d\xeb\x72\xdc\x48\xae\xe6\x7f\x3e\x05\xdb\x27\x1c\xb6\x23\xe4\x72\x74\xf7\xde\xa2\xa3\xed\x5e\x59\x6a\x5f\xe6\x58\x96\xc6\x52\xcf\x6c\xaf\xc3\xc1\x66\x15\x59\x55\x1c\x57\x91\xd5\x24\xcb\xb2\xe6\xc4\x89\xd8\x07\xd8\x07\xd8\x7d\xbd\xf3\x24\x0b\x7c\x00\xf2\x42\xb2\x24\xbb\x67\x62\xfd\xc3\x62\x65\x22\x6f\x48\x24\x12\x89\x04\x90\xf9\x6e\x97\x15\x65\xb7\x48\x9f\xa6\xc7\xe9\x2e\xaf\xea\x4d\xd9\x75\x69\x57\x6e\x96\x8f\xd7\x4d\xd7\x97\x45\xfa\xb2\xea\xe9\x77\xfb\xa9\x5a\x94\x49\xb2\x6e\xb6\x25\x81\xbe\xa2\x3f\x49\x91\x77\xeb\x79\x93\xb7\x05\x25\x9c\xda\x77\x52\x7e\xde\x6d\x9a\x96\x81\x7e\x96\xaf\x64\x5d\x6e\x76\x5c\x86\xfe\x24\x5d\xb5\xaa\xb3\xaa\xa6\x9f\x97\xf4\x95\xbe\xae\x25\xa5\xd9\xf7\x96\x74\xbe\xef\x25\x6d\xbf\xb3\xa4\x5f\x76\x49\x5b\xae\x2a\xea\x4d\x4b\x49\xef\xf4\x33\xb9\x2e\xe7\x5d\xd5\x73\x4b\x7f\x95\xaf\xe4\x53\xd9\x76\x55\xc3\xb5\xff\x45\xbe\x92\x5d\xbe\x62\x80\x0b\xfa\x93\xf4\xe5\x76\xb7\xc9\x51\xe0\x4a\x3f\x93\x4d\x5e\xaf\xf6\x02\xf3\x46\x3f\x93\x45\x5b\x52\x56\x56\x97\xd7\x94\x7a\x82\x1f\xb3\xd9\x2c\xd9\x13\x12\xb2\x5d\xdb\x2c\xab\x4d\x99\xe5\x75\x91\x6d\x65\x98\xbf\x50\x7a\xaa\xe9\x29\xa5\xa7\x9c\x8e\x21\x94\x05\x0d\x35\xcb\x3b\x1d\x07\xe1\x92\x46\x9e\x77\x09\xaa\xaa\xf3\xad\x95\xe6\xcf\xa4\xdc\xe6\xd5\x86\xb1\xf6\x98\x3f\xa8\xe3\x5d\x77\xdd\x00\xb7\x17\xfa\x49\x48\xc8\xfa\x9b\x5d\x09\x1c\x3c\xbe\xa2\xaf\x64\x91\xef\xfa\xc5\x3a\xe7\x7e\xca\x57\x42\x40\xbb\x86\x90\xd1\xb4\x37\x80\xb3\x1f\x49\xd3\xae\xf2\xba\xfa\x7b\xde\x0b\x82\xce\x83\x9f\xc9\xb6\x6a\xdb\x86\x71\x7b\x86\x8f\x84\x86\x9e\x71\x3d\x94\xf2\x96\xb0\x10\xd4\xc2\x39\xdb\x6a\xd5\x0a\x1a\x39\xf3\x0c\xbf\xb8\x16\xce\x5b\x36\xed\x47\xcd\x78\xc1\x9f\x83\xa2\xd4\x09\xcd\x8d\xdb\xcf\x6b\x42\xbc\xe6\x9e\xe1\x47\x04\xd0\x25\x79\xb1\x25\x54\xee\xf2\xba\x64\x1c\x1d\xf3\x2f\xc2\x0b\xfd\x4a\xf2\xc5\xa2\xd9\xd7\x7d\xd6\x95\x7d\x5f\xd5\x2b\x46\xf6\xb1\x24\xa5\x97\x9a\x94\x04\x79\x2e\xed\xa6\xd9\xbb\xe9\xa4\xf4\x5f\xe9\x67\x7a\x21\x3f\x25\x2f\x28\x84\x4c\x57\x92\x47\xd2\x65\xcb\xb2\x2c\x64\x2c\x5d\xfa\x82\xbe\x93\xdd\x7e\xb3\x21\xac\xfd\xbe\x2f\xbb\x9e\x0b\x5d\xd0\x6f\x1a\xbf\xfc\x4e\xaa\xae\xa3\x0f\x4a\x7e\x8d\x8f\x84\xa6\xae\x5e\x60\x30\x27\xf8\x48\x92\xf7\x5d\x99\xb7\x8b\xf5\x87\x44\xfe\xa2\xaf\xfc\xc1\xb4\x77\x68\x52\x99\x90\x94\x88\xa4\x05\x6b\x20\x59\x34\x05\xff\x38\xa1\x3f\x54\x75\x55\x77\x7d\xbe\xd9\x7c\x48\xf4\x83\xc1\xe4\x4b\x26\xa0\xaf\x7a\x60\x41\x13\xd3\xcb\xbe\xdc\x75\x3c\x83\xe9\x8b\xaa\xed\xfa\xc7\x7d\x45\xc4\xfa\x6e\x5f\x27\x45\xb3\xf8\x48\xcb\x80\x97\x34\x5a\x7e\xbd\x4c\x09\x59\x0f\x68\x21\xb4\xfb\xba\x26\xf4\xa4\x2f\x1b\x42\x19\x35\x53\x51\xfb\xa7\x80\x3e\x4a\x77\x9b\x32\xef\x08\xa4\xcc\x8b\xf4\xc7\x3c\xed\xf3\x76\x55\xf6\x4f\xef\x65\x73\x5a\x7e\x1f\xef\xa5\xeb\xb6\x5c\x3e\xbd\x77\xbf\xbb\xf7\xec\xe5\x9e\x8a\x6d\xaa\xba\xec\x7e\x7c\x92\x3f\x4b\x17\x39\xe5\x10\x1a\x6f\xd2\x79\xb9\xe4\xd5\x46\x6d\xa5\x44\xe5\xf5\x8a\x57\xda\x4d\xbf\xe6\x06\x89\x12\xe8\xa3\x4b\x79\xa9\x7f\x93\xf0\x04\x10\x2b\xc8\x8a\xb9\xb1\x35\x74\x08\xc9\x2d\x4d\xc0\xd9\xcd\xe5\x9f\xdf\x1c\xa5\x17\xc4\xdb\x56\x6d\x89\x6f\xfa\x8f\x4a\x7c\x9f\xd2\x68\xaf\xaa\xd3\xe7\xb3\x84\xca\x1a\x42\x4e\xf3\x3e\x9f\x73\xdf\xdd\xec\x73\xa6\x2c\x42\x97\x87\xa5\xc8\xdc\x12\x9c\xb1\xeb\xa3\x69\x99\x5a\xc8\x54\x87\x2e\x7f\x57\xc7\x5b\xe6\x01\x94\xee\x30\x7b\x21\x38\xa3\xaa\xd2\xd7\x6f\xdf\x9e\x9f\x3e\x4f\xcb\x7a\x45\x98\x49\xaf\xab\x7e\x9d\xee\xfb\xe5\x7f\xcb\x56\x65\x5d\xb6\xf9\x26\x5b\x54\x8c\x94\x96\x08\x36\x25\x2c\xc9\x10\x67\x49\xd7\x6d\x88\x45\x81\x0a\x2e\x2f\xdf\xa4\x67\x4c\x09\xbb\xbc\x5f\xa3\x23\xfd\x3a\xe9\x7e\xdf\x30\xa2\x5c\x83\x57\xeb\x32\xc5\x62\x00\x50\xb3\x1c\xe2\x25\x2d\xb4\xaf\xb3\xa4\x6c\xdb\x8c\x38\x68\x7f\xc3\x68\xd6\x3a\x0f\x41\x4b\x75\x44\xed\x75\xd3\xd3\x34\xa6\x28\x27\x55\x54\xf5\xa7\x7c\x53\x15\x84\x6c\x8f\x90\xb8\x2c\x12\x8b\x86\xe6\x8d\x4b\x13\x65\x36\xd7\x18\x6a\xbe\xa0\x0d\xa0\x4b\xef\xcd\xee\x81\xe3\xde\x7b\x7c\x6f\x96\xd4\x4d\x26\x5c\x82\x79\x73\x51\x75\xf9\x9c\xf8\xb4\xec\x1b\xad\x71\xbd\x5f\x99\x7e\xa4\x2b\x0a\x91\x46\x10\x8c\x5b\xde\x8b\xb0\x05\x30\x71\xe5\xc4\xb0\xc1\x6c\x94\xcd\x84\x63\x37\x9e\xe4\xe6\x57\xd8\x92\x4b\x18\x8d\x39\xb1\x09\x33\xea\x3a\xde\xed\x36\xd5\x42\x9a\x7e\x29\x79\x9e\xd0\x78\x67\x56\xa4\x84\x70\x20\x14\xcb\x0b\xc8\x85\x7a\xcd\x6c\x2b\x8d\xf8\x3c\xca\xaf\x4b\x5a\x39\xeb\xfd\x4a\x76\xa7\x4d\xb3\x2f\xbe\x01\x43\xb1\x99\xf3\xfc\x24\x7d\xd7\x50\x87\x41\x1d\x0e\xc0\x37\x71\x4c\x8c\x81\x85\x81\xb6\xdc\x36\x3d\x23\x4e\x8b\x55\x34\x3d\xd7\x15\x65\xd2\x48\xbb\xfc\x13\xb1\xc5\xbe\x91\x25\x59\xd0\x92\x5b\x70\xc5\xc4\xc1\xf6\xb4\xa3\xcb\xb2\x20\x3e\x22\x4b\xc3\xd2\x62\x1a\x04\xd4\x76\x4f\xab\x69\x4d\x95\x31\xe2\x59\x22\xa1\x2a\xa7\xfa\x89\x21\x51\x3d\x58\xe5\xb4\x72\x1b\xda\x3c\x79\xa2\x4f\xf1\xa1\xbf\xc3\xfa\xa9\x57\xf9\x72\x49\xbd\xea\x68\x55\xbc\x4a\x17\x9b\x86\x96\xd4\x2f\xef\xde\x74\xbc\x60\xd6\xd9\xae\x69\x21\x89\x50\xd6\x05\x7d\xba\xb4\x00\xd1\x0c\x51\xef\xb7\x73\xfa\x75\xbd\xae\x88\x51\x03\xed\x5c\x82\xa5\x24\x4a\xa5\x26\xf6\x1d\x4d\xe1\x51\x4a\x4b\x98\x4Line truncated
|
||||
|
||||
func confLocaleLocale_enUsIniBytes() ([]byte, error) {
|
||||
return bindataRead(
|
||||
@@ -4379,7 +4379,7 @@ func confLocaleLocale_enUsIni() (*asset, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "conf/locale/locale_en-US.ini", size: 44681, mode: os.FileMode(420), modTime: time.Unix(1447476053, 0)}
|
||||
info := bindataFileInfo{name: "conf/locale/locale_en-US.ini", size: 44597, mode: os.FileMode(420), modTime: time.Unix(1447648800, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
||||
@@ -2393,6 +2393,85 @@ footer .container .links > *:first-child {
|
||||
padding: 5px 10px;
|
||||
font-size: 1.2em;
|
||||
}
|
||||
.repository.release #release-list {
|
||||
border-top: 1px solid #DDD;
|
||||
margin-top: 20px;
|
||||
padding-top: 15px;
|
||||
}
|
||||
.repository.release #release-list > li {
|
||||
list-style: none;
|
||||
}
|
||||
.repository.release #release-list > li .meta,
|
||||
.repository.release #release-list > li .detail {
|
||||
padding-top: 30px;
|
||||
padding-bottom: 40px;
|
||||
}
|
||||
.repository.release #release-list > li .meta {
|
||||
text-align: right;
|
||||
position: relative;
|
||||
}
|
||||
.repository.release #release-list > li .meta .tag:not(.icon) {
|
||||
display: block;
|
||||
margin-top: 15px;
|
||||
}
|
||||
.repository.release #release-list > li .meta .commit {
|
||||
display: block;
|
||||
margin-top: 10px;
|
||||
}
|
||||
.repository.release #release-list > li .detail {
|
||||
border-left: 1px solid #DDD;
|
||||
}
|
||||
.repository.release #release-list > li .detail .author img {
|
||||
margin-bottom: -3px;
|
||||
}
|
||||
.repository.release #release-list > li .detail .download {
|
||||
margin-top: 20px;
|
||||
}
|
||||
.repository.release #release-list > li .detail .download > a .octicon {
|
||||
margin-left: 5px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
.repository.release #release-list > li .detail .download .list {
|
||||
padding-left: 0;
|
||||
border-top: 1px solid #eee;
|
||||
}
|
||||
.repository.release #release-list > li .detail .download .list li {
|
||||
list-style: none;
|
||||
display: block;
|
||||
padding-top: 8px;
|
||||
padding-bottom: 8px;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
.repository.release #release-list > li .detail .dot {
|
||||
width: 9px;
|
||||
height: 9px;
|
||||
background-color: #ccc;
|
||||
z-index: 999;
|
||||
position: absolute;
|
||||
display: block;
|
||||
left: -5px;
|
||||
top: 40px;
|
||||
border-radius: 6px;
|
||||
border: 1px solid #FFF;
|
||||
}
|
||||
.repository.new.release .target {
|
||||
min-width: 500px;
|
||||
}
|
||||
.repository.new.release .target .at {
|
||||
margin-left: -5px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
.repository.new.release .target .dropdown.icon {
|
||||
margin: 0;
|
||||
padding-top: 3px;
|
||||
}
|
||||
.repository.new.release .target .selection.dropdown {
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
.repository.new.release .prerelease.field {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.issue.list {
|
||||
list-style: none;
|
||||
padding-top: 15px;
|
||||
|
||||
@@ -794,6 +794,102 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.release {
|
||||
#release-list {
|
||||
border-top: 1px solid #DDD;
|
||||
margin-top: 20px;
|
||||
padding-top: 15px;
|
||||
|
||||
>li {
|
||||
list-style: none;
|
||||
|
||||
.meta,
|
||||
.detail {
|
||||
padding-top: 30px;
|
||||
padding-bottom: 40px;
|
||||
}
|
||||
.meta {
|
||||
text-align: right;
|
||||
position: relative;
|
||||
|
||||
.tag:not(.icon) {
|
||||
display: block;
|
||||
margin-top: 15px;
|
||||
}
|
||||
.commit {
|
||||
display: block;
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
.detail {
|
||||
border-left: 1px solid #DDD;
|
||||
|
||||
.author {
|
||||
img {
|
||||
margin-bottom: -3px;
|
||||
}
|
||||
}
|
||||
.download {
|
||||
margin-top: 20px;
|
||||
|
||||
>a {
|
||||
.octicon {
|
||||
margin-left: 5px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.list {
|
||||
padding-left: 0;
|
||||
border-top: 1px solid #eee;
|
||||
|
||||
li {
|
||||
list-style: none;
|
||||
display: block;
|
||||
padding-top: 8px;
|
||||
padding-bottom: 8px;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
}
|
||||
}
|
||||
.dot {
|
||||
width: 9px;
|
||||
height: 9px;
|
||||
background-color: #ccc;
|
||||
z-index: 999;
|
||||
position: absolute;
|
||||
display: block;
|
||||
left: -5px;
|
||||
top: 40px;
|
||||
border-radius: 6px;
|
||||
border: 1px solid #FFF;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
&.new.release {
|
||||
.target {
|
||||
min-width: 500px;
|
||||
|
||||
.at {
|
||||
margin-left: -5px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
.dropdown.icon {
|
||||
margin: 0;
|
||||
padding-top: 3px;
|
||||
}
|
||||
.selection.dropdown {
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
}
|
||||
.prerelease.field {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
// End of .repository
|
||||
|
||||
|
||||
+27
-44
@@ -13,15 +13,12 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
RELEASES base.TplName = "repo/release/list"
|
||||
RELEASE_NEW base.TplName = "repo/release/new"
|
||||
RELEASE_EDIT base.TplName = "repo/release/edit"
|
||||
RELEASES base.TplName = "repo/release/list"
|
||||
RELEASE_NEW base.TplName = "repo/release/new"
|
||||
)
|
||||
|
||||
func Releases(ctx *middleware.Context) {
|
||||
ctx.Data["Title"] = ctx.Tr("repo.release.releases")
|
||||
ctx.Data["IsRepoToolbarReleases"] = true
|
||||
ctx.Data["IsRepoReleaseNew"] = false
|
||||
|
||||
rawTags, err := ctx.Repo.GitRepo.GetTags()
|
||||
if err != nil {
|
||||
@@ -45,7 +42,7 @@ func Releases(ctx *middleware.Context) {
|
||||
continue
|
||||
}
|
||||
if rel.TagName == rawTag {
|
||||
rel.Publisher, err = models.GetUserByID(rel.PublisherId)
|
||||
rel.Publisher, err = models.GetUserByID(rel.PublisherID)
|
||||
if err != nil {
|
||||
ctx.Handle(500, "GetUserById", err)
|
||||
return
|
||||
@@ -105,7 +102,7 @@ func Releases(ctx *middleware.Context) {
|
||||
continue
|
||||
}
|
||||
|
||||
rel.Publisher, err = models.GetUserByID(rel.PublisherId)
|
||||
rel.Publisher, err = models.GetUserByID(rel.PublisherID)
|
||||
if err != nil {
|
||||
ctx.Handle(500, "GetUserById", err)
|
||||
return
|
||||
@@ -140,27 +137,13 @@ func Releases(ctx *middleware.Context) {
|
||||
}
|
||||
|
||||
func NewRelease(ctx *middleware.Context) {
|
||||
if !ctx.Repo.IsOwner() {
|
||||
ctx.Handle(403, "release.ReleasesNew", nil)
|
||||
return
|
||||
}
|
||||
|
||||
ctx.Data["Title"] = ctx.Tr("repo.release.new_release")
|
||||
ctx.Data["tag_target"] = ctx.Repo.Repository.DefaultBranch
|
||||
ctx.Data["IsRepoToolbarReleases"] = true
|
||||
ctx.Data["IsRepoReleaseNew"] = true
|
||||
ctx.HTML(200, RELEASE_NEW)
|
||||
}
|
||||
|
||||
func NewReleasePost(ctx *middleware.Context, form auth.NewReleaseForm) {
|
||||
if !ctx.Repo.IsOwner() {
|
||||
ctx.Handle(403, "release.ReleasesNew", nil)
|
||||
return
|
||||
}
|
||||
|
||||
ctx.Data["Title"] = ctx.Tr("repo.release.new_release")
|
||||
ctx.Data["IsRepoToolbarReleases"] = true
|
||||
ctx.Data["IsRepoReleaseNew"] = true
|
||||
|
||||
if ctx.HasError() {
|
||||
ctx.HTML(200, RELEASE_NEW)
|
||||
@@ -185,8 +168,8 @@ func NewReleasePost(ctx *middleware.Context, form auth.NewReleaseForm) {
|
||||
}
|
||||
|
||||
rel := &models.Release{
|
||||
RepoId: ctx.Repo.Repository.ID,
|
||||
PublisherId: ctx.User.Id,
|
||||
RepoID: ctx.Repo.Repository.ID,
|
||||
PublisherID: ctx.User.Id,
|
||||
Title: form.Title,
|
||||
TagName: form.TagName,
|
||||
Target: form.Target,
|
||||
@@ -198,67 +181,67 @@ func NewReleasePost(ctx *middleware.Context, form auth.NewReleaseForm) {
|
||||
}
|
||||
|
||||
if err = models.CreateRelease(ctx.Repo.GitRepo, rel); err != nil {
|
||||
if err == models.ErrReleaseAlreadyExist {
|
||||
if models.IsErrReleaseAlreadyExist(err) {
|
||||
ctx.Data["Err_TagName"] = true
|
||||
ctx.RenderWithErr(ctx.Tr("repo.release.tag_name_already_exist"), RELEASE_NEW, &form)
|
||||
} else {
|
||||
ctx.Handle(500, "CreateRelease", err)
|
||||
}
|
||||
return
|
||||
}
|
||||
log.Trace("%s Release created: %s/%s:%s", ctx.Req.RequestURI, ctx.User.LowerName, ctx.Repo.Repository.Name, form.TagName)
|
||||
log.Trace("Release created: %s/%s:%s", ctx.User.LowerName, ctx.Repo.Repository.Name, form.TagName)
|
||||
|
||||
ctx.Redirect(ctx.Repo.RepoLink + "/releases")
|
||||
}
|
||||
|
||||
func EditRelease(ctx *middleware.Context) {
|
||||
if !ctx.Repo.IsOwner() {
|
||||
ctx.Handle(403, "release.ReleasesEdit", nil)
|
||||
return
|
||||
}
|
||||
ctx.Data["Title"] = ctx.Tr("repo.release.edit_release")
|
||||
ctx.Data["PageIsEditRelease"] = true
|
||||
|
||||
tagName := ctx.Params(":tagname")
|
||||
rel, err := models.GetRelease(ctx.Repo.Repository.ID, tagName)
|
||||
if err != nil {
|
||||
if err == models.ErrReleaseNotExist {
|
||||
if models.IsErrReleaseNotExist(err) {
|
||||
ctx.Handle(404, "GetRelease", err)
|
||||
} else {
|
||||
ctx.Handle(500, "GetRelease", err)
|
||||
}
|
||||
return
|
||||
}
|
||||
ctx.Data["Release"] = rel
|
||||
ctx.Data["tag_name"] = rel.TagName
|
||||
ctx.Data["tag_target"] = rel.Target
|
||||
ctx.Data["title"] = rel.Title
|
||||
ctx.Data["content"] = rel.Note
|
||||
ctx.Data["prerelease"] = rel.IsPrerelease
|
||||
|
||||
ctx.Data["Title"] = ctx.Tr("repo.release.edit_release")
|
||||
ctx.Data["IsRepoToolbarReleases"] = true
|
||||
ctx.HTML(200, RELEASE_EDIT)
|
||||
ctx.HTML(200, RELEASE_NEW)
|
||||
}
|
||||
|
||||
func EditReleasePost(ctx *middleware.Context, form auth.EditReleaseForm) {
|
||||
if !ctx.Repo.IsOwner() {
|
||||
ctx.Handle(403, "release.EditReleasePost", nil)
|
||||
return
|
||||
}
|
||||
ctx.Data["Title"] = ctx.Tr("repo.release.edit_release")
|
||||
ctx.Data["PageIsEditRelease"] = true
|
||||
|
||||
tagName := ctx.Params(":tagname")
|
||||
rel, err := models.GetRelease(ctx.Repo.Repository.ID, tagName)
|
||||
if err != nil {
|
||||
if err == models.ErrReleaseNotExist {
|
||||
if models.IsErrReleaseNotExist(err) {
|
||||
ctx.Handle(404, "GetRelease", err)
|
||||
} else {
|
||||
ctx.Handle(500, "GetRelease", err)
|
||||
}
|
||||
return
|
||||
}
|
||||
ctx.Data["Release"] = rel
|
||||
ctx.Data["tag_name"] = rel.TagName
|
||||
ctx.Data["tag_target"] = rel.Target
|
||||
ctx.Data["title"] = rel.Title
|
||||
ctx.Data["content"] = rel.Note
|
||||
ctx.Data["prerelease"] = rel.IsPrerelease
|
||||
|
||||
if ctx.HasError() {
|
||||
ctx.HTML(200, RELEASE_EDIT)
|
||||
ctx.HTML(200, RELEASE_NEW)
|
||||
return
|
||||
}
|
||||
|
||||
ctx.Data["Title"] = ctx.Tr("repo.release.edit_release")
|
||||
ctx.Data["IsRepoToolbarReleases"] = true
|
||||
|
||||
rel.Title = form.Title
|
||||
rel.Note = form.Content
|
||||
rel.IsDraft = len(form.Draft) > 0
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
0.7.11.1115 Beta
|
||||
0.7.12.1115 Beta
|
||||
@@ -1,59 +0,0 @@
|
||||
{{template "ng/base/head" .}}
|
||||
{{template "ng/base/header" .}}
|
||||
<div id="repo-wrapper">
|
||||
{{template "repo/header_old" .}}
|
||||
<div id="repo-content" class="clear container">
|
||||
<div id="repo-main" class="left grid-5-6">
|
||||
{{template "ng/base/alert" .}}
|
||||
<div id="release">
|
||||
<h4 id="release-head">{{.i18n.Tr "repo.release.edit_release"}}</h4>
|
||||
<form class="form" id="release-new-form" action="{{.RepoLink}}/releases/edit/{{.Release.TagName}}" method="post">
|
||||
{{.CsrfTokenHtml}}
|
||||
<div class="field">
|
||||
<b>{{.Release.TagName}}</b>
|
||||
<span class="target-at">@</span>
|
||||
<strong>{{.Repository.DefaultBranch}}</strong>
|
||||
</div>
|
||||
<div class="field">
|
||||
<input class="ipt ipt-large ipt-radius grid-4-5" id="release-new-title" name="title" placeholder="{{.i18n.Tr "repo.release.release_title"}}" value="{{.Release.Title}}" required>
|
||||
</div>
|
||||
<br>
|
||||
<div class="field grid-4-5">
|
||||
<div class="md-help pull-right">
|
||||
{{.i18n.Tr "repo.release.content_with_md" "https://help.github.com/articles/markdown-basics" | Str2html}}
|
||||
</div>
|
||||
<div class="clear">
|
||||
<ul class="tab-nav list-unstyled">
|
||||
<li class="js-tab-nav js-tab-nav-show left" data-tab-target="#release-textarea">
|
||||
<button class="btn btn-medium btn-gray btn-left-radius">{{.i18n.Tr "repo.release.write"}}</button>
|
||||
</li>
|
||||
<li class="js-tab-nav left markdown-preview" id="release-preview-btn" data-tab-target="#release-preview" data-ajax="{{AppSubUrl}}/api/v1/markdown" data-ajax-name="release-preview" data-ajax-context="{{.RepoLink}}" data-ajax-method="post" data-preview="#release-preview">
|
||||
<button class="btn btn-medium btn-gray btn-right-radius">{{.i18n.Tr "repo.release.preview"}}</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="release-textarea">
|
||||
<div class="form-group">
|
||||
<textarea class="ipt ipt-large ipt-radius" name="content" id="release-new-content" rows="10" placeholder="{{.i18n.Tr "repo.release.content_placeholder"}}" data-ajax-rel="release-preview" data-ajax-val="val" data-ajax-field="text" required>{{.Release.Note}}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="markdown hide" id="release-preview">{{.i18n.Tr "repo.release.loading"}}</div>
|
||||
<br>
|
||||
<hr>
|
||||
<div class="text-right">
|
||||
<input class="ipt-chk" name="prerelease" type="checkbox" {{if .Release.IsPrerelease}}checked{{end}}/>
|
||||
<span><strong>{{.i18n.Tr "repo.release.prerelease_desc"}}</strong></span>
|
||||
<p>{{.i18n.Tr "repo.release.prerelease_helper"}}</p>
|
||||
<button class="btn btn-large btn-green btn-radius">Publish release</button>
|
||||
{{if .Release.IsDraft}}
|
||||
<input class="btn btn-large btn-gary btn-radius" type="submit" name="draft" value="{{.i18n.Tr "repo.release.save_draft"}}"/>
|
||||
{{end}}
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{{template "repo/sidebar" .}}
|
||||
</div>
|
||||
</div>
|
||||
{{template "ng/base/footer" .}}
|
||||
@@ -1,73 +1,80 @@
|
||||
{{template "ng/base/head" .}}
|
||||
{{template "ng/base/header" .}}
|
||||
<div id="repo-wrapper">
|
||||
{{template "repo/header_old" .}}
|
||||
<div id="repo-content" class="clear container">
|
||||
<div id="repo-main" class="left grid-5-6">
|
||||
<div id="release">
|
||||
<h4 id="release-head">
|
||||
<span class="release"><strong>{{.i18n.Tr "repo.release.releases"}}</strong></span><!-- /
|
||||
<a class="tag" href="{{AppSubUrl}}/{tag_link}">Tags</a> -->
|
||||
<!-- comment : if in tag page, show a.release and span.tag please -->
|
||||
{{if .IsRepositoryAdmin}}
|
||||
<a class="btn" href="{{$.RepoLink}}/releases/new">
|
||||
<button class="btn btn-medium btn-blue btn-radius">
|
||||
{{.i18n.Tr "repo.release.new_release"}}
|
||||
</button>
|
||||
</a>
|
||||
{{end}}
|
||||
</h4>
|
||||
<ul id="release-list" class="list-unstyled">
|
||||
{{range .Releases}}
|
||||
<li class="release-item clearfix" id="release-{{.Sha1}}">
|
||||
{{if .PublisherId}}
|
||||
<div class="grid-1-6 text-right release-meta">
|
||||
{{if .IsDraft}}
|
||||
<span class="label label-blue label-radius">{{$.i18n.Tr "repo.release.draft"}}</span>
|
||||
{{else if .IsPrerelease}}
|
||||
<span class="label label-orange label-radius">{{$.i18n.Tr "repo.release.prerelease"}}</span>
|
||||
{{else}}
|
||||
<span class="label label-green label-radius">{{$.i18n.Tr "repo.release.stable"}}</span>
|
||||
{{end}}
|
||||
<a class="tag" href="{{$.RepoLink}}/src/{{.TagName}}" rel="nofollow"><i class="fa fa-tag"></i> {{.TagName}}</a>
|
||||
<a class="commit" href="{{$.RepoLink}}/src/{{.Sha1}}" rel="nofollow"><i class="fa fa-code"></i> {{ShortSha .Sha1}}</a>
|
||||
</div>
|
||||
<div class="grid-9-12 release-detail left">
|
||||
<h4 class="title"><a href="{{$.RepoLink}}/src/{{.TagName}}">{{.Title}}</a> <small>(<a href="{{$.RepoLink}}/releases/edit/{{.TagName}}" rel="nofollow">{{$.i18n.Tr "repo.release.edit"}}</a>)</small></h4>
|
||||
<p class="info">
|
||||
<span class="author"><img class="avatar-20" src="{{.Publisher.AvatarLink}}">
|
||||
<a href="{{AppSubUrl}}/{{.Publisher.Name}}">{{.Publisher.Name}}</a></span>
|
||||
{{if .Created}}<span class="time">{{TimeSince .Created $.Lang}}</span>{{end}}
|
||||
<span class="ahead">{{$.i18n.Tr "repo.release.ahead" .NumCommitsBehind .Target | Str2html}}</span>
|
||||
</p>
|
||||
<div class="markdown desc">
|
||||
{{Str2html .Note}}
|
||||
</div>
|
||||
<p class="download">
|
||||
<a class="btn btn-gray btn-large btn-radius" href="{{$.RepoLink}}/archive/{{.TagName}}.zip" rel="nofollow"><i class="fa fa-download"></i> {{$.i18n.Tr "repo.release.source_code"}} (ZIP)</a>
|
||||
<a class="btn btn-gray btn-large btn-radius" href="{{$.RepoLink}}/archive/{{.TagName}}.tar.gz"><i class="fa fa-download"></i> {{$.i18n.Tr "repo.release.source_code"}} (TAR.GZ)</a>
|
||||
</p>
|
||||
<span class="dot"> </span>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="grid-1-6 text-right release-meta">
|
||||
<a class="commit" href="{{$.RepoLink}}/src/{{.Sha1}}" rel="nofollow"><i class="fa fa-code"></i> {{ShortSha .Sha1}}</a>
|
||||
</div>
|
||||
<div class="grid-9-12 release-detail left">
|
||||
<h5 class="title"><a href="{{$.RepoLink}}/src/{{.TagName}}" rel="nofollow">{{.TagName}}</a> <i class="fa fa-tag"></i></h5>
|
||||
<p class="download">
|
||||
<a class="download-link" href="{{$.RepoLink}}/archive/{{.TagName}}.zip" rel="nofollow"><i class="fa fa-download"></i> ZIP</a>
|
||||
<a class="download-link" href="{{$.RepoLink}}/archive/{{.TagName}}.tar.gz"><i class="fa fa-download"></i> TAR.GZ</a>
|
||||
</p>
|
||||
<span class="dot"> </span>
|
||||
</div>
|
||||
{{end}}
|
||||
</li>
|
||||
{{end}}
|
||||
</ul>
|
||||
</div>
|
||||
{{template "base/head" .}}
|
||||
<div class="repository release">
|
||||
{{template "repo/header" .}}
|
||||
<div class="ui container">
|
||||
{{template "repo/sidebar" .}}
|
||||
<h2 class="ui header">
|
||||
{{.i18n.Tr "repo.release.releases"}}
|
||||
{{if .IsRepositoryAdmin}}
|
||||
<div class="ui right">
|
||||
<a class="ui small green button" href="{{$.RepoLink}}/releases/new">
|
||||
{{.i18n.Tr "repo.release.new_release"}}
|
||||
</a>
|
||||
</div>
|
||||
{{end}}
|
||||
</h2>
|
||||
<ul id="release-list">
|
||||
{{range .Releases}}
|
||||
<li class="ui grid">
|
||||
<div class="ui four wide column meta">
|
||||
{{if .PublisherID}}
|
||||
{{if .IsDraft}}
|
||||
<span class="ui yellow label">{{$.i18n.Tr "repo.release.draft"}}</span>
|
||||
{{else if .IsPrerelease}}
|
||||
<span class="ui orange label">{{$.i18n.Tr "repo.release.prerelease"}}</span>
|
||||
{{else}}
|
||||
<span class="ui green label">{{$.i18n.Tr "repo.release.stable"}}</span>
|
||||
{{end}}
|
||||
<span class="tag text blue">
|
||||
<a href="{{$.RepoLink}}/src/{{.TagName}}" rel="nofollow"><i class="tag icon"></i> {{.TagName}}</a>
|
||||
</span>
|
||||
{{end}}
|
||||
<span class="commit">
|
||||
<a href="{{$.RepoLink}}/src/{{.Sha1}}" rel="nofollow"><i class="code icon"></i> {{ShortSha .Sha1}}</a>
|
||||
</span>
|
||||
</div>
|
||||
{{template "repo/sidebar" .}}
|
||||
</div>
|
||||
<div class="ui twelve wide column detail">
|
||||
{{if .PublisherID}}
|
||||
<h3>
|
||||
<a href="{{$.RepoLink}}/src/{{.TagName}}">{{.Title}}</a>
|
||||
<small>(<a href="{{$.RepoLink}}/releases/edit/{{.TagName}}" rel="nofollow">{{$.i18n.Tr "repo.release.edit"}}</a>)</small>
|
||||
</h3>
|
||||
<p class="text grey">
|
||||
<span class="author">
|
||||
<img class="img-10" src="{{.Publisher.AvatarLink}}">
|
||||
<a href="{{AppSubUrl}}/{{.Publisher.Name}}">{{.Publisher.Name}}</a>
|
||||
</span>
|
||||
{{if .Created}}<span class="time">{{TimeSince .Created $.Lang}}</span>{{end}}
|
||||
<span class="ahead">{{$.i18n.Tr "repo.release.ahead" .NumCommitsBehind .Target | Str2html}}</span>
|
||||
</p>
|
||||
<div class="markdown desc">
|
||||
{{Str2html .Note}}
|
||||
</div>
|
||||
<div class="download">
|
||||
<h2>{{$.i18n.Tr "repo.release.downloads"}}</h2>
|
||||
<ul class="list">
|
||||
<li>
|
||||
<a href="{{$.RepoLink}}/archive/{{.TagName}}.zip" rel="nofollow"><i class="icon octicon octicon-file-zip"></i> {{$.i18n.Tr "repo.release.source_code"}} (ZIP)</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{$.RepoLink}}/archive/{{.TagName}}.tar.gz"><i class="icon octicon octicon-file-zip"></i> {{$.i18n.Tr "repo.release.source_code"}} (TAR.GZ)</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
{{else}}
|
||||
<h4>
|
||||
<a href="{{$.RepoLink}}/src/{{.TagName}}" rel="nofollow"><i class="tag icon"></i> {{.TagName}}</a>
|
||||
</h4>
|
||||
<div class="download">
|
||||
<a href="{{$.RepoLink}}/archive/{{.TagName}}.zip" rel="nofollow"><i class="octicon octicon-file-zip"></i> ZIP</a>
|
||||
<a href="{{$.RepoLink}}/archive/{{.TagName}}.tar.gz"><i class="octicon octicon-file-zip"></i> TAR.GZ</a>
|
||||
</div>
|
||||
{{end}}
|
||||
<span class="dot"> </span>
|
||||
</div>
|
||||
</li>
|
||||
{{end}}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
{{template "ng/base/footer" .}}
|
||||
{{template "base/footer" .}}
|
||||
@@ -1,68 +1,83 @@
|
||||
{{template "ng/base/head" .}}
|
||||
{{template "ng/base/header" .}}
|
||||
<div id="repo-wrapper">
|
||||
{{template "repo/header_old" .}}
|
||||
<div id="repo-content" class="clear container">
|
||||
<div id="repo-main" class="left grid-5-6">
|
||||
{{template "ng/base/alert" .}}
|
||||
<div id="release">
|
||||
<h4 id="release-head">{{.i18n.Tr "repo.release.new_release"}}</h4>
|
||||
<form class="form" id="release-new-form" action="{{.RepoLink}}/releases/new" method="post">
|
||||
{{.CsrfTokenHtml}}
|
||||
<div class="field">
|
||||
<input class="ipt ipt-large ipt-radius" name="tag_name" value="{{.tag_name}}" placeholder="{{.i18n.Tr "repo.release.tag_name"}}" required>
|
||||
<span class="target-at">@</span>
|
||||
<div class="inline-block drop">
|
||||
<button class="btn btn-gray btn-medium btn-radius drop-bottom">
|
||||
<i class="octicon octicon-git-branch"></i> {{.i18n.Tr "repo.release.target"}} :
|
||||
<strong id="repo-branch-current">{{.Repository.DefaultBranch}}</strong>
|
||||
</button>
|
||||
<ul class="drop-down menu menu-vertical menu-radius switching-list" id="release-new-target-branch-list">
|
||||
{{range .Branches}}
|
||||
<li {{if eq . $.tag_target}}class="checked"{{end}}><a><i class="octicon octicon-check"></i>{{.}}</a></li>
|
||||
{{end}}
|
||||
</ul>
|
||||
</div>
|
||||
<input id="tag-target" type="hidden" name="tag_target" value="{{.tag_target}}"/>
|
||||
</div>
|
||||
<p class="help">{{.i18n.Tr "repo.release.tag_helper"}}</p>
|
||||
<div class="field">
|
||||
<input class="ipt ipt-large ipt-radius grid-4-5" id="release-new-title" name="title" placeholder="{{.i18n.Tr "repo.release.release_title"}}" value="{{.title}}" required>
|
||||
</div>
|
||||
<br>
|
||||
<div class="field grid-4-5">
|
||||
<div class="md-help pull-right">
|
||||
{{.i18n.Tr "repo.release.content_with_md" "https://help.github.com/articles/markdown-basics" | Str2html}}
|
||||
</div>
|
||||
<div class="clear">
|
||||
<ul class="tab-nav list-unstyled">
|
||||
<li class="js-tab-nav js-tab-nav-show left" data-tab-target="#release-textarea">
|
||||
<button class="btn btn-medium btn-gray btn-left-radius">{{.i18n.Tr "repo.release.write"}}</button>
|
||||
</li>
|
||||
<li class="js-tab-nav left markdown-preview" id="release-preview-btn" data-tab-target="#release-preview" data-ajax="{{AppSubUrl}}/api/v1/markdown" data-ajax-name="release-preview" data-ajax-context="{{.RepoLink}}" data-ajax-method="post" data-preview="#release-preview">
|
||||
<button class="btn btn-medium btn-gray btn-right-radius">{{.i18n.Tr "repo.release.preview"}}</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="release-textarea">
|
||||
<div class="form-group">
|
||||
<textarea class="ipt ipt-large ipt-radius" name="content" id="release-new-content" rows="10" placeholder="{{.i18n.Tr "repo.release.content_placeholder"}}" data-ajax-rel="release-preview" data-ajax-val="val" data-ajax-field="text" required>{{.content}}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="markdown hide" id="release-preview">{{.i18n.Tr "repo.release.loading"}}</div>
|
||||
<hr>
|
||||
<div class="text-right">
|
||||
<input class="ipt-chk" name="prerelease" type="checkbox" {{if .prerelease}}checked{{end}}/>
|
||||
<span><strong>{{.i18n.Tr "repo.release.prerelease_desc"}}</strong></span>
|
||||
<p>{{.i18n.Tr "repo.release.prerelease_helper"}}</p>
|
||||
<button class="btn btn-large btn-green btn-radius">{{.i18n.Tr "repo.release.publish"}}</button>
|
||||
<input class="btn btn-large btn-gary btn-radius" type="submit" name="draft" value="{{.i18n.Tr "repo.release.save_draft"}}"/>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
{{template "base/head" .}}
|
||||
<div class="repository new release">
|
||||
{{template "repo/header" .}}
|
||||
<div class="ui container">
|
||||
{{template "repo/sidebar" .}}
|
||||
<h2 class="ui dividing header">
|
||||
{{if .PageIsEditRelease}}
|
||||
{{.i18n.Tr "repo.release.edit_release"}}
|
||||
<div class="sub header">{{.i18n.Tr "repo.release.edit_subheader"}}</div>
|
||||
{{else}}
|
||||
{{.i18n.Tr "repo.release.new_release"}}
|
||||
<div class="sub header">{{.i18n.Tr "repo.release.new_subheader"}}</div>
|
||||
{{end}}
|
||||
</h2>
|
||||
{{template "base/alert" .}}
|
||||
<form class="ui form grid" action="{{.Link}}" method="post">
|
||||
{{.CsrfTokenHtml}}
|
||||
<div class="ui seven wide column target">
|
||||
<div class="inline field {{if .Err_TagName}}error{{end}}">
|
||||
{{if .PageIsEditRelease}}
|
||||
<b>{{.tag_name}}</b><span class="at">@</span><strong>{{.tag_target}}</strong>
|
||||
{{else}}
|
||||
<input name="tag_name" value="{{.tag_name}}" placeholder="{{.i18n.Tr "repo.release.tag_name"}}" autofocus required>
|
||||
<span class="at">@</span>
|
||||
<div class="ui selection dropdown">
|
||||
<input type="hidden" name="tag_target" value="{{.tag_target}}"/>
|
||||
<i class="octicon octicon-git-branch"></i>
|
||||
<div class="text">
|
||||
{{.i18n.Tr "repo.release.target"}} :
|
||||
<strong id="repo-branch-current">{{.Repository.DefaultBranch}}</strong>
|
||||
</div>
|
||||
<i class="dropdown icon"></i>
|
||||
<div class="menu">
|
||||
{{range .Branches}}
|
||||
<div class="item" data-value="{{.}}">{{.}}</div>
|
||||
{{end}}
|
||||
</div>
|
||||
</div>
|
||||
<span class="help">{{.i18n.Tr "repo.release.tag_helper"}}</span>
|
||||
{{end}}
|
||||
</div>
|
||||
{{template "repo/sidebar" .}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="eleven wide column">
|
||||
<div class="field {{if .Err_Title}}error{{end}}">
|
||||
<label>{{.i18n.Tr "repo.release.title"}}</label>
|
||||
<input name="title" placeholder="{{.i18n.Tr "repo.release.title"}}" value="{{.title}}" autofocus required>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>{{.i18n.Tr "repo.release.content"}}</label>
|
||||
<textarea name="content">{{.content}}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ui container">
|
||||
<div class="ui divider"></div>
|
||||
<div class="ui text right">
|
||||
<div class="prerelease field">
|
||||
<div class="ui checkbox">
|
||||
<input type="checkbox" name="prerelease" {{if .prerelease}}checked{{end}}>
|
||||
<label><strong>{{.i18n.Tr "repo.release.prerelease_desc"}}</strong></label>
|
||||
</div>
|
||||
</div>
|
||||
<span class="help">{{.i18n.Tr "repo.release.prerelease_helper"}}</span>
|
||||
<div class="field">
|
||||
{{if .PageIsEditRelease}}
|
||||
<a class="ui blue basic button" href="{{.RepoLink}}/releases">
|
||||
{{.i18n.Tr "repo.release.cancel"}}
|
||||
</a>
|
||||
<button class="ui green button">
|
||||
{{.i18n.Tr "repo.release.edit_release"}}
|
||||
</button>
|
||||
{{else}}
|
||||
<button class="ui green button">
|
||||
{{.i18n.Tr "repo.release.publish"}}
|
||||
</button>
|
||||
<input class="ui grey button" type="submit" name="draft" value="{{.i18n.Tr "repo.release.save_draft"}}"/>
|
||||
{{end}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{{template "ng/base/footer" .}}
|
||||
{{template "base/footer" .}}
|
||||
Reference in new issue
Block a user