Handle pagination on gerrit project list API
Change-Id: I74ee8c9d159780e77f34433cd6e9c732bd258811
diff --git a/cmd/zoekt-mirror-gerrit/main.go b/cmd/zoekt-mirror-gerrit/main.go
index b253e4f..1e349ec 100644
--- a/cmd/zoekt-mirror-gerrit/main.go
+++ b/cmd/zoekt-mirror-gerrit/main.go
@@ -25,6 +25,7 @@
"net/http"
"net/url"
"path/filepath"
+ "strconv"
"strings"
gerrit "github.com/andygrunwald/go-gerrit"
@@ -123,12 +124,26 @@
if projectURL == "" {
log.Fatalf("project URL is empty, got Schemes %#v", info.Download.Schemes)
}
- projects, _, err := client.Projects.ListProjects(&gerrit.ProjectOptions{})
- if err != nil {
- log.Fatalf("ListProjects: %v", err)
+
+ projects := make(map[string]gerrit.ProjectInfo)
+ page := new(map[string]gerrit.ProjectInfo)
+ skip := "0"
+ for {
+ page, _, err = client.Projects.ListProjects(&gerrit.ProjectOptions{Skip: skip})
+ if err != nil {
+ log.Fatalf("ListProjects: %v", err)
+ }
+
+ if len(*page) == 0 {
+ break
+ }
+ for k, v := range *page {
+ projects[k] = v
+ }
+ skip = strconv.Itoa(len(projects))
}
- for k, v := range *projects {
+ for k, v := range projects {
if !filter.Include(k) {
continue
}