@ -67,6 +67,7 @@ func Releases(ctx *context.Context) {
opts := models . FindReleasesOptions {
IncludeDrafts : ctx . Repo . IsWriter ( ) ,
IncludeTags : true ,
}
releases , err := models . GetReleasesByRepoID ( ctx . Repo . Repository . ID , opts , page , limit )
@ -145,57 +146,61 @@ func NewReleasePost(ctx *context.Context, form auth.NewReleaseForm) {
return
}
var tagCreatedUnix int64
tag , err := ctx . Repo . GitRepo . GetTag ( form . TagName )
if err == nil {
commit , err := tag . Commit ( )
if err == nil {
tagCreatedUnix = commit . Author . When . Unix ( )
}
var attachmentUUIDs [ ] string
if setting . AttachmentEnabled {
attachmentUUIDs = form . Files
}
commit , err := ctx . Repo . GitRepo . GetBranchCommit ( form . Tar get )
rel , err := models . GetRelease ( ctx . Repo . Repository . ID , form . TagName )
if err != nil {
ctx . Handle ( 500 , "GetBranchCommit" , err )
return
}
if ! models . IsErrReleaseNotExist ( err ) {
ctx . Handle ( 500 , "GetRelease" , err )
return
}
commitsCount , err := commit . CommitsCount ( )
if err != nil {
ctx . Handle ( 500 , "CommitsCount" , err )
return
}
rel := & models . Release {
RepoID : ctx . Repo . Repository . ID ,
PublisherID : ctx . User . ID ,
Title : form . Title ,
TagName : form . TagName ,
Target : form . Target ,
Note : form . Content ,
IsDraft : len ( form . Draft ) > 0 ,
IsPrerelease : form . Prerelease ,
IsTag : false ,
}
rel := & models . Release {
RepoID : ctx . Repo . Repository . ID ,
PublisherID : ctx . User . ID ,
Title : form . Title ,
TagName : form . TagName ,
Target : form . Target ,
Sha1 : commit . ID . String ( ) ,
NumCommits : commitsCount ,
Note : form . Content ,
IsDraft : len ( form . Draft ) > 0 ,
IsPrerelease : form . Prerelease ,
CreatedUnix : tagCreatedUnix ,
}
if err = models . CreateRelease ( ctx . Repo . GitRepo , rel , attachmentUUIDs ) ; err != nil {
ctx . Data [ "Err_TagName" ] = true
switch {
case models . IsErrReleaseAlreadyExist ( err ) :
ctx . RenderWithErr ( ctx . Tr ( "repo.release.tag_name_already_exist" ) , tplReleaseNew , & form )
case models . IsErrInvalidTagName ( err ) :
ctx . RenderWithErr ( ctx . Tr ( "repo.release.tag_name_invalid" ) , tplReleaseNew , & form )
default :
ctx . Handle ( 500 , "CreateRelease" , err )
}
return
}
} else {
if ! rel . IsTag {
ctx . Data [ "Err_TagName" ] = true
ctx . RenderWithErr ( ctx . Tr ( "repo.release.tag_name_already_exist" ) , tplReleaseNew , & form )
return
}
var attachmentUUIDs [ ] string
if setting . AttachmentEnabled {
attachmentUUIDs = form . Files
}
rel . Title = form . Title
rel . Note = form . Content
rel . IsDraft = len ( form . Draft ) > 0
rel . IsPrerelease = form . Prerelease
rel . PublisherID = ctx . User . ID
rel . IsTag = false
if err = models . CreateRelease ( ctx . Repo . GitRepo , rel , attachmentUUIDs ) ; err != nil {
ctx . Data [ "Err_TagName" ] = true
switch {
case models . IsErrReleaseAlreadyExist ( err ) :
ctx . RenderWithErr ( ctx . Tr ( "repo.release.tag_name_already_exist" ) , tplReleaseNew , & form )
case models . IsErrInvalidTagName ( err ) :
ctx . RenderWithErr ( ctx . Tr ( "repo.release.tag_name_invalid" ) , tplReleaseNew , & form )
default :
ctx . Handle ( 500 , "CreateRelease" , err )
if err = models . UpdateRelease ( ctx . Repo . GitRepo , rel , attachmentUUIDs ) ; err != nil {
ctx . Data [ "Err_TagName" ] = true
ctx . Handle ( 500 , "UpdateRelease" , err )
return
}
return
}
log . Trace ( "Release created: %s/%s:%s" , ctx . User . LowerName , ctx . Repo . Repository . Name , form . TagName )
@ -246,6 +251,10 @@ func EditReleasePost(ctx *context.Context, form auth.EditReleaseForm) {
}
return
}
if rel . IsTag {
ctx . Handle ( 404 , "GetRelease" , err )
return
}
ctx . Data [ "tag_name" ] = rel . TagName
ctx . Data [ "tag_target" ] = rel . Target
ctx . Data [ "title" ] = rel . Title
@ -275,8 +284,7 @@ func EditReleasePost(ctx *context.Context, form auth.EditReleaseForm) {
// DeleteRelease delete a release
func DeleteRelease ( ctx * context . Context ) {
delTag := ctx . QueryBool ( "delTag" )
if err := models . DeleteReleaseByID ( ctx . QueryInt64 ( "id" ) , ctx . User , delTag ) ; err != nil {
if err := models . DeleteReleaseByID ( ctx . QueryInt64 ( "id" ) , ctx . User , true ) ; err != nil {
ctx . Flash . Error ( "DeleteReleaseByID: " + err . Error ( ) )
} else {
ctx . Flash . Success ( ctx . Tr ( "repo.release.deletion_success" ) )