From b900c04316145a447f70d4d222398d94d74a9fb9 Mon Sep 17 00:00:00 2001 From: Ethan Koenig Date: Fri, 2 Jun 2017 23:46:56 -0400 Subject: [PATCH] Display draft releases (#1854) * Display draft releases * Include ctx.User in user cache * Integration test --- integrations/release_test.go | 22 ++++++++ models/fixtures/repo_unit.yml | 8 +++ routers/repo/release.go | 98 ++++++++--------------------------- 3 files changed, 53 insertions(+), 75 deletions(-) create mode 100644 integrations/release_test.go diff --git a/integrations/release_test.go b/integrations/release_test.go new file mode 100644 index 0000000000..ec8ad360f4 --- /dev/null +++ b/integrations/release_test.go @@ -0,0 +1,22 @@ +// Copyright 2017 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package integrations + +import ( + "net/http" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestViewReleases(t *testing.T) { + prepareTestEnv(t) + + session := loginUser(t, "user2", "password") + req, err := http.NewRequest("GET", "/user2/repo1/releases", nil) + assert.NoError(t, err) + resp := session.MakeRequest(t, req) + assert.EqualValues(t, http.StatusOK, resp.HeaderCode) +} diff --git a/models/fixtures/repo_unit.yml b/models/fixtures/repo_unit.yml index fafd79471a..5601d65665 100644 --- a/models/fixtures/repo_unit.yml +++ b/models/fixtures/repo_unit.yml @@ -25,6 +25,14 @@ - id: 4 repo_id: 1 + type: 5 + index: 0 + config: "{}" + created_unix: 946684810 + +- + id: 5 + repo_id: 1 type: 7 index: 0 config: "{}" diff --git a/routers/repo/release.go b/routers/repo/release.go index d8b7faf21a..4308b07416 100644 --- a/routers/repo/release.go +++ b/routers/repo/release.go @@ -5,10 +5,8 @@ package repo import ( - "errors" "fmt" - "code.gitea.io/git" "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/auth" "code.gitea.io/gitea/modules/base" @@ -67,35 +65,7 @@ func Releases(ctx *context.Context) { limit = 10 } - rawTags, err := ctx.Repo.GitRepo.GetTagInfos(git.TagOption{}) - if err != nil { - ctx.Handle(500, "GetTags", err) - return - } - - if len(rawTags) == 0 { - ctx.HTML(200, tplReleases) - return - } - - if len(rawTags) <= (page-1)*limit { - ctx.Handle(500, "Releases", errors.New("no more pages")) - return - } - - var tags []*git.Tag - if page*limit > len(rawTags) { - tags = rawTags[(page-1)*limit:] - } else { - tags = rawTags[(page-1)*limit : page*limit] - } - - var tagNames []string - for _, t := range tags { - tagNames = append(tagNames, t.Name) - } - - releases, err := models.GetReleasesByRepoIDAndNames(ctx.Repo.Repository.ID, tagNames) + releases, err := models.GetReleasesByRepoID(ctx.Repo.Repository.ID, page, limit) if err != nil { ctx.Handle(500, "GetReleasesByRepoIDAndNames", err) return @@ -107,61 +77,39 @@ func Releases(ctx *context.Context) { return } - // Temproray cache commits count of used branches to speed up. + // Temporary cache commits count of used branches to speed up. countCache := make(map[string]int64) - var cacheUsers = make(map[int64]*models.User) + cacheUsers := map[int64]*models.User{ctx.User.ID: ctx.User} var ok bool - releaseTags := make([]*models.Release, len(tags)) - for i, rawTag := range tags { - for _, r := range releases { - if r.IsDraft && !ctx.Repo.IsOwner() { - continue - } - if r.TagName == rawTag.Name { - if r.Publisher, ok = cacheUsers[r.PublisherID]; !ok { - r.Publisher, err = models.GetUserByID(r.PublisherID) - if err != nil { - if models.IsErrUserNotExist(err) { - r.Publisher = models.NewGhostUser() - } else { - ctx.Handle(500, "GetUserByID", err) - return - } - } - cacheUsers[r.PublisherID] = r.Publisher - } - if err := calReleaseNumCommitsBehind(ctx.Repo, r, countCache); err != nil { - ctx.Handle(500, "calReleaseNumCommitsBehind", err) + releasesToDisplay := make([]*models.Release, 0, len(releases)) + for _, r := range releases { + if r.IsDraft && !ctx.Repo.IsOwner() { + continue + } + if r.Publisher, ok = cacheUsers[r.PublisherID]; !ok { + r.Publisher, err = models.GetUserByID(r.PublisherID) + if err != nil { + if models.IsErrUserNotExist(err) { + r.Publisher = models.NewGhostUser() + } else { + ctx.Handle(500, "GetUserByID", err) return } - - r.Note = markdown.RenderString(r.Note, ctx.Repo.RepoLink, ctx.Repo.Repository.ComposeMetas()) - releaseTags[i] = r - break } + cacheUsers[r.PublisherID] = r.Publisher } - - if releaseTags[i] == nil { - releaseTags[i] = &models.Release{ - Title: rawTag.Name, - TagName: rawTag.Name, - Sha1: rawTag.Object.String(), - Note: rawTag.Message, - } - - releaseTags[i].NumCommits, err = git.CommitsCount(ctx.Repo.GitRepo.Path, rawTag.Object.String()) - if err != nil { - ctx.Handle(500, "CommitsCount", err) - return - } - releaseTags[i].NumCommitsBehind = ctx.Repo.CommitsCount - releaseTags[i].NumCommits + if err := calReleaseNumCommitsBehind(ctx.Repo, r, countCache); err != nil { + ctx.Handle(500, "calReleaseNumCommitsBehind", err) + return } + r.Note = markdown.RenderString(r.Note, ctx.Repo.RepoLink, ctx.Repo.Repository.ComposeMetas()) + releasesToDisplay = append(releasesToDisplay, r) } - pager := paginater.New(len(rawTags), limit, page, 5) + pager := paginater.New(len(releases), limit, page, 5) ctx.Data["Page"] = pager - ctx.Data["Releases"] = releaseTags + ctx.Data["Releases"] = releasesToDisplay ctx.HTML(200, tplReleases) }