diff --git a/Library/Homebrew/utils/github.rb b/Library/Homebrew/utils/github.rb index 7a862c0a54..4e6549c6f3 100644 --- a/Library/Homebrew/utils/github.rb +++ b/Library/Homebrew/utils/github.rb @@ -306,11 +306,11 @@ module GitHub end def public_member_usernames(org, per_page: 100) - url = "#{API_URL}/orgs/#{org}/public_members?per_page=#{per_page}" + url = "#{API_URL}/orgs/#{org}/public_members" members = [] - (1..API_MAX_PAGES).each do |page| - result = API.open_rest("#{url}&page=#{page}").map { |member| member["login"] } + API.paginate_rest(url, per_page: per_page) do |result| + result = result.map { |member| member["login"] } members.concat(result) return members if result.length < per_page @@ -562,8 +562,7 @@ module GitHub raise API::Error, "Getting #{commit_count} commits would exceed limit of #{API_MAX_ITEMS} API items!" end - (1..API_MAX_PAGES).each do |page| - result = API.open_rest(commits_api + "?per_page=#{per_page}&page=#{page}") + API.paginate_rest(commits_api, per_page: per_page) do |result, page| commits.concat(result.map { |c| c["sha"] }) return commits if commits.length == commit_count diff --git a/Library/Homebrew/utils/github/api.rb b/Library/Homebrew/utils/github/api.rb index 931101463a..6653c51376 100644 --- a/Library/Homebrew/utils/github/api.rb +++ b/Library/Homebrew/utils/github/api.rb @@ -249,6 +249,13 @@ module GitHub end end + def paginate_rest(url, per_page: 100) + (1..API_MAX_PAGES).each do |page| + result = API.open_rest("#{url}?per_page=#{per_page}&page=#{page}") + yield(result, page) + end + end + def open_graphql(query, scopes: [].freeze) data = { query: query } result = open_rest("https://api.github.com/graphql", scopes: scopes, data: data, request_method: "POST")