diff --git a/cmd/attachments/delete.go b/cmd/attachments/delete.go index b6ebd63..b0182f0 100644 --- a/cmd/attachments/delete.go +++ b/cmd/attachments/delete.go @@ -61,11 +61,19 @@ func runReleaseAttachmentDelete(_ stdctx.Context, cmd *cli.Command) error { return err } - existing, _, err := client.ListReleaseAttachments(ctx.Owner, ctx.Repo, release.ID, gitea.ListReleaseAttachmentsOptions{ - ListOptions: gitea.ListOptions{Page: -1}, - }) - if err != nil { - return err + var existing []*gitea.Attachment + for page := 1; ; { + page_attachments, resp, err := client.ListReleaseAttachments(ctx.Owner, ctx.Repo, release.ID, gitea.ListReleaseAttachmentsOptions{ + ListOptions: gitea.ListOptions{Page: page, PageSize: 50}, + }) + if err != nil { + return err + } + existing = append(existing, page_attachments...) + if resp == nil || resp.NextPage == 0 { + break + } + page = resp.NextPage } for _, name := range ctx.Args().Slice()[1:] { diff --git a/cmd/pulls.go b/cmd/pulls.go index cb49bb3..5abbc71 100644 --- a/cmd/pulls.go +++ b/cmd/pulls.go @@ -109,11 +109,20 @@ func runPullDetail(_ stdctx.Context, cmd *cli.Command, index string) error { return err } - reviews, _, err := client.ListPullReviews(ctx.Owner, ctx.Repo, idx, gitea.ListPullReviewsOptions{ - ListOptions: gitea.ListOptions{Page: -1}, - }) - if err != nil { - fmt.Printf("error while loading reviews: %v\n", err) + var reviews []*gitea.PullReview + for page := 1; ; { + page_reviews, resp, err := client.ListPullReviews(ctx.Owner, ctx.Repo, idx, gitea.ListPullReviewsOptions{ + ListOptions: gitea.ListOptions{Page: page, PageSize: 50}, + }) + if err != nil { + fmt.Printf("error while loading reviews: %v\n", err) + break + } + reviews = append(reviews, page_reviews...) + if resp == nil || resp.NextPage == 0 { + break + } + page = resp.NextPage } if ctx.IsSet("output") { diff --git a/cmd/releases/utils.go b/cmd/releases/utils.go index 1e0ab50..c27618c 100644 --- a/cmd/releases/utils.go +++ b/cmd/releases/utils.go @@ -11,19 +11,25 @@ import ( // GetReleaseByTag finds a release by its tag name. func GetReleaseByTag(owner, repo, tag string, client *gitea.Client) (*gitea.Release, error) { - rl, _, err := client.ListReleases(owner, repo, gitea.ListReleasesOptions{ - ListOptions: gitea.ListOptions{Page: -1}, - }) - if err != nil { - return nil, err - } - if len(rl) == 0 { - return nil, fmt.Errorf("repo does not have any release") - } - for _, r := range rl { - if r.TagName == tag { - return r, nil + for page := 1; ; { + rl, resp, err := client.ListReleases(owner, repo, gitea.ListReleasesOptions{ + ListOptions: gitea.ListOptions{Page: page, PageSize: 50}, + }) + if err != nil { + return nil, err } + if page == 1 && len(rl) == 0 { + return nil, fmt.Errorf("repo does not have any release") + } + for _, r := range rl { + if r.TagName == tag { + return r, nil + } + } + if resp == nil || resp.NextPage == 0 { + break + } + page = resp.NextPage } return nil, fmt.Errorf("release tag does not exist") } diff --git a/modules/interact/issue_create.go b/modules/interact/issue_create.go index bfbafbd..3e478ee 100644 --- a/modules/interact/issue_create.go +++ b/modules/interact/issue_create.go @@ -180,19 +180,25 @@ func fetchIssueSelectables(login *config.Login, owner, repo string, done chan is r.MilestoneList[i] = m.Title } - labels, _, err := c.ListRepoLabels(owner, repo, gitea.ListLabelsOptions{ - ListOptions: gitea.ListOptions{Page: -1}, - }) - if err != nil { - r.Err = err - done <- r - return - } r.LabelMap = make(map[string]int64) - r.LabelList = make([]string, len(labels)) - for i, l := range labels { - r.LabelMap[l.Name] = l.ID - r.LabelList[i] = l.Name + r.LabelList = make([]string, 0) + for page := 1; ; { + labels, resp, err := c.ListRepoLabels(owner, repo, gitea.ListLabelsOptions{ + ListOptions: gitea.ListOptions{Page: page, PageSize: 50}, + }) + if err != nil { + r.Err = err + done <- r + return + } + for _, l := range labels { + r.LabelMap[l.Name] = l.ID + r.LabelList = append(r.LabelList, l.Name) + } + if resp == nil || resp.NextPage == 0 { + break + } + page = resp.NextPage } done <- r diff --git a/modules/task/labels.go b/modules/task/labels.go index 8d3c12e..79fc672 100644 --- a/modules/task/labels.go +++ b/modules/task/labels.go @@ -13,16 +13,23 @@ import ( // ResolveLabelNames returns a list of label IDs for a given list of label names func ResolveLabelNames(client *gitea.Client, owner, repo string, labelNames []string) ([]int64, error) { labelIDs := make([]int64, 0, len(labelNames)) - labels, _, err := client.ListRepoLabels(owner, repo, gitea.ListLabelsOptions{ - ListOptions: gitea.ListOptions{Page: -1}, - }) - if err != nil { - return nil, err - } - for _, l := range labels { - if utils.Contains(labelNames, l.Name) { - labelIDs = append(labelIDs, l.ID) + page := 1 + for { + labels, resp, err := client.ListRepoLabels(owner, repo, gitea.ListLabelsOptions{ + ListOptions: gitea.ListOptions{Page: page, PageSize: 50}, + }) + if err != nil { + return nil, err } + for _, l := range labels { + if utils.Contains(labelNames, l.Name) { + labelIDs = append(labelIDs, l.ID) + } + } + if resp == nil || resp.NextPage == 0 { + break + } + page = resp.NextPage } return labelIDs, nil } diff --git a/modules/task/login_create.go b/modules/task/login_create.go index ac45c46..2d54c48 100644 --- a/modules/task/login_create.go +++ b/modules/task/login_create.go @@ -166,11 +166,19 @@ func generateToken(login config.Login, user, pass, otp, scopes string) (string, } client := login.Client(opts...) - tl, _, err := client.ListAccessTokens(gitea.ListAccessTokensOptions{ - ListOptions: gitea.ListOptions{Page: -1}, - }) - if err != nil { - return "", err + var tl []*gitea.AccessToken + for page := 1; ; { + page_tokens, resp, err := client.ListAccessTokens(gitea.ListAccessTokensOptions{ + ListOptions: gitea.ListOptions{Page: page, PageSize: 50}, + }) + if err != nil { + return "", err + } + tl = append(tl, page_tokens...) + if resp == nil || resp.NextPage == 0 { + break + } + page = resp.NextPage } host, _ := os.Hostname() tokenName := host + "-tea" diff --git a/modules/task/login_ssh.go b/modules/task/login_ssh.go index e36a293..eebcb28 100644 --- a/modules/task/login_ssh.go +++ b/modules/task/login_ssh.go @@ -19,11 +19,22 @@ import ( // a matching private key in ~/.ssh/. If no match is found, path is empty. func findSSHKey(client *gitea.Client) (string, error) { // get keys registered on gitea instance - keys, _, err := client.ListMyPublicKeys(gitea.ListPublicKeysOptions{ - ListOptions: gitea.ListOptions{Page: -1}, - }) - if err != nil || len(keys) == 0 { - return "", err + var keys []*gitea.PublicKey + for page := 1; ; { + page_keys, resp, err := client.ListMyPublicKeys(gitea.ListPublicKeysOptions{ + ListOptions: gitea.ListOptions{Page: page, PageSize: 50}, + }) + if err != nil { + return "", err + } + keys = append(keys, page_keys...) + if resp == nil || resp.NextPage == 0 { + break + } + page = resp.NextPage + } + if len(keys) == 0 { + return "", nil } // enumerate ~/.ssh/*.pub files diff --git a/modules/task/pull_review_comment.go b/modules/task/pull_review_comment.go index 68eaf78..1dea8fd 100644 --- a/modules/task/pull_review_comment.go +++ b/modules/task/pull_review_comment.go @@ -14,11 +14,19 @@ import ( func ListPullReviewComments(ctx *context.TeaContext, idx int64) ([]*gitea.PullReviewComment, error) { c := ctx.Login.Client() - reviews, _, err := c.ListPullReviews(ctx.Owner, ctx.Repo, idx, gitea.ListPullReviewsOptions{ - ListOptions: gitea.ListOptions{Page: -1}, - }) - if err != nil { - return nil, err + var reviews []*gitea.PullReview + for page := 1; ; { + page_reviews, resp, err := c.ListPullReviews(ctx.Owner, ctx.Repo, idx, gitea.ListPullReviewsOptions{ + ListOptions: gitea.ListOptions{Page: page, PageSize: 50}, + }) + if err != nil { + return nil, err + } + reviews = append(reviews, page_reviews...) + if resp == nil || resp.NextPage == 0 { + break + } + page = resp.NextPage } var allComments []*gitea.PullReviewComment