bump-formula-pr: search for closed dupe PRs
This commit is contained in:
parent
a89b56598b
commit
f684a59fa5
@ -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."
|
||||||
|
|||||||
@ -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
|
||||||
[]
|
[]
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user