Skip to content

Commit a3cf5ee

Browse files
committed
Add the tag list page to the release page
* Add the tags list view * Add the delete tag way on ui * Not delete tag and clear message when delete a release Signed-off-by: a1012112796 <[email protected]>
1 parent 482ba93 commit a3cf5ee

File tree

6 files changed

+118
-14
lines changed

6 files changed

+118
-14
lines changed

models/release.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,11 @@ func (r *Release) loadAttributes(e Engine) error {
5353
if r.Publisher == nil {
5454
r.Publisher, err = getUserByID(e, r.PublisherID)
5555
if err != nil {
56-
return err
56+
if IsErrUserNotExist(err) {
57+
r.Publisher = NewGhostUser()
58+
} else {
59+
return err
60+
}
5761
}
5862
}
5963
return getReleaseAttachments(e, r)

options/locale/locale_en-US.ini

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1674,6 +1674,8 @@ diff.committed_by = committed by
16741674

16751675
releases.desc = Track project versions and downloads.
16761676
release.releases = Releases
1677+
release.detail = Release detail
1678+
release.tags = Tags
16771679
release.new_release = New Release
16781680
release.draft = Draft
16791681
release.prerelease = Pre-Release
@@ -1696,13 +1698,18 @@ release.publish = Publish Release
16961698
release.save_draft = Save Draft
16971699
release.edit_release = Update Release
16981700
release.delete_release = Delete Release
1701+
release.delete_tag = Delete Tag
16991702
release.deletion = Delete Release
1700-
release.deletion_desc = Deleting a release removes its Git tag from the repository. Repository contents and history remain unchanged. Continue?
1703+
release.deletion_desc = Deleting a release delete this release. Continue?
17011704
release.deletion_success = The release has been deleted.
1705+
release.deletion_tag_desc = Will delete this tag from repository. Continue?
1706+
release.deletion_tag_success = The tag has been deleted.
17021707
release.tag_name_already_exist = A release with this tag name already exists.
17031708
release.tag_name_invalid = The tag name is not valid.
1709+
release.tag_already_exist = This tag name already exists.
17041710
release.downloads = Downloads
17051711
release.download_count = Downloads: %s
1712+
release.only_create_tag = Only create tag
17061713

17071714
branch.name = Branch Name
17081715
branch.search = Search branches

routers/repo/release.go

Lines changed: 45 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,18 @@ func calReleaseNumCommitsBehind(repoCtx *context.Repository, release *models.Rel
5454

5555
// Releases render releases list page
5656
func Releases(ctx *context.Context) {
57-
ctx.Data["Title"] = ctx.Tr("repo.release.releases")
5857
ctx.Data["PageIsReleaseList"] = true
5958

59+
isTagList := ctx.Params(":type") == "tags"
60+
61+
if isTagList {
62+
ctx.Data["Title"] = ctx.Tr("repo.release.tags")
63+
ctx.Data["PageIsTagList"] = true
64+
} else {
65+
ctx.Data["Title"] = ctx.Tr("repo.release.releases")
66+
ctx.Data["PageIsTagList"] = false
67+
}
68+
6069
writeAccess := ctx.Repo.CanWrite(models.UnitTypeReleases)
6170
ctx.Data["CanCreateRelease"] = writeAccess && !ctx.Repo.Repository.IsArchived
6271

@@ -69,6 +78,10 @@ func Releases(ctx *context.Context) {
6978
IncludeTags: true,
7079
}
7180

81+
if !isTagList {
82+
opts.IncludeTags = false
83+
}
84+
7285
releases, err := models.GetReleasesByRepoID(ctx.Repo.Repository.ID, opts)
7386
if err != nil {
7487
ctx.ServerError("GetReleasesByRepoID", err)
@@ -81,8 +94,7 @@ func Releases(ctx *context.Context) {
8194
return
8295
}
8396

84-
err = models.GetReleaseAttachments(releases...)
85-
if err != nil {
97+
if err = models.GetReleaseAttachments(releases...); err != nil {
8698
ctx.ServerError("GetReleaseAttachments", err)
8799
return
88100
}
@@ -189,6 +201,21 @@ func NewRelease(ctx *context.Context) {
189201
ctx.Data["PageIsReleaseList"] = true
190202
ctx.Data["tag_target"] = ctx.Repo.Repository.DefaultBranch
191203
renderAttachmentSettings(ctx)
204+
tagName := ctx.Query("tag")
205+
if len(tagName) > 0 {
206+
rel, err := models.GetRelease(ctx.Repo.Repository.ID, tagName)
207+
if err != nil && !models.IsErrReleaseNotExist(err) {
208+
ctx.ServerError("GetRelease", err)
209+
return
210+
}
211+
212+
if rel != nil {
213+
ctx.Data["tag_name"] = rel.TagName
214+
ctx.Data["tag_target"] = rel.Target
215+
ctx.Data["title"] = rel.Title
216+
ctx.Data["content"] = rel.Note
217+
}
218+
}
192219
ctx.HTML(200, tplReleaseNew)
193220
}
194221

@@ -346,10 +373,23 @@ func EditReleasePost(ctx *context.Context, form auth.EditReleaseForm) {
346373

347374
// DeleteRelease delete a release
348375
func DeleteRelease(ctx *context.Context) {
349-
if err := releaseservice.DeleteReleaseByID(ctx.QueryInt64("id"), ctx.User, true); err != nil {
376+
isDelTag := ctx.Params(":type") == "tags"
377+
378+
if err := releaseservice.DeleteReleaseByID(ctx.QueryInt64("id"), ctx.User, isDelTag); err != nil {
350379
ctx.Flash.Error("DeleteReleaseByID: " + err.Error())
351380
} else {
352-
ctx.Flash.Success(ctx.Tr("repo.release.deletion_success"))
381+
if isDelTag {
382+
ctx.Flash.Success(ctx.Tr("repo.release.deletion_tag_success"))
383+
} else {
384+
ctx.Flash.Success(ctx.Tr("repo.release.deletion_success"))
385+
}
386+
}
387+
388+
if isDelTag {
389+
ctx.JSON(200, map[string]interface{}{
390+
"redirect": ctx.Repo.RepoLink + "/tags",
391+
})
392+
return
353393
}
354394

355395
ctx.JSON(200, map[string]interface{}{

routers/routes/routes.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -812,12 +812,12 @@ func RegisterRoutes(m *macaron.Macaron) {
812812

813813
// Releases
814814
m.Group("/:username/:reponame", func() {
815-
m.Group("/releases", func() {
815+
m.Group("/^:type(releases|tags)$", func() {
816816
m.Get("/", repo.Releases)
817817
m.Get("/tag/:tag", repo.SingleRelease)
818818
m.Get("/latest", repo.LatestRelease)
819819
}, repo.MustBeNotEmpty, context.RepoRef())
820-
m.Group("/releases", func() {
820+
m.Group("/^:type(releases|tags)$", func() {
821821
m.Get("/new", repo.NewRelease)
822822
m.Post("/new", bindIgnErr(auth.NewReleaseForm{}), repo.NewReleasePost)
823823
m.Post("/delete", repo.DeleteRelease)

services/release/release.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -140,10 +140,6 @@ func DeleteReleaseByID(id int64, doer *models.User, delTag bool) error {
140140
}
141141
} else {
142142
rel.IsTag = true
143-
rel.IsDraft = false
144-
rel.IsPrerelease = false
145-
rel.Title = ""
146-
rel.Note = ""
147143

148144
if err = models.UpdateRelease(models.DefaultDBContext(), rel); err != nil {
149145
return fmt.Errorf("Update: %v", err)

templates/repo/release/list.tmpl

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44
<div class="ui container">
55
{{template "base/alert" .}}
66
<h2 class="ui header">
7-
{{.i18n.Tr "repo.release.releases"}}
7+
<div class="ui compact left small menu">
8+
<a class="{{if (not .PageIsTagList)}}active{{end}} item" href="{{.RepoLink}}/releases">{{.i18n.Tr "repo.release.releases"}}</a>
9+
<a class="{{if .PageIsTagList}}active{{end}} item" href="{{.RepoLink}}/tags">{{.i18n.Tr "repo.release.tags"}}</a>
10+
</div>
811
{{if .CanCreateRelease}}
912
<div class="ui right">
1013
<a class="ui small green button" href="{{$.RepoLink}}/releases/new">
@@ -13,6 +16,45 @@
1316
</div>
1417
{{end}}
1518
</h2>
19+
{{if .PageIsTagList}}
20+
<h4 class="ui top attached header">
21+
<div class="five wide column">
22+
{{.i18n.Tr "repo.release.tags"}}
23+
</div>
24+
</h4>
25+
<div class="ui attached table segment">
26+
<table class="ui very basic striped fixed table single line" id="tags-table">
27+
<thead></thead>
28+
<tbody class="tag-list">
29+
{{range $idx, $release := .Releases}}
30+
<tr>
31+
<td class="tag">
32+
<h4>
33+
<a href="{{$.RepoLink}}/src/tag/{{.TagName | EscapePound}}" rel="nofollow"><i class="tag icon"></i> {{.TagName}}</a>
34+
</h4>
35+
<div class="download">
36+
{{if $.Permission.CanRead $.UnitTypeCode}}
37+
<a href="{{$.RepoLink}}/src/commit/{{.Sha1}}" rel="nofollow"><i class="code icon"></i> {{ShortSha .Sha1}}</a>
38+
<a href="{{$.RepoLink}}/archive/{{.TagName | EscapePound}}.zip" rel="nofollow">{{svg "octicon-file-zip" 16}}&nbsp;ZIP</a>
39+
<a href="{{$.RepoLink}}/archive/{{.TagName | EscapePound}}.tar.gz">{{svg "octicon-file-zip" 16}}&nbsp;TAR.GZ</a>
40+
{{if (and $.CanCreateRelease $release.IsTag)}}
41+
<a href="{{$.RepoLink}}/releases/new?tag={{.TagName | EscapePound}}">{{svg "octicon-tag" 16}}&nbsp;{{$.i18n.Tr "repo.release.new_release"}}</a>
42+
<a class="ui red delete-button" data-url="{{$.RepoLink}}/tags/delete" data-id="{{.ID}}">
43+
<i class="trash icon"></i>&nbsp;{{$.i18n.Tr "repo.release.delete_tag"}}
44+
</a>
45+
{{end}}
46+
{{if (not $release.IsTag)}}
47+
<a href="{{$.RepoLink}}/releases/tag/{{.TagName | EscapePound}}">{{svg "octicon-tag" 16}}&nbsp;{{$.i18n.Tr "repo.release.detail"}}</a>
48+
{{end}}
49+
{{end}}
50+
</div>
51+
</td>
52+
</tr>
53+
{{end}}
54+
</tbody>
55+
</table>
56+
</div>
57+
{{else}}
1658
<ul id="release-list">
1759
{{range $idx, $release := .Releases}}
1860
<li class="ui grid">
@@ -107,7 +149,22 @@
107149
</li>
108150
{{end}}
109151
</ul>
152+
{{end}}
110153
{{template "base/paginate" .}}
111154
</div>
112155
</div>
156+
157+
{{if (and .CanCreateRelease .PageIsTagList)}}
158+
<div class="ui small basic delete modal">
159+
<div class="ui icon header">
160+
<i class="trash icon"></i>
161+
{{.i18n.Tr "repo.release.delete_tag"}}
162+
</div>
163+
<div class="content">
164+
<p>{{.i18n.Tr "repo.release.deletion_tag_desc"}}</p>
165+
</div>
166+
{{template "base/delete_modal_actions" .}}
167+
</div>
168+
{{end}}
169+
113170
{{template "base/footer" .}}

0 commit comments

Comments
 (0)