Skip to content

Commit 2fe326d

Browse files
committed
Issue #22: Handle pagination for organisation/user 📄
Current page can be set via a new '--page' flag (default: 1): $ gh collab-scanner --org softwarevidal --page 2 $ gh collab-scanner --user nicokosi --page 2 Page size is hard-coded to 100. PS: - I could not retrieve pagination info (page x on y) because of this limitation 😭: cli/go-gh#23 - I tried to guess current page via Exec for "gh repo list $user --json id --limit 1000" but response time was very slow. 🐌 See https://github.com/cli/go-gh/blob/trunk/example_gh_test.go#L16
1 parent d66f36f commit 2fe326d

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

main.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"flag"
55
"fmt"
66
"os"
7+
"strconv"
78
"strings"
89

910
"github.com/cli/go-gh"
@@ -13,16 +14,18 @@ type config struct {
1314
repo string
1415
org string
1516
user string
17+
page int
1618
verbose bool
1719
}
1820

1921
func parseFlags() config {
2022
repo := flag.String("repo", "", "a optional GitHub repository (i.e. 'python/peps') ; use repo for current folder if omitted and no 'org' nor 'user' flag")
2123
org := flag.String("org", "", "a optional GitHub organization (i.e. 'python') to scan the repositories from (100 max) ; use repo for current folder if omitted and no 'repo' nor 'user' flag")
2224
user := flag.String("user", "", "a optional GitHub user (i.e. 'torvalds') to scan the repositories from (100 max); use repo for current folder if omitted and no 'repo' nor 'org' flag")
25+
page := flag.Int("page", 1, "Page number for 'repo' and 'user' flags, 100 repositories per pages")
2326
verbose := flag.Bool("verbose", false, "mode that outputs several lines (otherwise, outputs a one-liner) ; default: false")
2427
flag.Parse()
25-
return config{*repo, *org, *user, *verbose}
28+
return config{*repo, *org, *user, *page, *verbose}
2629
}
2730

2831
type owner struct{ Login string }
@@ -96,14 +99,14 @@ func getRepos(config config) ([]repo, error) {
9699
// https://docs.github.com/en/rest/reference/repos#list-organization-repositories
97100
repos := []repo{}
98101
err = client.Get(
99-
"orgs/"+config.org+"/repos?sort=full_name&per_page=100",
102+
"orgs/"+config.org+"/repos?sort=full_name&per_page=100&page="+strconv.Itoa(config.page),
100103
&repos)
101104
return repos, err
102105
} else {
103106
// https://docs.github.com/en/rest/reference/repos#list-repositories-for-a-user
104107
repos := []repo{}
105108
err = client.Get(
106-
"users/"+config.user+"/repos?sort=full_name&per_page=100",
109+
"users/"+config.user+"/repos?sort=full_name&per_page=100&page="+strconv.Itoa(config.page),
107110
&repos)
108111
return repos, err
109112
}

0 commit comments

Comments
 (0)