Skip to content

Commit a83fb3a

Browse files
authored
fix some ui bug about draft release (#15137) (#15745)
* 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 f9b1fac commit a83fb3a

File tree

6 files changed

+122
-17
lines changed

6 files changed

+122
-17
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
@@ -722,7 +722,7 @@ func getRefName(ctx *Context, pathType RepoRefType) string {
722722

723723
// RepoRefByType handles repository reference name for a specific type
724724
// of repository reference
725-
func RepoRefByType(refType RepoRefType) func(*Context) {
725+
func RepoRefByType(refType RepoRefType, ignoreNotExistErr ...bool) func(*Context) {
726726
return func(ctx *Context) {
727727
// Empty repository does not have reference information.
728728
if ctx.Repo.Repository.IsEmpty {
@@ -811,6 +811,9 @@ func RepoRefByType(refType RepoRefType) func(*Context) {
811811
util.URLJoin(setting.AppURL, strings.Replace(ctx.Req.URL.RequestURI(), refName, ctx.Repo.Commit.ID.String(), 1))))
812812
}
813813
} else {
814+
if len(ignoreNotExistErr) > 0 && ignoreNotExistErr[0] {
815+
return
816+
}
814817
ctx.NotFound("RepoRef invalid repo", fmt.Errorf("branch or tag not exist: %s", refName))
815818
return
816819
}

routers/repo/release.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ func releasesOrTags(ctx *context.Context, isTagList bool) {
8585
Page: ctx.QueryInt("page"),
8686
PageSize: convert.ToCorrectPageSize(ctx.QueryInt("limit")),
8787
},
88-
IncludeDrafts: writeAccess,
88+
IncludeDrafts: writeAccess && !isTagList,
8989
IncludeTags: isTagList,
9090
}
9191

@@ -127,6 +127,11 @@ func releasesOrTags(ctx *context.Context, isTagList bool) {
127127
}
128128
cacheUsers[r.PublisherID] = r.Publisher
129129
}
130+
131+
if r.IsDraft {
132+
continue
133+
}
134+
130135
if err := calReleaseNumCommitsBehind(ctx.Repo, r, countCache); err != nil {
131136
ctx.ServerError("calReleaseNumCommitsBehind", err)
132137
return
@@ -177,9 +182,11 @@ func SingleRelease(ctx *context.Context) {
177182
return
178183
}
179184
}
180-
if err := calReleaseNumCommitsBehind(ctx.Repo, release, make(map[string]int64)); err != nil {
181-
ctx.ServerError("calReleaseNumCommitsBehind", err)
182-
return
185+
if !release.IsDraft {
186+
if err := calReleaseNumCommitsBehind(ctx.Repo, release, make(map[string]int64)); err != nil {
187+
ctx.ServerError("calReleaseNumCommitsBehind", err)
188+
return
189+
}
183190
}
184191
release.Note = markdown.RenderString(release.Note, ctx.Repo.RepoLink, ctx.Repo.Repository.ComposeMetas())
185192

routers/routes/web.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -901,8 +901,8 @@ func RegisterRoutes(m *web.Route) {
901901
m.Get("/", repo.Releases)
902902
m.Get("/tag/*", repo.SingleRelease)
903903
m.Get("/latest", repo.LatestRelease)
904-
m.Get("/attachments/{uuid}", repo.GetAttachment)
905-
}, repo.MustBeNotEmpty, reqRepoReleaseReader, context.RepoRefByType(context.RepoRefTag))
904+
}, repo.MustBeNotEmpty, reqRepoReleaseReader, context.RepoRefByType(context.RepoRefTag, true))
905+
m.Get("/releases/attachments/{uuid}", repo.GetAttachment, repo.MustBeNotEmpty, reqRepoReleaseReader)
906906
m.Group("/releases", func() {
907907
m.Get("/new", repo.NewRelease)
908908
m.Post("/new", bindIgnErr(auth.NewReleaseForm{}), repo.NewReleasePost)

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
{{end}}
8486
</div>
8587
<div class="ui twelve wide column detail">
@@ -127,9 +129,11 @@
127129
{{$.i18n.Tr "repo.released_this"}}
128130
</span>
129131
{{if .CreatedUnix}}
130-
<span class="time">{{TimeSinceUnix .CreatedUnix $.Lang}}</span> |
132+
<span class="time">{{TimeSinceUnix .CreatedUnix $.Lang}}</span>
133+
{{end}}
134+
{{if not .IsDraft}}
135+
| <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>
131136
{{end}}
132-
<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>
133137
</p>
134138
<div class="markdown desc">
135139
{{Str2html .Note}}
@@ -141,7 +145,7 @@
141145
</h2>
142146
<div class="content {{if eq $idx 0}}active{{end}}">
143147
<ul class="list">
144-
{{if $.Permission.CanRead $.UnitTypeCode}}
148+
{{if and (not .IsDraft) ($.Permission.CanRead $.UnitTypeCode)}}
145149
<li>
146150
<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>
147151
</li>

0 commit comments

Comments
 (0)