Merge pull request #7745 from dtrodrigues/bump-pr-dupes

bump-formula-pr: search for closed dupe PRs
This commit is contained in:
Mike McQuaid 2020-06-29 08:39:30 +01:00 committed by GitHub
commit 61b4e7c414
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 14 deletions

View File

@ -147,7 +147,6 @@ module Homebrew
raise FormulaUnspecifiedError unless formula raise FormulaUnspecifiedError unless formula
tap_full_name, origin_branch, previous_branch = use_correct_linux_tap(formula) tap_full_name, origin_branch, previous_branch = use_correct_linux_tap(formula)
check_for_duplicate_pull_requests(formula, tap_full_name)
requested_spec, formula_spec = if args.devel? requested_spec, formula_spec = if args.devel?
devel_message = " (devel)" devel_message = " (devel)"
@ -315,6 +314,8 @@ module Homebrew
new_formula_version = formula_version(formula, requested_spec, new_contents) new_formula_version = formula_version(formula, requested_spec, new_contents)
check_for_duplicate_pull_requests(formula, tap_full_name, new_formula_version.to_s)
if !new_mirrors && !formula_spec.mirrors.empty? if !new_mirrors && !formula_spec.mirrors.empty?
if args.force? if args.force?
opoo "#{formula}: Removing all mirrors because a --mirror= argument was not specified." opoo "#{formula}: Removing all mirrors because a --mirror= argument was not specified."
@ -468,23 +469,26 @@ module Homebrew
end end
end end
def fetch_pull_requests(formula, tap_full_name) def fetch_pull_requests(query, tap_full_name, state: nil)
GitHub.issues_for_formula(formula.name, tap_full_name: tap_full_name).select do |pr| GitHub.issues_for_formula(query, tap_full_name: tap_full_name, state: state).select do |pr|
pr["html_url"].include?("/pull/") && pr["html_url"].include?("/pull/") &&
/(^|\s)#{Regexp.quote(formula.name)}(:|\s|$)/i =~ pr["title"] /(^|\s)#{Regexp.quote(query)}(:|\s|$)/i =~ pr["title"]
end end
rescue GitHub::RateLimitExceededError => e rescue GitHub::RateLimitExceededError => e
opoo e.message opoo e.message
[] []
end end
def check_for_duplicate_pull_requests(formula, tap_full_name) def check_for_duplicate_pull_requests(formula, tap_full_name, version)
pull_requests = fetch_pull_requests(formula, tap_full_name) # check for open requests
return unless pull_requests pull_requests = fetch_pull_requests(formula.name, tap_full_name, state: "open")
return if pull_requests.empty?
# if we haven't already found open requests, try for an exact match across all requests
pull_requests = fetch_pull_requests("#{formula.name} #{version}", tap_full_name) if pull_requests.blank?
return if pull_requests.blank?
duplicates_message = <<~EOS duplicates_message = <<~EOS
These open pull requests may be duplicates: These pull requests may be duplicates:
#{pull_requests.map { |pr| "#{pr["title"]} #{pr["html_url"]}" }.join("\n")} #{pull_requests.map { |pr| "#{pr["title"]} #{pr["html_url"]}" }.join("\n")}
EOS EOS
error_message = "Duplicate PRs should not be opened. Use --force to override this error." error_message = "Duplicate PRs should not be opened. Use --force to override this error."

View File

@ -360,7 +360,7 @@ class BuildError < RuntimeError
end end
def fetch_issues def fetch_issues
GitHub.issues_for_formula(formula.name, tap: formula.tap) GitHub.issues_for_formula(formula.name, tap: formula.tap, state: "open")
rescue GitHub::RateLimitExceededError => e rescue GitHub::RateLimitExceededError => e
opoo e.message opoo e.message
[] []

View File

@ -293,10 +293,8 @@ module GitHub
search("code", **qualifiers) search("code", **qualifiers)
end end
def issues_for_formula(name, options = {}) def issues_for_formula(name, tap: CoreTap.instance, tap_full_name: tap.full_name, state: nil)
tap = options[:tap] || CoreTap.instance search_issues(name, repo: tap_full_name, state: state, in: "title")
tap_full_name = options[:tap_full_name] || tap.full_name
search_issues(name, state: "open", repo: tap_full_name, in: "title")
end end
def user def user