[API] enable paggination for ListRepoTags (#10454)
* enable paggination for repoTags * precalculate first, cut slice second * Apply suggestions from code review Co-Authored-By: guillep2k <18600385+guillep2k@users.noreply.github.com> Co-authored-by: guillep2k <18600385+guillep2k@users.noreply.github.com>
This commit is contained in:
parent
b098cc24c5
commit
4427a936b4
4 changed files with 38 additions and 3 deletions
|
@ -187,7 +187,7 @@ func (repo *Repository) GetTag(name string) (*Tag, error) {
|
|||
}
|
||||
|
||||
// GetTagInfos returns all tag infos of the repository.
|
||||
func (repo *Repository) GetTagInfos() ([]*Tag, error) {
|
||||
func (repo *Repository) GetTagInfos(page, pageSize int) ([]*Tag, error) {
|
||||
// TODO this a slow implementation, makes one git command per tag
|
||||
stdout, err := NewCommand("tag").RunInDir(repo.Path)
|
||||
if err != nil {
|
||||
|
@ -195,6 +195,18 @@ func (repo *Repository) GetTagInfos() ([]*Tag, error) {
|
|||
}
|
||||
|
||||
tagNames := strings.Split(strings.TrimRight(stdout, "\n"), "\n")
|
||||
|
||||
if page != 0 {
|
||||
skip := (page - 1) * pageSize
|
||||
if skip >= len(tagNames) {
|
||||
return nil, nil
|
||||
}
|
||||
if (len(tagNames) - skip) < pageSize {
|
||||
pageSize = len(tagNames) - skip
|
||||
}
|
||||
tagNames = tagNames[skip : skip+pageSize]
|
||||
}
|
||||
|
||||
var tags = make([]*Tag, 0, len(tagNames))
|
||||
for _, tagName := range tagNames {
|
||||
tagName = strings.TrimSpace(tagName)
|
||||
|
|
|
@ -18,7 +18,7 @@ func TestRepository_GetTags(t *testing.T) {
|
|||
assert.NoError(t, err)
|
||||
defer bareRepo1.Close()
|
||||
|
||||
tags, err := bareRepo1.GetTagInfos()
|
||||
tags, err := bareRepo1.GetTagInfos(0, 0)
|
||||
assert.NoError(t, err)
|
||||
assert.Len(t, tags, 1)
|
||||
assert.EqualValues(t, "test", tags[0].Name)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue