@@ -55,10 +55,26 @@ func calReleaseNumCommitsBehind(repoCtx *context.Repository, release *models.Rel
5555
5656// Releases render releases list page
5757func Releases (ctx * context.Context ) {
58- ctx .Data ["Title" ] = ctx .Tr ("repo.release.releases" )
58+ releasesOrTags (ctx , false )
59+ }
60+
61+ // TagsList render tags list page
62+ func TagsList (ctx * context.Context ) {
63+ releasesOrTags (ctx , true )
64+ }
65+
66+ func releasesOrTags (ctx * context.Context , isTagList bool ) {
5967 ctx .Data ["PageIsReleaseList" ] = true
6068 ctx .Data ["DefaultBranch" ] = ctx .Repo .Repository .DefaultBranch
6169
70+ if isTagList {
71+ ctx .Data ["Title" ] = ctx .Tr ("repo.release.tags" )
72+ ctx .Data ["PageIsTagList" ] = true
73+ } else {
74+ ctx .Data ["Title" ] = ctx .Tr ("repo.release.releases" )
75+ ctx .Data ["PageIsTagList" ] = false
76+ }
77+
6278 writeAccess := ctx .Repo .CanWrite (models .UnitTypeReleases )
6379 ctx .Data ["CanCreateRelease" ] = writeAccess && ! ctx .Repo .Repository .IsArchived
6480
@@ -68,7 +84,7 @@ func Releases(ctx *context.Context) {
6884 PageSize : convert .ToCorrectPageSize (ctx .QueryInt ("limit" )),
6985 },
7086 IncludeDrafts : writeAccess ,
71- IncludeTags : true ,
87+ IncludeTags : isTagList ,
7288 }
7389
7490 releases , err := models .GetReleasesByRepoID (ctx .Repo .Repository .ID , opts )
@@ -83,8 +99,7 @@ func Releases(ctx *context.Context) {
8399 return
84100 }
85101
86- err = models .GetReleaseAttachments (releases ... )
87- if err != nil {
102+ if err = models .GetReleaseAttachments (releases ... ); err != nil {
88103 ctx .ServerError ("GetReleaseAttachments" , err )
89104 return
90105 }
@@ -118,6 +133,7 @@ func Releases(ctx *context.Context) {
118133 }
119134
120135 ctx .Data ["Releases" ] = releases
136+ ctx .Data ["ReleasesNum" ] = len (releases )
121137
122138 pager := context .NewPagination (int (count ), opts .PageSize , opts .Page , 5 )
123139 pager .SetDefaultParams (ctx )
@@ -194,6 +210,20 @@ func NewRelease(ctx *context.Context) {
194210 ctx .Data ["Title" ] = ctx .Tr ("repo.release.new_release" )
195211 ctx .Data ["PageIsReleaseList" ] = true
196212 ctx .Data ["tag_target" ] = ctx .Repo .Repository .DefaultBranch
213+ if tagName := ctx .Query ("tag" ); len (tagName ) > 0 {
214+ rel , err := models .GetRelease (ctx .Repo .Repository .ID , tagName )
215+ if err != nil && ! models .IsErrReleaseNotExist (err ) {
216+ ctx .ServerError ("GetRelease" , err )
217+ return
218+ }
219+
220+ if rel != nil {
221+ ctx .Data ["tag_name" ] = rel .TagName
222+ ctx .Data ["tag_target" ] = rel .Target
223+ ctx .Data ["title" ] = rel .Title
224+ ctx .Data ["content" ] = rel .Note
225+ }
226+ }
197227 ctx .Data ["IsAttachmentEnabled" ] = setting .Attachment .Enabled
198228 upload .AddUploadContext (ctx , "release" )
199229 ctx .HTML (200 , tplReleaseNew )
@@ -354,10 +384,30 @@ func EditReleasePost(ctx *context.Context, form auth.EditReleaseForm) {
354384
355385// DeleteRelease delete a release
356386func DeleteRelease (ctx * context.Context ) {
357- if err := releaseservice .DeleteReleaseByID (ctx .QueryInt64 ("id" ), ctx .User , true ); err != nil {
387+ deleteReleaseOrTag (ctx , false )
388+ }
389+
390+ // DeleteTag delete a tag
391+ func DeleteTag (ctx * context.Context ) {
392+ deleteReleaseOrTag (ctx , true )
393+ }
394+
395+ func deleteReleaseOrTag (ctx * context.Context , isDelTag bool ) {
396+ if err := releaseservice .DeleteReleaseByID (ctx .QueryInt64 ("id" ), ctx .User , isDelTag ); err != nil {
358397 ctx .Flash .Error ("DeleteReleaseByID: " + err .Error ())
359398 } else {
360- ctx .Flash .Success (ctx .Tr ("repo.release.deletion_success" ))
399+ if isDelTag {
400+ ctx .Flash .Success (ctx .Tr ("repo.release.deletion_tag_success" ))
401+ } else {
402+ ctx .Flash .Success (ctx .Tr ("repo.release.deletion_success" ))
403+ }
404+ }
405+
406+ if isDelTag {
407+ ctx .JSON (200 , map [string ]interface {}{
408+ "redirect" : ctx .Repo .RepoLink + "/tags" ,
409+ })
410+ return
361411 }
362412
363413 ctx .JSON (200 , map [string ]interface {}{
0 commit comments