Skip to content

Commit 800e8eb

Browse files
authored
Revert to forge internal implementation of pagination for Repos() and Teams() for gitea/forgejo (#5679)
1 parent cbf01c6 commit 800e8eb

2 files changed

Lines changed: 74 additions & 62 deletions

File tree

server/forge/forgejo/forgejo.go

Lines changed: 37 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -180,24 +180,31 @@ func (c *Forgejo) Refresh(ctx context.Context, user *model.User) (bool, error) {
180180

181181
// Teams is supported by the Forgejo driver.
182182
func (c *Forgejo) Teams(ctx context.Context, u *model.User, p *model.ListOptions) ([]*model.Team, error) {
183+
// we paginate internally (https://github.com/woodpecker-ci/woodpecker/issues/5667)
184+
if p.Page != 1 {
185+
return nil, nil
186+
}
187+
183188
client, err := c.newClientToken(ctx, u.AccessToken)
184189
if err != nil {
185190
return nil, err
186191
}
187192

188-
orgs, _, err := client.ListMyOrgs(
189-
forgejo.ListOrgsOptions{
190-
ListOptions: forgejo.ListOptions{
191-
Page: p.Page,
192-
PageSize: c.perPage(ctx, p.PerPage),
193+
return shared_utils.Paginate(func(page int) ([]*model.Team, error) {
194+
orgs, _, err := client.ListMyOrgs(
195+
forgejo.ListOrgsOptions{
196+
ListOptions: forgejo.ListOptions{
197+
Page: page,
198+
PageSize: c.perPage(ctx),
199+
},
193200
},
194-
},
195-
)
196-
teams := make([]*model.Team, 0, len(orgs))
197-
for _, org := range orgs {
198-
teams = append(teams, toTeam(org, c.url))
199-
}
200-
return teams, err
201+
)
202+
teams := make([]*model.Team, 0, len(orgs))
203+
for _, org := range orgs {
204+
teams = append(teams, toTeam(org, c.url))
205+
}
206+
return teams, err
207+
}, -1)
201208
}
202209

203210
// 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
234241
// Repos returns a list of all repositories for the Forgejo account, including
235242
// organization repositories.
236243
func (c *Forgejo) Repos(ctx context.Context, u *model.User, p *model.ListOptions) ([]*model.Repo, error) {
244+
// we paginate internally (https://github.com/woodpecker-ci/woodpecker/issues/5667)
245+
if p.Page != 1 {
246+
return nil, nil
247+
}
248+
237249
client, err := c.newClientToken(ctx, u.AccessToken)
238250
if err != nil {
239251
return nil, err
240252
}
241253

242-
repos, _, err := client.ListMyRepos(
243-
forgejo.ListReposOptions{
244-
ListOptions: forgejo.ListOptions{
245-
Page: p.Page,
246-
PageSize: c.perPage(ctx, p.PerPage),
254+
repos, err := shared_utils.Paginate(func(page int) ([]*forgejo.Repository, error) {
255+
repos, _, err := client.ListMyRepos(
256+
forgejo.ListReposOptions{
257+
ListOptions: forgejo.ListOptions{
258+
Page: page,
259+
PageSize: c.perPage(ctx),
260+
},
247261
},
248-
},
249-
)
250-
if err != nil {
251-
return nil, err
252-
}
262+
)
263+
return repos, err
264+
}, -1)
253265

254266
result := make([]*model.Repo, 0, len(repos))
255267
for _, repo := range repos {
@@ -401,7 +413,7 @@ func (c *Forgejo) Deactivate(ctx context.Context, u *model.User, r *model.Repo,
401413
hooks, _, err := client.ListRepoHooks(r.Owner, r.Name, forgejo.ListHooksOptions{
402414
ListOptions: forgejo.ListOptions{
403415
Page: page,
404-
PageSize: c.perPage(ctx, c.pageSize),
416+
PageSize: c.perPage(ctx),
405417
},
406418
})
407419
return hooks, err
@@ -674,7 +686,7 @@ func (c *Forgejo) getTagCommitSHA(ctx context.Context, repo *model.Repo, tagName
674686
return tag.Commit.SHA, nil
675687
}
676688

677-
func (c *Forgejo) perPage(ctx context.Context, customPerPage int) int {
689+
func (c *Forgejo) perPage(ctx context.Context) int {
678690
if c.pageSize == 0 {
679691
client, err := c.newClientToken(ctx, "")
680692
if err != nil {
@@ -687,11 +699,5 @@ func (c *Forgejo) perPage(ctx context.Context, customPerPage int) int {
687699
}
688700
c.pageSize = api.MaxResponseItems
689701
}
690-
691-
pageSize := customPerPage
692-
if pageSize == 0 || pageSize > c.pageSize {
693-
pageSize = c.pageSize
694-
}
695-
696-
return pageSize
702+
return c.pageSize
697703
}

server/forge/gitea/gitea.go

Lines changed: 37 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -182,24 +182,31 @@ func (c *Gitea) Refresh(ctx context.Context, user *model.User) (bool, error) {
182182

183183
// Teams is supported by the Gitea driver.
184184
func (c *Gitea) Teams(ctx context.Context, u *model.User, p *model.ListOptions) ([]*model.Team, error) {
185+
// we paginate internally (https://github.com/woodpecker-ci/woodpecker/issues/5667)
186+
if p.Page != 1 {
187+
return nil, nil
188+
}
189+
185190
client, err := c.newClientToken(ctx, u.AccessToken)
186191
if err != nil {
187192
return nil, err
188193
}
189194

190-
orgs, _, err := client.ListMyOrgs(
191-
gitea.ListOrgsOptions{
192-
ListOptions: gitea.ListOptions{
193-
Page: p.Page,
194-
PageSize: c.perPage(ctx, p.PerPage),
195+
return shared_utils.Paginate(func(page int) ([]*model.Team, error) {
196+
orgs, _, err := client.ListMyOrgs(
197+
gitea.ListOrgsOptions{
198+
ListOptions: gitea.ListOptions{
199+
Page: page,
200+
PageSize: c.perPage(ctx),
201+
},
195202
},
196-
},
197-
)
198-
teams := make([]*model.Team, 0, len(orgs))
199-
for _, org := range orgs {
200-
teams = append(teams, toTeam(org, c.url))
201-
}
202-
return teams, err
203+
)
204+
teams := make([]*model.Team, 0, len(orgs))
205+
for _, org := range orgs {
206+
teams = append(teams, toTeam(org, c.url))
207+
}
208+
return teams, err
209+
}, -1)
203210
}
204211

205212
// 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
236243
// Repos returns a list of all repositories for the Gitea account, including
237244
// organization repositories.
238245
func (c *Gitea) Repos(ctx context.Context, u *model.User, p *model.ListOptions) ([]*model.Repo, error) {
246+
// we paginate internally (https://github.com/woodpecker-ci/woodpecker/issues/5667)
247+
if p.Page != 1 {
248+
return nil, nil
249+
}
250+
239251
client, err := c.newClientToken(ctx, u.AccessToken)
240252
if err != nil {
241253
return nil, err
242254
}
243255

244-
repos, _, err := client.ListMyRepos(
245-
gitea.ListReposOptions{
246-
ListOptions: gitea.ListOptions{
247-
Page: p.Page,
248-
PageSize: c.perPage(ctx, p.PerPage),
256+
repos, err := shared_utils.Paginate(func(page int) ([]*gitea.Repository, error) {
257+
repos, _, err := client.ListMyRepos(
258+
gitea.ListReposOptions{
259+
ListOptions: gitea.ListOptions{
260+
Page: page,
261+
PageSize: c.perPage(ctx),
262+
},
249263
},
250-
},
251-
)
252-
if err != nil {
253-
return nil, err
254-
}
264+
)
265+
return repos, err
266+
}, -1)
255267

256268
result := make([]*model.Repo, 0, len(repos))
257269
for _, repo := range repos {
@@ -403,7 +415,7 @@ func (c *Gitea) Deactivate(ctx context.Context, u *model.User, r *model.Repo, li
403415
hooks, _, err := client.ListRepoHooks(r.Owner, r.Name, gitea.ListHooksOptions{
404416
ListOptions: gitea.ListOptions{
405417
Page: page,
406-
PageSize: c.perPage(ctx, c.pageSize),
418+
PageSize: c.perPage(ctx),
407419
},
408420
})
409421
return hooks, err
@@ -681,7 +693,7 @@ func (c *Gitea) getTagCommitSHA(ctx context.Context, repo *model.Repo, tagName s
681693
return tag.Commit.SHA, nil
682694
}
683695

684-
func (c *Gitea) perPage(ctx context.Context, customPerPage int) int {
696+
func (c *Gitea) perPage(ctx context.Context) int {
685697
if c.pageSize == 0 {
686698
client, err := c.newClientToken(ctx, "")
687699
if err != nil {
@@ -694,11 +706,5 @@ func (c *Gitea) perPage(ctx context.Context, customPerPage int) int {
694706
}
695707
c.pageSize = api.MaxResponseItems
696708
}
697-
698-
pageSize := customPerPage
699-
if pageSize == 0 || pageSize > c.pageSize {
700-
pageSize = c.pageSize
701-
}
702-
703-
return pageSize
709+
return c.pageSize
704710
}

0 commit comments

Comments
 (0)