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
 		}