Skip to content

Commit b900c04

Browse files
ethantkoeniglunny
authored andcommitted
Display draft releases (#1854)
* Display draft releases * Include ctx.User in user cache * Integration test
1 parent 036ce3f commit b900c04

File tree

3 files changed

+53
-75
lines changed

3 files changed

+53
-75
lines changed

integrations/release_test.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// Copyright 2017 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package integrations
6+
7+
import (
8+
"net/http"
9+
"testing"
10+
11+
"github.com/stretchr/testify/assert"
12+
)
13+
14+
func TestViewReleases(t *testing.T) {
15+
prepareTestEnv(t)
16+
17+
session := loginUser(t, "user2", "password")
18+
req, err := http.NewRequest("GET", "/user2/repo1/releases", nil)
19+
assert.NoError(t, err)
20+
resp := session.MakeRequest(t, req)
21+
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
22+
}

models/fixtures/repo_unit.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,14 @@
2525
-
2626
id: 4
2727
repo_id: 1
28+
type: 5
29+
index: 0
30+
config: "{}"
31+
created_unix: 946684810
32+
33+
-
34+
id: 5
35+
repo_id: 1
2836
type: 7
2937
index: 0
3038
config: "{}"

routers/repo/release.go

Lines changed: 23 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,8 @@
55
package repo
66

77
import (
8-
"errors"
98
"fmt"
109

11-
"code.gitea.io/git"
1210
"code.gitea.io/gitea/models"
1311
"code.gitea.io/gitea/modules/auth"
1412
"code.gitea.io/gitea/modules/base"
@@ -67,35 +65,7 @@ func Releases(ctx *context.Context) {
6765
limit = 10
6866
}
6967

70-
rawTags, err := ctx.Repo.GitRepo.GetTagInfos(git.TagOption{})
71-
if err != nil {
72-
ctx.Handle(500, "GetTags", err)
73-
return
74-
}
75-
76-
if len(rawTags) == 0 {
77-
ctx.HTML(200, tplReleases)
78-
return
79-
}
80-
81-
if len(rawTags) <= (page-1)*limit {
82-
ctx.Handle(500, "Releases", errors.New("no more pages"))
83-
return
84-
}
85-
86-
var tags []*git.Tag
87-
if page*limit > len(rawTags) {
88-
tags = rawTags[(page-1)*limit:]
89-
} else {
90-
tags = rawTags[(page-1)*limit : page*limit]
91-
}
92-
93-
var tagNames []string
94-
for _, t := range tags {
95-
tagNames = append(tagNames, t.Name)
96-
}
97-
98-
releases, err := models.GetReleasesByRepoIDAndNames(ctx.Repo.Repository.ID, tagNames)
68+
releases, err := models.GetReleasesByRepoID(ctx.Repo.Repository.ID, page, limit)
9969
if err != nil {
10070
ctx.Handle(500, "GetReleasesByRepoIDAndNames", err)
10171
return
@@ -107,61 +77,39 @@ func Releases(ctx *context.Context) {
10777
return
10878
}
10979

110-
// Temproray cache commits count of used branches to speed up.
80+
// Temporary cache commits count of used branches to speed up.
11181
countCache := make(map[string]int64)
112-
var cacheUsers = make(map[int64]*models.User)
82+
cacheUsers := map[int64]*models.User{ctx.User.ID: ctx.User}
11383
var ok bool
114-
releaseTags := make([]*models.Release, len(tags))
115-
for i, rawTag := range tags {
116-
for _, r := range releases {
117-
if r.IsDraft && !ctx.Repo.IsOwner() {
118-
continue
119-
}
120-
if r.TagName == rawTag.Name {
121-
if r.Publisher, ok = cacheUsers[r.PublisherID]; !ok {
122-
r.Publisher, err = models.GetUserByID(r.PublisherID)
123-
if err != nil {
124-
if models.IsErrUserNotExist(err) {
125-
r.Publisher = models.NewGhostUser()
126-
} else {
127-
ctx.Handle(500, "GetUserByID", err)
128-
return
129-
}
130-
}
131-
cacheUsers[r.PublisherID] = r.Publisher
132-
}
13384

134-
if err := calReleaseNumCommitsBehind(ctx.Repo, r, countCache); err != nil {
135-
ctx.Handle(500, "calReleaseNumCommitsBehind", err)
85+
releasesToDisplay := make([]*models.Release, 0, len(releases))
86+
for _, r := range releases {
87+
if r.IsDraft && !ctx.Repo.IsOwner() {
88+
continue
89+
}
90+
if r.Publisher, ok = cacheUsers[r.PublisherID]; !ok {
91+
r.Publisher, err = models.GetUserByID(r.PublisherID)
92+
if err != nil {
93+
if models.IsErrUserNotExist(err) {
94+
r.Publisher = models.NewGhostUser()
95+
} else {
96+
ctx.Handle(500, "GetUserByID", err)
13697
return
13798
}
138-
139-
r.Note = markdown.RenderString(r.Note, ctx.Repo.RepoLink, ctx.Repo.Repository.ComposeMetas())
140-
releaseTags[i] = r
141-
break
14299
}
100+
cacheUsers[r.PublisherID] = r.Publisher
143101
}
144-
145-
if releaseTags[i] == nil {
146-
releaseTags[i] = &models.Release{
147-
Title: rawTag.Name,
148-
TagName: rawTag.Name,
149-
Sha1: rawTag.Object.String(),
150-
Note: rawTag.Message,
151-
}
152-
153-
releaseTags[i].NumCommits, err = git.CommitsCount(ctx.Repo.GitRepo.Path, rawTag.Object.String())
154-
if err != nil {
155-
ctx.Handle(500, "CommitsCount", err)
156-
return
157-
}
158-
releaseTags[i].NumCommitsBehind = ctx.Repo.CommitsCount - releaseTags[i].NumCommits
102+
if err := calReleaseNumCommitsBehind(ctx.Repo, r, countCache); err != nil {
103+
ctx.Handle(500, "calReleaseNumCommitsBehind", err)
104+
return
159105
}
106+
r.Note = markdown.RenderString(r.Note, ctx.Repo.RepoLink, ctx.Repo.Repository.ComposeMetas())
107+
releasesToDisplay = append(releasesToDisplay, r)
160108
}
161109

162-
pager := paginater.New(len(rawTags), limit, page, 5)
110+
pager := paginater.New(len(releases), limit, page, 5)
163111
ctx.Data["Page"] = pager
164-
ctx.Data["Releases"] = releaseTags
112+
ctx.Data["Releases"] = releasesToDisplay
165113
ctx.HTML(200, tplReleases)
166114
}
167115

0 commit comments

Comments
 (0)