Skip to content

Commit 1ad0b13

Browse files
stevehamitsaha
authored andcommitted
Add pagination
1 parent ec8fcef commit 1ad0b13

1 file changed

Lines changed: 37 additions & 16 deletions

File tree

forgejo.go

Lines changed: 37 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -28,37 +28,58 @@ func getForgejoRepositories(
2828

2929
log.Printf("Found user %s with ID %d", user.UserName, user.ID)
3030

31-
repos, _, err := forgejoClient.SearchRepos(forgejo.SearchRepoOptions{
32-
StarredByUserID: user.ID,
31+
repos, err := paginateForgejoRepositories(func(page int) ([]*forgejo.Repository, *forgejo.Response, error) {
32+
return forgejoClient.SearchRepos(forgejo.SearchRepoOptions{
33+
ListOptions: forgejo.ListOptions{Page: page},
34+
StarredByUserID: user.ID,
35+
})
3336
})
3437
if err != nil {
35-
log.Fatalf("Error fetching starred repositories from %s: %v", service, err)
38+
return nil, fmt.Errorf("fetching starred repositories from %s: %v", service, err)
3639
}
3740

38-
return hydrateForgejoRepositories(repos), nil
41+
return repos, nil
3942
case "user", "":
40-
repos, _, err := forgejoClient.ListMyRepos(forgejo.ListReposOptions{})
43+
repos, err := paginateForgejoRepositories(func(page int) ([]*forgejo.Repository, *forgejo.Response, error) {
44+
return forgejoClient.ListMyRepos(forgejo.ListReposOptions{
45+
ListOptions: forgejo.ListOptions{Page: page},
46+
})
47+
})
4148
if err != nil {
42-
log.Fatalf("Error fetching user repositories from %s: %v", service, err)
49+
return nil, fmt.Errorf("fetching user repositories from %s: %v", service, err)
4350
}
4451

45-
return hydrateForgejoRepositories(repos), nil
52+
return repos, nil
4653
default:
4754
return nil, fmt.Errorf("unknown repo type: %s", forgejoRepoType)
4855
}
4956
}
5057

51-
func hydrateForgejoRepositories(repos []*forgejo.Repository) []*Repository {
58+
func paginateForgejoRepositories(fetch func(page int) ([]*forgejo.Repository, *forgejo.Response, error)) ([]*Repository, error) {
5259
var repositories []*Repository
60+
page := 1
5361

54-
for _, repo := range repos {
55-
repositories = append(repositories, &Repository{
56-
CloneURL: repo.CloneURL,
57-
Name: repo.Name,
58-
Namespace: repo.Owner.UserName,
59-
Private: repo.Private,
60-
})
62+
for {
63+
results, resp, err := fetch(page)
64+
if err != nil {
65+
return nil, err
66+
}
67+
68+
for _, repo := range results {
69+
repositories = append(repositories, &Repository{
70+
CloneURL: repo.CloneURL,
71+
Name: repo.Name,
72+
Namespace: repo.Owner.UserName,
73+
Private: repo.Private,
74+
})
75+
}
76+
77+
if resp == nil || resp.NextPage == 0 {
78+
break
79+
}
80+
81+
page = resp.NextPage
6182
}
6283

63-
return repositories
84+
return repositories, nil
6485
}

0 commit comments

Comments
 (0)