@@ -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