mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Fix release counter on API repository info (#10968)
Use the same mechanism as the webpage for calculating the release count Fix #10946
This commit is contained in:
		@@ -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}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user