Skip to content

Commit 3088866

Browse files
authored
fix some ui bug about draft release (#15137)
* fix some ui bug about draft release - should not show draft release in tag list because it will't create real tag - still show draft release without tag and commit message for draft release instead of 404 error - remove tag load for attachement links because it's useless Signed-off-by: a1012112796 <[email protected]> * add test code * fix test That's because has added a new release in relaese test database. * fix dropdown link for draft release
1 parent eedc0c8 commit 3088866

File tree

7 files changed

+128
-22
lines changed

7 files changed

+128
-22
lines changed

integrations/release_test.go

Lines changed: 82 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,11 @@ import (
1010
"testing"
1111
"time"
1212

13+
"code.gitea.io/gitea/models"
1314
"code.gitea.io/gitea/modules/setting"
1415
"code.gitea.io/gitea/modules/test"
1516

17+
"github.com/PuerkitoBio/goquery"
1618
"github.com/stretchr/testify/assert"
1719
"github.com/unknwon/i18n"
1820
)
@@ -83,7 +85,7 @@ func TestCreateRelease(t *testing.T) {
8385
session := loginUser(t, "user2")
8486
createNewRelease(t, session, "/user2/repo1", "v0.0.1", "v0.0.1", false, false)
8587

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

8991
func TestCreateReleasePreRelease(t *testing.T) {
@@ -92,7 +94,7 @@ func TestCreateReleasePreRelease(t *testing.T) {
9294
session := loginUser(t, "user2")
9395
createNewRelease(t, session, "/user2/repo1", "v0.0.1", "v0.0.1", true, false)
9496

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

98100
func TestCreateReleaseDraft(t *testing.T) {
@@ -101,7 +103,7 @@ func TestCreateReleaseDraft(t *testing.T) {
101103
session := loginUser(t, "user2")
102104
createNewRelease(t, session, "/user2/repo1", "v0.0.1", "v0.0.1", false, true)
103105

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

107109
func TestCreateReleasePaging(t *testing.T) {
@@ -127,3 +129,80 @@ func TestCreateReleasePaging(t *testing.T) {
127129
session2 := loginUser(t, "user4")
128130
checkLatestReleaseAndCount(t, session2, "/user2/repo1", "v0.0.11", i18n.Tr("en", "repo.release.stable"), 10)
129131
}
132+
133+
func TestViewReleaseListNoLogin(t *testing.T) {
134+
defer prepareTestEnv(t)()
135+
136+
repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 1}).(*models.Repository)
137+
138+
link := repo.Link() + "/releases"
139+
140+
req := NewRequest(t, "GET", link)
141+
rsp := MakeRequest(t, req, http.StatusOK)
142+
143+
htmlDoc := NewHTMLParser(t, rsp.Body)
144+
releases := htmlDoc.Find("#release-list li.ui.grid")
145+
assert.Equal(t, 1, releases.Length())
146+
147+
links := make([]string, 0, 5)
148+
releases.Each(func(i int, s *goquery.Selection) {
149+
link, exist := s.Find(".release-list-title a").Attr("href")
150+
if !exist {
151+
return
152+
}
153+
links = append(links, link)
154+
})
155+
156+
assert.EqualValues(t, []string{"/user2/repo1/releases/tag/v1.1"}, links)
157+
}
158+
159+
func TestViewReleaseListLogin(t *testing.T) {
160+
defer prepareTestEnv(t)()
161+
162+
repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 1}).(*models.Repository)
163+
164+
link := repo.Link() + "/releases"
165+
166+
session := loginUser(t, "user1")
167+
req := NewRequest(t, "GET", link)
168+
rsp := session.MakeRequest(t, req, http.StatusOK)
169+
170+
htmlDoc := NewHTMLParser(t, rsp.Body)
171+
releases := htmlDoc.Find("#release-list li.ui.grid")
172+
assert.Equal(t, 2, releases.Length())
173+
174+
links := make([]string, 0, 5)
175+
releases.Each(func(i int, s *goquery.Selection) {
176+
link, exist := s.Find(".release-list-title a").Attr("href")
177+
if !exist {
178+
return
179+
}
180+
links = append(links, link)
181+
})
182+
183+
assert.EqualValues(t, []string{"/user2/repo1/releases/tag/draft-release",
184+
"/user2/repo1/releases/tag/v1.1"}, links)
185+
}
186+
187+
func TestViewTagsList(t *testing.T) {
188+
defer prepareTestEnv(t)()
189+
190+
repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 1}).(*models.Repository)
191+
192+
link := repo.Link() + "/tags"
193+
194+
session := loginUser(t, "user1")
195+
req := NewRequest(t, "GET", link)
196+
rsp := session.MakeRequest(t, req, http.StatusOK)
197+
198+
htmlDoc := NewHTMLParser(t, rsp.Body)
199+
tags := htmlDoc.Find(".tag-list tr")
200+
assert.Equal(t, 2, tags.Length())
201+
202+
tagNames := make([]string, 0, 5)
203+
tags.Each(func(i int, s *goquery.Selection) {
204+
tagNames = append(tagNames, s.Find(".tag a.df.ac").Text())
205+
})
206+
207+
assert.EqualValues(t, []string{"delete-tag", "v1.1"}, tagNames)
208+
}

models/fixtures/release.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,15 @@
4343
is_tag: true
4444
created_unix: 946684800
4545

46+
-
47+
id: 4
48+
repo_id: 1
49+
publisher_id: 2
50+
tag_name: "draft-release"
51+
lower_tag_name: "draft-release"
52+
target: "master"
53+
title: "draft-release"
54+
is_draft: true
55+
is_prerelease: false
56+
is_tag: false
57+
created_unix: 1619524806

modules/context/repo.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -724,7 +724,7 @@ func getRefName(ctx *Context, pathType RepoRefType) string {
724724

725725
// RepoRefByType handles repository reference name for a specific type
726726
// of repository reference
727-
func RepoRefByType(refType RepoRefType) func(*Context) context.CancelFunc {
727+
func RepoRefByType(refType RepoRefType, ignoreNotExistErr ...bool) func(*Context) context.CancelFunc {
728728
return func(ctx *Context) (cancel context.CancelFunc) {
729729
// Empty repository does not have reference information.
730730
if ctx.Repo.Repository.IsEmpty {
@@ -813,6 +813,9 @@ func RepoRefByType(refType RepoRefType) func(*Context) context.CancelFunc {
813813
util.URLJoin(setting.AppURL, strings.Replace(ctx.Req.URL.RequestURI(), refName, ctx.Repo.Commit.ID.String(), 1))))
814814
}
815815
} else {
816+
if len(ignoreNotExistErr) > 0 && ignoreNotExistErr[0] {
817+
return
818+
}
816819
ctx.NotFound("RepoRef invalid repo", fmt.Errorf("branch or tag not exist: %s", refName))
817820
return
818821
}

routers/repo/release.go

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ func releasesOrTags(ctx *context.Context, isTagList bool) {
9999
Page: ctx.QueryInt("page"),
100100
PageSize: convert.ToCorrectPageSize(ctx.QueryInt("limit")),
101101
},
102-
IncludeDrafts: writeAccess,
102+
IncludeDrafts: writeAccess && !isTagList,
103103
IncludeTags: isTagList,
104104
}
105105

@@ -141,10 +141,7 @@ func releasesOrTags(ctx *context.Context, isTagList bool) {
141141
}
142142
cacheUsers[r.PublisherID] = r.Publisher
143143
}
144-
if err := calReleaseNumCommitsBehind(ctx.Repo, r, countCache); err != nil {
145-
ctx.ServerError("calReleaseNumCommitsBehind", err)
146-
return
147-
}
144+
148145
r.Note, err = markdown.RenderString(&markup.RenderContext{
149146
URLPrefix: ctx.Repo.RepoLink,
150147
Metas: ctx.Repo.Repository.ComposeMetas(),
@@ -153,6 +150,15 @@ func releasesOrTags(ctx *context.Context, isTagList bool) {
153150
ctx.ServerError("RenderString", err)
154151
return
155152
}
153+
154+
if r.IsDraft {
155+
continue
156+
}
157+
158+
if err := calReleaseNumCommitsBehind(ctx.Repo, r, countCache); err != nil {
159+
ctx.ServerError("calReleaseNumCommitsBehind", err)
160+
return
161+
}
156162
}
157163

158164
ctx.Data["Releases"] = releases
@@ -198,9 +204,11 @@ func SingleRelease(ctx *context.Context) {
198204
return
199205
}
200206
}
201-
if err := calReleaseNumCommitsBehind(ctx.Repo, release, make(map[string]int64)); err != nil {
202-
ctx.ServerError("calReleaseNumCommitsBehind", err)
203-
return
207+
if !release.IsDraft {
208+
if err := calReleaseNumCommitsBehind(ctx.Repo, release, make(map[string]int64)); err != nil {
209+
ctx.ServerError("calReleaseNumCommitsBehind", err)
210+
return
211+
}
204212
}
205213
release.Note, err = markdown.RenderString(&markup.RenderContext{
206214
URLPrefix: ctx.Repo.RepoLink,

routers/routes/web.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -912,8 +912,8 @@ func RegisterRoutes(m *web.Route) {
912912
m.Get("/", repo.Releases)
913913
m.Get("/tag/*", repo.SingleRelease)
914914
m.Get("/latest", repo.LatestRelease)
915-
m.Get("/attachments/{uuid}", repo.GetAttachment)
916-
}, repo.MustBeNotEmpty, reqRepoReleaseReader, context.RepoRefByType(context.RepoRefTag))
915+
}, repo.MustBeNotEmpty, reqRepoReleaseReader, context.RepoRefByType(context.RepoRefTag, true))
916+
m.Get("/releases/attachments/{uuid}", repo.GetAttachment, repo.MustBeNotEmpty, reqRepoReleaseReader)
917917
m.Group("/releases", func() {
918918
m.Get("/new", repo.NewRelease)
919919
m.Post("/new", bindIgnErr(forms.NewReleaseForm{}), repo.NewReleasePost)

templates/repo/branch_dropdown.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
{{end}}
2323
{{range .root.Tags}}
2424
{{if $release}}
25-
<div class="item tag {{if eq $release.TagName .}}selected{{end}}" data-url="{{$.root.RepoLink}}/compare/{{EscapePound .}}...{{if $release.TagName}}{{EscapePound $release.TagName}}{{else}}{{EscapePound $release.Sha1}}{{end}}">{{.}}</div>
25+
<div class="item tag {{if eq $release.TagName .}}selected{{end}}" data-url="{{$.root.RepoLink}}/compare/{{EscapePound .}}...{{if $release.IsDraft}}{{EscapePound $release.Target}}{{else}}}{{if $release.TagName}}{{EscapePound $release.TagName}}{{else}}{{EscapePound $release.Sha1}}{{end}}{{end}}">{{.}}</div>
2626
{{else}}
2727
<div class="item tag {{if eq $.root.BranchName .}}selected{{end}}" data-url="{{$.root.RepoLink}}/{{if $.root.PageIsCommits}}commits{{else}}src{{end}}/tag/{{EscapePound .}}{{if $.root.TreePath}}/{{EscapePound $.root.TreePath}}{{end}}">{{.}}</div>
2828
{{end}}

templates/repo/release/list.tmpl

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,13 @@
7575
<span class="ui green label">{{$.i18n.Tr "repo.release.stable"}}</span>
7676
{{end}}
7777
<span class="tag text blue">
78-
<a class="df ac je" href="{{$.RepoLink}}/src/tag/{{.TagName | EscapePound}}" rel="nofollow">{{svg "octicon-tag" 16 "mr-2"}}{{.TagName}}</a>
79-
</span>
80-
<span class="commit">
81-
<a class="mono" href="{{$.RepoLink}}/src/commit/{{.Sha1}}" rel="nofollow">{{svg "octicon-git-commit" 16 "mr-2"}}{{ShortSha .Sha1}}</a>
78+
<a class="df ac je" href="{{if .IsDraft}}#{{else}}{{$.RepoLink}}/src/tag/{{.TagName | EscapePound}}{{end}}" rel="nofollow">{{svg "octicon-tag" 16 "mr-2"}}{{.TagName}}</a>
8279
</span>
80+
{{if not .IsDraft}}
81+
<span class="commit">
82+
<a class="mono" href="{{$.RepoLink}}/src/commit/{{.Sha1}}" rel="nofollow">{{svg "octicon-git-commit" 16 "mr-2"}}{{ShortSha .Sha1}}</a>
83+
</span>
84+
{{end}}
8385
{{template "repo/branch_dropdown" dict "root" $ "release" .}}
8486
{{end}}
8587
</div>
@@ -128,9 +130,11 @@
128130
{{$.i18n.Tr "repo.released_this"}}
129131
</span>
130132
{{if .CreatedUnix}}
131-
<span class="time">{{TimeSinceUnix .CreatedUnix $.Lang}}</span> |
133+
<span class="time">{{TimeSinceUnix .CreatedUnix $.Lang}}</span>
134+
{{end}}
135+
{{if not .IsDraft}}
136+
| <span class="ahead"><a href="{{$.RepoLink}}/compare/{{.TagName | EscapePound}}...{{.Target}}">{{$.i18n.Tr "repo.release.ahead.commits" .NumCommitsBehind | Str2html}}</a> {{$.i18n.Tr "repo.release.ahead.target" .Target}}</span>
132137
{{end}}
133-
<span class="ahead"><a href="{{$.RepoLink}}/compare/{{.TagName | EscapePound}}...{{.Target}}">{{$.i18n.Tr "repo.release.ahead.commits" .NumCommitsBehind | Str2html}}</a> {{$.i18n.Tr "repo.release.ahead.target" .Target}}</span>
134138
</p>
135139
<div class="markdown desc">
136140
{{Str2html .Note}}
@@ -142,7 +146,7 @@
142146
</h2>
143147
<div class="content {{if eq $idx 0}}active{{end}}">
144148
<ul class="list">
145-
{{if $.Permission.CanRead $.UnitTypeCode}}
149+
{{if and (not .IsDraft) ($.Permission.CanRead $.UnitTypeCode)}}
146150
<li>
147151
<a class="archive-link" data-url="{{$.RepoLink}}/archive/{{.TagName | EscapePound}}.zip" rel="nofollow"><strong>{{svg "octicon-file-zip" 16 "mr-2"}}{{$.i18n.Tr "repo.release.source_code"}} (ZIP)</strong></a>
148152
</li>

0 commit comments

Comments
 (0)