Merge pull request #8316 from SeekingMeaning/github/duplicate-prs
utils/github: add check_for_duplicate_pull_requests
This commit is contained in:
commit
62210409a6
@ -491,20 +491,8 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def fetch_pull_requests(query, tap_full_name, state: nil)
|
|
||||||
GitHub.issues_for_formula(query, tap_full_name: tap_full_name, state: state).select do |pr|
|
|
||||||
pr["html_url"].include?("/pull/") &&
|
|
||||||
/(^|\s)#{Regexp.quote(query)}(:|\s|$)/i =~ pr["title"]
|
|
||||||
end
|
|
||||||
rescue GitHub::RateLimitExceededError => e
|
|
||||||
opoo e.message
|
|
||||||
[]
|
|
||||||
end
|
|
||||||
|
|
||||||
def check_open_pull_requests(formula, tap_full_name, args:)
|
def check_open_pull_requests(formula, tap_full_name, args:)
|
||||||
# check for open requests
|
GitHub.check_for_duplicate_pull_requests(formula.name, tap_full_name, state: "open", args: args)
|
||||||
pull_requests = fetch_pull_requests(formula.name, tap_full_name, state: "open")
|
|
||||||
check_for_duplicate_pull_requests(pull_requests, args: args)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def check_closed_pull_requests(formula, tap_full_name, version: nil, url: nil, tag: nil, args:)
|
def check_closed_pull_requests(formula, tap_full_name, version: nil, url: nil, tag: nil, args:)
|
||||||
@ -514,28 +502,7 @@ module Homebrew
|
|||||||
version = Version.detect(url, specs)
|
version = Version.detect(url, specs)
|
||||||
end
|
end
|
||||||
# if we haven't already found open requests, try for an exact match across closed requests
|
# if we haven't already found open requests, try for an exact match across closed requests
|
||||||
pull_requests = fetch_pull_requests("#{formula.name} #{version}", tap_full_name, state: "closed")
|
GitHub.check_for_duplicate_pull_requests("#{formula.name} #{version}", tap_full_name, state: "closed", args: args)
|
||||||
check_for_duplicate_pull_requests(pull_requests, args: args)
|
|
||||||
end
|
|
||||||
|
|
||||||
def check_for_duplicate_pull_requests(pull_requests, args:)
|
|
||||||
return if pull_requests.blank?
|
|
||||||
|
|
||||||
duplicates_message = <<~EOS
|
|
||||||
These pull requests may be duplicates:
|
|
||||||
#{pull_requests.map { |pr| "#{pr["title"]} #{pr["html_url"]}" }.join("\n")}
|
|
||||||
EOS
|
|
||||||
error_message = "Duplicate PRs should not be opened. Use --force to override this error."
|
|
||||||
if args.force? && !args.quiet?
|
|
||||||
opoo duplicates_message
|
|
||||||
elsif !args.force? && args.quiet?
|
|
||||||
odie error_message
|
|
||||||
elsif !args.force?
|
|
||||||
odie <<~EOS
|
|
||||||
#{duplicates_message.chomp}
|
|
||||||
#{error_message}
|
|
||||||
EOS
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def alias_update_pair(formula, new_formula_version)
|
def alias_update_pair(formula, new_formula_version)
|
||||||
|
|||||||
@ -572,4 +572,35 @@ module GitHub
|
|||||||
[GitHub::AuthenticationFailedError, GitHub::HTTPNotFoundError,
|
[GitHub::AuthenticationFailedError, GitHub::HTTPNotFoundError,
|
||||||
GitHub::RateLimitExceededError, GitHub::Error, JSON::ParserError].freeze
|
GitHub::RateLimitExceededError, GitHub::Error, JSON::ParserError].freeze
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def fetch_pull_requests(query, tap_full_name, state: nil)
|
||||||
|
GitHub.issues_for_formula(query, tap_full_name: tap_full_name, state: state).select do |pr|
|
||||||
|
pr["html_url"].include?("/pull/") &&
|
||||||
|
/(^|\s)#{Regexp.quote(query)}(:|\s|$)/i =~ pr["title"]
|
||||||
|
end
|
||||||
|
rescue GitHub::RateLimitExceededError => e
|
||||||
|
opoo e.message
|
||||||
|
[]
|
||||||
|
end
|
||||||
|
|
||||||
|
def check_for_duplicate_pull_requests(query, tap_full_name, state:, args:)
|
||||||
|
pull_requests = fetch_pull_requests(query, tap_full_name, state: state)
|
||||||
|
return if pull_requests.blank?
|
||||||
|
|
||||||
|
duplicates_message = <<~EOS
|
||||||
|
These pull requests may be duplicates:
|
||||||
|
#{pull_requests.map { |pr| "#{pr["title"]} #{pr["html_url"]}" }.join("\n")}
|
||||||
|
EOS
|
||||||
|
error_message = "Duplicate PRs should not be opened. Use --force to override this error."
|
||||||
|
if args.force? && !args.quiet?
|
||||||
|
opoo duplicates_message
|
||||||
|
elsif !args.force? && args.quiet?
|
||||||
|
odie error_message
|
||||||
|
elsif !args.force?
|
||||||
|
odie <<~EOS
|
||||||
|
#{duplicates_message.chomp}
|
||||||
|
#{error_message}
|
||||||
|
EOS
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user