Port Homebrew::DevCmd::Bump
This commit is contained in:
parent
c70dc040c6
commit
df42e9cfb3
@ -1,13 +1,14 @@
|
||||
# typed: strict
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "abstract_command"
|
||||
require "bump_version_parser"
|
||||
require "cli/parser"
|
||||
require "livecheck/livecheck"
|
||||
|
||||
module Homebrew
|
||||
module_function
|
||||
|
||||
module DevCmd
|
||||
class Bump < AbstractCommand
|
||||
class VersionBumpInfo < T::Struct
|
||||
const :type, Symbol
|
||||
const :multiple_versions, T::Boolean
|
||||
@ -19,9 +20,7 @@ module Homebrew
|
||||
const :closed_pull_requests, T.nilable(T.any(T::Array[String], String))
|
||||
end
|
||||
|
||||
sig { returns(CLI::Parser) }
|
||||
def bump_args
|
||||
CLI::Parser.new do
|
||||
cmd_args do
|
||||
description <<~EOS
|
||||
Display out-of-date brew formulae and the latest version available. If the
|
||||
returned current and livecheck versions differ or when querying specific
|
||||
@ -56,12 +55,9 @@ module Homebrew
|
||||
|
||||
named_args [:formula, :cask], without_api: true
|
||||
end
|
||||
end
|
||||
|
||||
sig { void }
|
||||
def bump
|
||||
args = bump_args.parse
|
||||
|
||||
sig { override.void }
|
||||
def run
|
||||
Homebrew.install_bundler_gems!(groups: ["livecheck"])
|
||||
|
||||
if args.limit.present? && !args.formula? && !args.cask?
|
||||
@ -72,7 +68,7 @@ module Homebrew
|
||||
|
||||
Homebrew.with_no_api_env do
|
||||
formulae_and_casks = if args.tap
|
||||
tap = Tap.fetch(args.tap)
|
||||
tap = Tap.fetch(T.must(args.tap))
|
||||
raise UsageError, "`--tap` cannot be used with official taps." if tap.official?
|
||||
|
||||
formulae = args.cask? ? [] : tap.formula_files.map { |path| Formulary.factory(path) }
|
||||
@ -105,21 +101,23 @@ module Homebrew
|
||||
end
|
||||
|
||||
if formulae_and_casks.present?
|
||||
handle_formula_and_casks(formulae_and_casks, args)
|
||||
handle_formula_and_casks(formulae_and_casks)
|
||||
else
|
||||
handle_api_response(args)
|
||||
handle_api_response
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
sig { params(formula_or_cask: T.any(Formula, Cask::Cask), args: CLI::Args).returns(T::Boolean) }
|
||||
def skip_repology?(formula_or_cask, args:)
|
||||
private
|
||||
|
||||
sig { params(formula_or_cask: T.any(Formula, Cask::Cask)).returns(T::Boolean) }
|
||||
def skip_repology?(formula_or_cask)
|
||||
(ENV["CI"].present? && args.open_pr? && formula_or_cask.livecheckable?) ||
|
||||
(formula_or_cask.is_a?(Formula) && formula_or_cask.versioned_formula?)
|
||||
end
|
||||
|
||||
sig { params(formulae_and_casks: T::Array[T.any(Formula, Cask::Cask)], args: CLI::Args).void }
|
||||
def handle_formula_and_casks(formulae_and_casks, args)
|
||||
sig { params(formulae_and_casks: T::Array[T.any(Formula, Cask::Cask)]).void }
|
||||
def handle_formula_and_casks(formulae_and_casks)
|
||||
Livecheck.load_other_tap_strategies(formulae_and_casks)
|
||||
|
||||
ambiguous_casks = []
|
||||
@ -153,20 +151,19 @@ module Homebrew
|
||||
Repology::HOMEBREW_CASK
|
||||
end
|
||||
|
||||
package_data = Repology.single_package_query(name, repository:) unless skip_repology?(formula_or_cask, args:)
|
||||
package_data = Repology.single_package_query(name, repository:) unless skip_repology?(formula_or_cask)
|
||||
|
||||
retrieve_and_display_info_and_open_pr(
|
||||
formula_or_cask,
|
||||
name,
|
||||
package_data&.values&.first,
|
||||
args:,
|
||||
ambiguous_cask: ambiguous_casks.include?(formula_or_cask),
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
sig { params(args: CLI::Args).void }
|
||||
def handle_api_response(args)
|
||||
sig { void }
|
||||
def handle_api_response
|
||||
limit = args.limit.to_i if args.limit.present?
|
||||
|
||||
api_response = {}
|
||||
@ -220,7 +217,6 @@ module Homebrew
|
||||
formula_or_cask,
|
||||
name,
|
||||
repositories,
|
||||
args:,
|
||||
ambiguous_cask:,
|
||||
)
|
||||
end
|
||||
@ -321,13 +317,16 @@ module Homebrew
|
||||
params(
|
||||
formula_or_cask: T.any(Formula, Cask::Cask),
|
||||
repositories: T::Array[T.untyped],
|
||||
args: CLI::Args,
|
||||
name: String,
|
||||
).returns(VersionBumpInfo)
|
||||
}
|
||||
def retrieve_versions_by_arch(formula_or_cask:, repositories:, args:, name:)
|
||||
def retrieve_versions_by_arch(formula_or_cask:, repositories:, name:)
|
||||
is_cask_with_blocks = formula_or_cask.is_a?(Cask::Cask) && formula_or_cask.on_system_blocks_exist?
|
||||
type, version_name = formula_or_cask.is_a?(Formula) ? [:formula, "formula version:"] : [:cask, "cask version: "]
|
||||
type, version_name = if formula_or_cask.is_a?(Formula)
|
||||
[:formula, "formula version:"]
|
||||
else
|
||||
[:cask, "cask version: "]
|
||||
end
|
||||
|
||||
old_versions = {}
|
||||
new_versions = {}
|
||||
@ -429,14 +428,12 @@ module Homebrew
|
||||
formula_or_cask: T.any(Formula, Cask::Cask),
|
||||
name: String,
|
||||
repositories: T::Array[T.untyped],
|
||||
args: CLI::Args,
|
||||
ambiguous_cask: T::Boolean,
|
||||
).void
|
||||
}
|
||||
def retrieve_and_display_info_and_open_pr(formula_or_cask, name, repositories, args:, ambiguous_cask: false)
|
||||
def retrieve_and_display_info_and_open_pr(formula_or_cask, name, repositories, ambiguous_cask: false)
|
||||
version_info = retrieve_versions_by_arch(formula_or_cask:,
|
||||
repositories:,
|
||||
args:,
|
||||
name:)
|
||||
|
||||
current_version = version_info.current_version
|
||||
@ -480,7 +477,7 @@ module Homebrew
|
||||
Current #{version_label} #{current_versions}
|
||||
Latest livecheck version: #{new_versions}
|
||||
EOS
|
||||
puts <<~EOS unless skip_repology?(formula_or_cask, args:)
|
||||
puts <<~EOS unless skip_repology?(formula_or_cask)
|
||||
Latest Repology version: #{repology_latest}
|
||||
EOS
|
||||
if formula_or_cask.is_a?(Formula) && formula_or_cask.synced_with_other_formulae?
|
||||
@ -551,4 +548,6 @@ module Homebrew
|
||||
|
||||
synced_with
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -1,8 +1,9 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "cmd/shared_examples/args_parse"
|
||||
require "dev-cmd/bump"
|
||||
|
||||
RSpec.describe "brew bump" do
|
||||
RSpec.describe Homebrew::DevCmd::Bump do
|
||||
it_behaves_like "parseable arguments"
|
||||
|
||||
describe "formula", :integration_test, :needs_homebrew_curl, :needs_network do
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user