* Make GetTags() api similar to GetBranches() * Use it for Tag/Release pagetags/v1.16.0-rc1
@@ -547,7 +547,7 @@ func RepoAssignment(ctx *Context) (cancel context.CancelFunc) { | |||
return | |||
} | |||
tags, err := ctx.Repo.GitRepo.GetTags() | |||
tags, err := ctx.Repo.GitRepo.GetTags(0, 0) | |||
if err != nil { | |||
ctx.ServerError("GetTags", err) | |||
return |
@@ -21,7 +21,8 @@ func (repo *Repository) IsTagExist(name string) bool { | |||
} | |||
// GetTags returns all tags of the repository. | |||
func (repo *Repository) GetTags() ([]string, error) { | |||
// returning at most limit tags, or all if limit is 0. | |||
func (repo *Repository) GetTags(skip, limit int) ([]string, error) { | |||
var tagNames []string | |||
tags, err := repo.gogitRepo.Tags() | |||
@@ -40,5 +41,15 @@ func (repo *Repository) GetTags() ([]string, error) { | |||
tagNames[i], tagNames[j] = tagNames[j], tagNames[i] | |||
} | |||
// since we have to reverse order we can paginate only afterwards | |||
if len(tagNames) < skip { | |||
tagNames = []string{} | |||
} else { | |||
tagNames = tagNames[skip:] | |||
} | |||
if limit != 0 && len(tagNames) > limit { | |||
tagNames = tagNames[:limit] | |||
} | |||
return tagNames, nil | |||
} |
@@ -18,7 +18,8 @@ func (repo *Repository) IsTagExist(name string) bool { | |||
} | |||
// GetTags returns all tags of the repository. | |||
func (repo *Repository) GetTags() (tags []string, err error) { | |||
tags, _, err = callShowRef(repo.Path, TagPrefix, "--tags", 0, 0) | |||
// returning at most limit tags, or all if limit is 0. | |||
func (repo *Repository) GetTags(skip, limit int) (tags []string, err error) { | |||
tags, _, err = callShowRef(repo.Path, TagPrefix, "--tags", skip, limit) | |||
return | |||
} |
@@ -250,7 +250,7 @@ func SyncReleasesWithTags(repo *models.Repository, gitRepo *git.Repository) erro | |||
} | |||
} | |||
} | |||
tags, err := gitRepo.GetTags() | |||
tags, err := gitRepo.GetTags(0, 0) | |||
if err != nil { | |||
return fmt.Errorf("GetTags: %v", err) | |||
} |
@@ -606,7 +606,7 @@ func getBranchesAndTagsForRepo(user *models.User, repo *models.Repository) (bool | |||
if err != nil { | |||
return false, nil, nil, err | |||
} | |||
tags, err := gitRepo.GetTags() | |||
tags, err := gitRepo.GetTags(0, 0) | |||
if err != nil { | |||
return false, nil, nil, err | |||
} | |||
@@ -632,7 +632,7 @@ func CompareDiff(ctx *context.Context) { | |||
} | |||
baseGitRepo := ctx.Repo.GitRepo | |||
baseTags, err := baseGitRepo.GetTags() | |||
baseTags, err := baseGitRepo.GetTags(0, 0) | |||
if err != nil { | |||
ctx.ServerError("GetTags", err) | |||
return | |||
@@ -646,7 +646,7 @@ func CompareDiff(ctx *context.Context) { | |||
} | |||
ctx.Data["HeadBranches"] = headBranches | |||
headTags, err := headGitRepo.GetTags() | |||
headTags, err := headGitRepo.GetTags(0, 0) | |||
if err != nil { | |||
ctx.ServerError("GetTags", err) | |||
return |
@@ -83,7 +83,18 @@ func releasesOrTags(ctx *context.Context, isTagList bool) { | |||
ctx.Data["PageIsTagList"] = false | |||
} | |||
tags, err := ctx.Repo.GitRepo.GetTags() | |||
listOptions := models.ListOptions{ | |||
Page: ctx.FormInt("page"), | |||
PageSize: ctx.FormInt("limit"), | |||
} | |||
if listOptions.PageSize == 0 { | |||
listOptions.PageSize = setting.Repository.Release.DefaultPagingNum | |||
} | |||
if listOptions.PageSize > setting.API.MaxResponseItems { | |||
listOptions.PageSize = setting.API.MaxResponseItems | |||
} | |||
tags, err := ctx.Repo.GitRepo.GetTags(listOptions.GetStartEnd()) | |||
if err != nil { | |||
ctx.ServerError("GetTags", err) | |||
return | |||
@@ -92,19 +103,9 @@ func releasesOrTags(ctx *context.Context, isTagList bool) { | |||
writeAccess := ctx.Repo.CanWrite(models.UnitTypeReleases) | |||
ctx.Data["CanCreateRelease"] = writeAccess && !ctx.Repo.Repository.IsArchived | |||
limit := ctx.FormInt("limit") | |||
if limit == 0 { | |||
limit = setting.Repository.Release.DefaultPagingNum | |||
} | |||
if limit > setting.API.MaxResponseItems { | |||
limit = setting.API.MaxResponseItems | |||
} | |||
opts := models.FindReleasesOptions{ | |||
ListOptions: models.ListOptions{ | |||
Page: ctx.FormInt("page"), | |||
PageSize: limit, | |||
}, | |||
ListOptions: listOptions, | |||
IncludeDrafts: writeAccess && !isTagList, | |||
IncludeTags: isTagList, | |||
} |