* Make GetTags() api similar to GetBranches() * Use it for Tag/Release pagetags/v1.16.0-rc1
return | return | ||||
} | } | ||||
tags, err := ctx.Repo.GitRepo.GetTags() | |||||
tags, err := ctx.Repo.GitRepo.GetTags(0, 0) | |||||
if err != nil { | if err != nil { | ||||
ctx.ServerError("GetTags", err) | ctx.ServerError("GetTags", err) | ||||
return | return |
} | } | ||||
// GetTags returns all tags of the repository. | // 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 | var tagNames []string | ||||
tags, err := repo.gogitRepo.Tags() | tags, err := repo.gogitRepo.Tags() | ||||
tagNames[i], tagNames[j] = tagNames[j], tagNames[i] | 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 | return tagNames, nil | ||||
} | } |
} | } | ||||
// GetTags returns all tags of the repository. | // 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 | return | ||||
} | } |
} | } | ||||
} | } | ||||
} | } | ||||
tags, err := gitRepo.GetTags() | |||||
tags, err := gitRepo.GetTags(0, 0) | |||||
if err != nil { | if err != nil { | ||||
return fmt.Errorf("GetTags: %v", err) | return fmt.Errorf("GetTags: %v", err) | ||||
} | } |
if err != nil { | if err != nil { | ||||
return false, nil, nil, err | return false, nil, nil, err | ||||
} | } | ||||
tags, err := gitRepo.GetTags() | |||||
tags, err := gitRepo.GetTags(0, 0) | |||||
if err != nil { | if err != nil { | ||||
return false, nil, nil, err | return false, nil, nil, err | ||||
} | } | ||||
} | } | ||||
baseGitRepo := ctx.Repo.GitRepo | baseGitRepo := ctx.Repo.GitRepo | ||||
baseTags, err := baseGitRepo.GetTags() | |||||
baseTags, err := baseGitRepo.GetTags(0, 0) | |||||
if err != nil { | if err != nil { | ||||
ctx.ServerError("GetTags", err) | ctx.ServerError("GetTags", err) | ||||
return | return | ||||
} | } | ||||
ctx.Data["HeadBranches"] = headBranches | ctx.Data["HeadBranches"] = headBranches | ||||
headTags, err := headGitRepo.GetTags() | |||||
headTags, err := headGitRepo.GetTags(0, 0) | |||||
if err != nil { | if err != nil { | ||||
ctx.ServerError("GetTags", err) | ctx.ServerError("GetTags", err) | ||||
return | return |
ctx.Data["PageIsTagList"] = false | 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 { | if err != nil { | ||||
ctx.ServerError("GetTags", err) | ctx.ServerError("GetTags", err) | ||||
return | return | ||||
writeAccess := ctx.Repo.CanWrite(models.UnitTypeReleases) | writeAccess := ctx.Repo.CanWrite(models.UnitTypeReleases) | ||||
ctx.Data["CanCreateRelease"] = writeAccess && !ctx.Repo.Repository.IsArchived | 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{ | opts := models.FindReleasesOptions{ | ||||
ListOptions: models.ListOptions{ | |||||
Page: ctx.FormInt("page"), | |||||
PageSize: limit, | |||||
}, | |||||
ListOptions: listOptions, | |||||
IncludeDrafts: writeAccess && !isTagList, | IncludeDrafts: writeAccess && !isTagList, | ||||
IncludeTags: isTagList, | IncludeTags: isTagList, | ||||
} | } |