Skip to content

Commit b687707

Browse files
a1012112796CirnoTzeripathlafrikssilverwind
authored
Add the tag list page to the release page (#12096)
* 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]> * Apply suggestions from code review Co-authored-by: Cirno the Strongest <[email protected]> * Apply suggestions from code review Co-authored-by: zeripath <[email protected]> * fix ui * Add to header * ui * permission * ui * Update options/locale/locale_en-US.ini Co-authored-by: Lauris BH <[email protected]> * tweaks * monospace commit hashes * Add read permission check * fix permission * fix nit * Update web_src/less/_base.less Co-authored-by: silverwind <[email protected]> * ui fixes * title tweaks * fix lint * fix test * fix test and some ui nits * Apply suggestions from code review Co-authored-by: silverwind <[email protected]> Co-authored-by: Cirno the Strongest <[email protected]> Co-authored-by: zeripath <[email protected]> Co-authored-by: Lauris BH <[email protected]> Co-authored-by: silverwind <[email protected]>
1 parent bcb94ed commit b687707

File tree

11 files changed

+213
-65
lines changed

11 files changed

+213
-65
lines changed

integrations/release_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ func checkLatestReleaseAndCount(t *testing.T, session *TestSession, repoURL, ver
5252
htmlDoc := NewHTMLParser(t, resp.Body)
5353
labelText := htmlDoc.doc.Find("#release-list > li .meta .label").First().Text()
5454
assert.EqualValues(t, label, labelText)
55-
titleText := htmlDoc.doc.Find("#release-list > li .detail h3 a").First().Text()
55+
titleText := htmlDoc.doc.Find("#release-list > li .detail h4 a").First().Text()
5656
assert.EqualValues(t, version, titleText)
5757

5858
releaseList := htmlDoc.doc.Find("#release-list > li")
@@ -83,7 +83,7 @@ func TestCreateRelease(t *testing.T) {
8383
session := loginUser(t, "user2")
8484
createNewRelease(t, session, "/user2/repo1", "v0.0.1", "v0.0.1", false, false)
8585

86-
checkLatestReleaseAndCount(t, session, "/user2/repo1", "v0.0.1", i18n.Tr("en", "repo.release.stable"), 3)
86+
checkLatestReleaseAndCount(t, session, "/user2/repo1", "v0.0.1", i18n.Tr("en", "repo.release.stable"), 2)
8787
}
8888

8989
func TestCreateReleasePreRelease(t *testing.T) {
@@ -92,7 +92,7 @@ func TestCreateReleasePreRelease(t *testing.T) {
9292
session := loginUser(t, "user2")
9393
createNewRelease(t, session, "/user2/repo1", "v0.0.1", "v0.0.1", true, false)
9494

95-
checkLatestReleaseAndCount(t, session, "/user2/repo1", "v0.0.1", i18n.Tr("en", "repo.release.prerelease"), 3)
95+
checkLatestReleaseAndCount(t, session, "/user2/repo1", "v0.0.1", i18n.Tr("en", "repo.release.prerelease"), 2)
9696
}
9797

9898
func TestCreateReleaseDraft(t *testing.T) {
@@ -101,7 +101,7 @@ func TestCreateReleaseDraft(t *testing.T) {
101101
session := loginUser(t, "user2")
102102
createNewRelease(t, session, "/user2/repo1", "v0.0.1", "v0.0.1", false, true)
103103

104-
checkLatestReleaseAndCount(t, session, "/user2/repo1", "v0.0.1", i18n.Tr("en", "repo.release.draft"), 3)
104+
checkLatestReleaseAndCount(t, session, "/user2/repo1", "v0.0.1", i18n.Tr("en", "repo.release.draft"), 2)
105105
}
106106

107107
func TestCreateReleasePaging(t *testing.T) {

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: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -808,7 +808,9 @@ org_labels_desc_manage = manage
808808
milestones = Milestones
809809
commits = Commits
810810
commit = Commit
811+
release = Release
811812
releases = Releases
813+
released_this = released this
812814
file_raw = Raw
813815
file_history = History
814816
file_view_raw = View Raw
@@ -1796,6 +1798,8 @@ diff.protected = Protected
17961798

17971799
releases.desc = Track project versions and downloads.
17981800
release.releases = Releases
1801+
release.detail = Release details
1802+
release.tags = Tags
17991803
release.new_release = New Release
18001804
release.draft = Draft
18011805
release.prerelease = Pre-Release
@@ -1818,11 +1822,15 @@ release.publish = Publish Release
18181822
release.save_draft = Save Draft
18191823
release.edit_release = Update Release
18201824
release.delete_release = Delete Release
1825+
release.delete_tag = Delete Tag
18211826
release.deletion = Delete Release
1822-
release.deletion_desc = Deleting a release removes its Git tag from the repository. Repository contents and history remain unchanged. Continue?
1827+
release.deletion_desc = Deleting a release only removes it from Gitea. Git tag, repository contents and history remain unchanged. Continue?
18231828
release.deletion_success = The release has been deleted.
1829+
release.deletion_tag_desc = Will delete this tag from repository. Repository contents and history remain unchanged. Continue?
1830+
release.deletion_tag_success = The tag has been deleted.
18241831
release.tag_name_already_exist = A release with this tag name already exists.
18251832
release.tag_name_invalid = The tag name is not valid.
1833+
release.tag_already_exist = This tag name already exists.
18261834
release.downloads = Downloads
18271835
release.download_count = Downloads: %s
18281836

routers/repo/release.go

Lines changed: 56 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,26 @@ func calReleaseNumCommitsBehind(repoCtx *context.Repository, release *models.Rel
5555

5656
// Releases render releases list page
5757
func 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
356386
func 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{}{

routers/routes/routes.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -896,19 +896,23 @@ func RegisterRoutes(m *macaron.Macaron) {
896896

897897
// Releases
898898
m.Group("/:username/:reponame", func() {
899+
m.Get("/tags", repo.TagsList, repo.MustBeNotEmpty,
900+
reqRepoCodeReader, context.RepoRefByType(context.RepoRefTag))
899901
m.Group("/releases", func() {
900902
m.Get("/", repo.Releases)
901903
m.Get("/tag/*", repo.SingleRelease)
902904
m.Get("/latest", repo.LatestRelease)
903905
m.Get("/attachments/:uuid", repo.GetAttachment)
904-
}, repo.MustBeNotEmpty, context.RepoRefByType(context.RepoRefTag))
906+
}, repo.MustBeNotEmpty, reqRepoReleaseReader, context.RepoRefByType(context.RepoRefTag))
905907
m.Group("/releases", func() {
906908
m.Get("/new", repo.NewRelease)
907909
m.Post("/new", bindIgnErr(auth.NewReleaseForm{}), repo.NewReleasePost)
908910
m.Post("/delete", repo.DeleteRelease)
909911
m.Post("/attachments", repo.UploadReleaseAttachment)
910912
m.Post("/attachments/remove", repo.DeleteAttachment)
911913
}, reqSignIn, repo.MustBeNotEmpty, context.RepoMustNotBeArchived(), reqRepoReleaseWriter, context.RepoRef())
914+
m.Post("/tags/delete", repo.DeleteTag, reqSignIn,
915+
repo.MustBeNotEmpty, context.RepoMustNotBeArchived(), reqRepoCodeWriter, context.RepoRef())
912916
m.Group("/releases", func() {
913917
m.Get("/edit/*", repo.EditRelease)
914918
m.Post("/edit/*", bindIgnErr(auth.EditReleaseForm{}), repo.EditReleasePost)

services/release/release.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -157,10 +157,6 @@ func DeleteReleaseByID(id int64, doer *models.User, delTag bool) error {
157157
}
158158
} else {
159159
rel.IsTag = true
160-
rel.IsDraft = false
161-
rel.IsPrerelease = false
162-
rel.Title = ""
163-
rel.Note = ""
164160

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

0 commit comments

Comments
 (0)