Revert to forge internal implementation of pagination for Repos() and Teams() for gitea/forgejo (#5679)

This commit is contained in:
6543
2025-11-02 22:16:01 +01:00
committed by GitHub
parent cbf01c6d3b
commit 800e8eb17f
2 changed files with 74 additions and 62 deletions

View File

@@ -180,24 +180,31 @@ func (c *Forgejo) Refresh(ctx context.Context, user *model.User) (bool, error) {
// Teams is supported by the Forgejo driver.
func (c *Forgejo) Teams(ctx context.Context, u *model.User, p *model.ListOptions) ([]*model.Team, error) {
// we paginate internally (https://github.com/woodpecker-ci/woodpecker/issues/5667)
if p.Page != 1 {
return nil, nil
}
client, err := c.newClientToken(ctx, u.AccessToken)
if err != nil {
return nil, err
}
orgs, _, err := client.ListMyOrgs(
forgejo.ListOrgsOptions{
ListOptions: forgejo.ListOptions{
Page: p.Page,
PageSize: c.perPage(ctx, p.PerPage),
return shared_utils.Paginate(func(page int) ([]*model.Team, error) {
orgs, _, err := client.ListMyOrgs(
forgejo.ListOrgsOptions{
ListOptions: forgejo.ListOptions{
Page: page,
PageSize: c.perPage(ctx),
},
},
},
)
teams := make([]*model.Team, 0, len(orgs))
for _, org := range orgs {
teams = append(teams, toTeam(org, c.url))
}
return teams, err
)
teams := make([]*model.Team, 0, len(orgs))
for _, org := range orgs {
teams = append(teams, toTeam(org, c.url))
}
return teams, err
}, -1)
}
// TeamPerm is not supported by the Forgejo driver.
@@ -234,22 +241,27 @@ func (c *Forgejo) Repo(ctx context.Context, u *model.User, remoteID model.ForgeR
// Repos returns a list of all repositories for the Forgejo account, including
// organization repositories.
func (c *Forgejo) Repos(ctx context.Context, u *model.User, p *model.ListOptions) ([]*model.Repo, error) {
// we paginate internally (https://github.com/woodpecker-ci/woodpecker/issues/5667)
if p.Page != 1 {
return nil, nil
}
client, err := c.newClientToken(ctx, u.AccessToken)
if err != nil {
return nil, err
}
repos, _, err := client.ListMyRepos(
forgejo.ListReposOptions{
ListOptions: forgejo.ListOptions{
Page: p.Page,
PageSize: c.perPage(ctx, p.PerPage),
repos, err := shared_utils.Paginate(func(page int) ([]*forgejo.Repository, error) {
repos, _, err := client.ListMyRepos(
forgejo.ListReposOptions{
ListOptions: forgejo.ListOptions{
Page: page,
PageSize: c.perPage(ctx),
},
},
},
)
if err != nil {
return nil, err
}
)
return repos, err
}, -1)
result := make([]*model.Repo, 0, len(repos))
for _, repo := range repos {
@@ -401,7 +413,7 @@ func (c *Forgejo) Deactivate(ctx context.Context, u *model.User, r *model.Repo,
hooks, _, err := client.ListRepoHooks(r.Owner, r.Name, forgejo.ListHooksOptions{
ListOptions: forgejo.ListOptions{
Page: page,
PageSize: c.perPage(ctx, c.pageSize),
PageSize: c.perPage(ctx),
},
})
return hooks, err
@@ -674,7 +686,7 @@ func (c *Forgejo) getTagCommitSHA(ctx context.Context, repo *model.Repo, tagName
return tag.Commit.SHA, nil
}
func (c *Forgejo) perPage(ctx context.Context, customPerPage int) int {
func (c *Forgejo) perPage(ctx context.Context) int {
if c.pageSize == 0 {
client, err := c.newClientToken(ctx, "")
if err != nil {
@@ -687,11 +699,5 @@ func (c *Forgejo) perPage(ctx context.Context, customPerPage int) int {
}
c.pageSize = api.MaxResponseItems
}
pageSize := customPerPage
if pageSize == 0 || pageSize > c.pageSize {
pageSize = c.pageSize
}
return pageSize
return c.pageSize
}

View File

@@ -182,24 +182,31 @@ func (c *Gitea) Refresh(ctx context.Context, user *model.User) (bool, error) {
// Teams is supported by the Gitea driver.
func (c *Gitea) Teams(ctx context.Context, u *model.User, p *model.ListOptions) ([]*model.Team, error) {
// we paginate internally (https://github.com/woodpecker-ci/woodpecker/issues/5667)
if p.Page != 1 {
return nil, nil
}
client, err := c.newClientToken(ctx, u.AccessToken)
if err != nil {
return nil, err
}
orgs, _, err := client.ListMyOrgs(
gitea.ListOrgsOptions{
ListOptions: gitea.ListOptions{
Page: p.Page,
PageSize: c.perPage(ctx, p.PerPage),
return shared_utils.Paginate(func(page int) ([]*model.Team, error) {
orgs, _, err := client.ListMyOrgs(
gitea.ListOrgsOptions{
ListOptions: gitea.ListOptions{
Page: page,
PageSize: c.perPage(ctx),
},
},
},
)
teams := make([]*model.Team, 0, len(orgs))
for _, org := range orgs {
teams = append(teams, toTeam(org, c.url))
}
return teams, err
)
teams := make([]*model.Team, 0, len(orgs))
for _, org := range orgs {
teams = append(teams, toTeam(org, c.url))
}
return teams, err
}, -1)
}
// TeamPerm is not supported by the Gitea driver.
@@ -236,22 +243,27 @@ func (c *Gitea) Repo(ctx context.Context, u *model.User, remoteID model.ForgeRem
// Repos returns a list of all repositories for the Gitea account, including
// organization repositories.
func (c *Gitea) Repos(ctx context.Context, u *model.User, p *model.ListOptions) ([]*model.Repo, error) {
// we paginate internally (https://github.com/woodpecker-ci/woodpecker/issues/5667)
if p.Page != 1 {
return nil, nil
}
client, err := c.newClientToken(ctx, u.AccessToken)
if err != nil {
return nil, err
}
repos, _, err := client.ListMyRepos(
gitea.ListReposOptions{
ListOptions: gitea.ListOptions{
Page: p.Page,
PageSize: c.perPage(ctx, p.PerPage),
repos, err := shared_utils.Paginate(func(page int) ([]*gitea.Repository, error) {
repos, _, err := client.ListMyRepos(
gitea.ListReposOptions{
ListOptions: gitea.ListOptions{
Page: page,
PageSize: c.perPage(ctx),
},
},
},
)
if err != nil {
return nil, err
}
)
return repos, err
}, -1)
result := make([]*model.Repo, 0, len(repos))
for _, repo := range repos {
@@ -403,7 +415,7 @@ func (c *Gitea) Deactivate(ctx context.Context, u *model.User, r *model.Repo, li
hooks, _, err := client.ListRepoHooks(r.Owner, r.Name, gitea.ListHooksOptions{
ListOptions: gitea.ListOptions{
Page: page,
PageSize: c.perPage(ctx, c.pageSize),
PageSize: c.perPage(ctx),
},
})
return hooks, err
@@ -681,7 +693,7 @@ func (c *Gitea) getTagCommitSHA(ctx context.Context, repo *model.Repo, tagName s
return tag.Commit.SHA, nil
}
func (c *Gitea) perPage(ctx context.Context, customPerPage int) int {
func (c *Gitea) perPage(ctx context.Context) int {
if c.pageSize == 0 {
client, err := c.newClientToken(ctx, "")
if err != nil {
@@ -694,11 +706,5 @@ func (c *Gitea) perPage(ctx context.Context, customPerPage int) int {
}
c.pageSize = api.MaxResponseItems
}
pageSize := customPerPage
if pageSize == 0 || pageSize > c.pageSize {
pageSize = c.pageSize
}
return pageSize
return c.pageSize
}