Use the same mechanism as the webpage for calculating the release count Fix #10946tags/v1.21.12.1
| @@ -209,13 +209,31 @@ func getRepo(t *testing.T, repoID int64) *models.Repository { | |||||
| func TestAPIViewRepo(t *testing.T) { | func TestAPIViewRepo(t *testing.T) { | ||||
| defer prepareTestEnv(t)() | defer prepareTestEnv(t)() | ||||
| var repo api.Repository | |||||
| req := NewRequest(t, "GET", "/api/v1/repos/user2/repo1") | req := NewRequest(t, "GET", "/api/v1/repos/user2/repo1") | ||||
| resp := MakeRequest(t, req, http.StatusOK) | resp := MakeRequest(t, req, http.StatusOK) | ||||
| var repo api.Repository | |||||
| DecodeJSON(t, resp, &repo) | DecodeJSON(t, resp, &repo) | ||||
| assert.EqualValues(t, 1, repo.ID) | assert.EqualValues(t, 1, repo.ID) | ||||
| assert.EqualValues(t, "repo1", repo.Name) | assert.EqualValues(t, "repo1", repo.Name) | ||||
| assert.EqualValues(t, 1, repo.Releases) | |||||
| assert.EqualValues(t, 1, repo.OpenIssues) | |||||
| assert.EqualValues(t, 3, repo.OpenPulls) | |||||
| req = NewRequest(t, "GET", "/api/v1/repos/user12/repo10") | |||||
| resp = MakeRequest(t, req, http.StatusOK) | |||||
| DecodeJSON(t, resp, &repo) | |||||
| assert.EqualValues(t, 10, repo.ID) | |||||
| assert.EqualValues(t, "repo10", repo.Name) | |||||
| assert.EqualValues(t, 1, repo.OpenPulls) | |||||
| assert.EqualValues(t, 1, repo.Forks) | |||||
| req = NewRequest(t, "GET", "/api/v1/repos/user5/repo4") | |||||
| resp = MakeRequest(t, req, http.StatusOK) | |||||
| DecodeJSON(t, resp, &repo) | |||||
| assert.EqualValues(t, 4, repo.ID) | |||||
| assert.EqualValues(t, "repo4", repo.Name) | |||||
| assert.EqualValues(t, 1, repo.Stars) | |||||
| } | } | ||||
| func TestAPIOrgRepos(t *testing.T) { | func TestAPIOrgRepos(t *testing.T) { | ||||
| @@ -166,7 +166,6 @@ type Repository struct { | |||||
| NumMilestones int `xorm:"NOT NULL DEFAULT 0"` | NumMilestones int `xorm:"NOT NULL DEFAULT 0"` | ||||
| NumClosedMilestones int `xorm:"NOT NULL DEFAULT 0"` | NumClosedMilestones int `xorm:"NOT NULL DEFAULT 0"` | ||||
| NumOpenMilestones int `xorm:"-"` | NumOpenMilestones int `xorm:"-"` | ||||
| NumReleases int `xorm:"-"` | |||||
| IsPrivate bool `xorm:"INDEX"` | IsPrivate bool `xorm:"INDEX"` | ||||
| IsEmpty bool `xorm:"INDEX"` | IsEmpty bool `xorm:"INDEX"` | ||||
| @@ -353,6 +352,8 @@ func (repo *Repository) innerAPIFormat(e Engine, mode AccessMode, isParent bool) | |||||
| repo.mustOwner(e) | repo.mustOwner(e) | ||||
| numReleases, _ := GetReleaseCountByRepoID(repo.ID, FindReleasesOptions{IncludeDrafts: false, IncludeTags: true}) | |||||
| return &api.Repository{ | return &api.Repository{ | ||||
| ID: repo.ID, | ID: repo.ID, | ||||
| Owner: repo.Owner.APIFormat(), | Owner: repo.Owner.APIFormat(), | ||||
| @@ -376,7 +377,7 @@ func (repo *Repository) innerAPIFormat(e Engine, mode AccessMode, isParent bool) | |||||
| Watchers: repo.NumWatches, | Watchers: repo.NumWatches, | ||||
| OpenIssues: repo.NumOpenIssues, | OpenIssues: repo.NumOpenIssues, | ||||
| OpenPulls: repo.NumOpenPulls, | OpenPulls: repo.NumOpenPulls, | ||||
| Releases: repo.NumReleases, | |||||
| Releases: int(numReleases), | |||||
| DefaultBranch: repo.DefaultBranch, | DefaultBranch: repo.DefaultBranch, | ||||
| Created: repo.CreatedUnix.AsTime(), | Created: repo.CreatedUnix.AsTime(), | ||||
| Updated: repo.UpdatedUnix.AsTime(), | Updated: repo.UpdatedUnix.AsTime(), | ||||
| @@ -439,7 +439,7 @@ func RepoAssignment() macaron.Handler { | |||||
| ctx.Data["RepoExternalIssuesLink"] = unit.ExternalTrackerConfig().ExternalTrackerURL | ctx.Data["RepoExternalIssuesLink"] = unit.ExternalTrackerConfig().ExternalTrackerURL | ||||
| } | } | ||||
| count, err := models.GetReleaseCountByRepoID(ctx.Repo.Repository.ID, models.FindReleasesOptions{ | |||||
| ctx.Data["NumReleases"], err = models.GetReleaseCountByRepoID(ctx.Repo.Repository.ID, models.FindReleasesOptions{ | |||||
| IncludeDrafts: false, | IncludeDrafts: false, | ||||
| IncludeTags: true, | IncludeTags: true, | ||||
| }) | }) | ||||
| @@ -447,7 +447,6 @@ func RepoAssignment() macaron.Handler { | |||||
| ctx.ServerError("GetReleaseCountByRepoID", err) | ctx.ServerError("GetReleaseCountByRepoID", err) | ||||
| return | return | ||||
| } | } | ||||
| ctx.Repo.Repository.NumReleases = int(count) | |||||
| ctx.Data["Title"] = owner.Name + "/" + repo.Name | ctx.Data["Title"] = owner.Name + "/" + repo.Name | ||||
| ctx.Data["Repository"] = repo | ctx.Data["Repository"] = repo | ||||
| @@ -117,7 +117,7 @@ | |||||
| {{if and (.Permission.CanRead $.UnitTypeReleases) (not .IsEmptyRepo) }} | {{if and (.Permission.CanRead $.UnitTypeReleases) (not .IsEmptyRepo) }} | ||||
| <a class="{{if .PageIsReleaseList}}active{{end}} item" href="{{.RepoLink}}/releases"> | <a class="{{if .PageIsReleaseList}}active{{end}} item" href="{{.RepoLink}}/releases"> | ||||
| {{svg "octicon-tag" 16}} {{.i18n.Tr "repo.releases"}} <span class="ui {{if not .Repository.NumReleases}}gray{{else}}blue{{end}} small label">{{.Repository.NumReleases}}</span> | |||||
| {{svg "octicon-tag" 16}} {{.i18n.Tr "repo.releases"}} <span class="ui {{if not .NumReleases}}gray{{else}}blue{{end}} small label">{{.NumReleases}}</span> | |||||
| </a> | </a> | ||||
| {{end}} | {{end}} | ||||