179 lines
4.4 KiB
Ruby
Raw Normal View History

2020-10-10 14:16:11 +02:00
# typed: true
# frozen_string_literal: true
require "cli/named_args"
require "ostruct"
module Homebrew
module CLI
class Args < OpenStruct
2020-10-20 12:03:48 +02:00
extend T::Sig
attr_reader :options_only, :flags_only
# undefine tap to allow --tap argument
undef tap
2020-10-20 12:03:48 +02:00
sig { void }
def initialize
super()
@processed_options = []
@options_only = []
@flags_only = []
# Can set these because they will be overwritten by freeze_named_args!
# (whereas other values below will only be overwritten if passed).
self[:named] = NamedArgs.new(parent: self)
self[:remaining] = []
end
def freeze_remaining_args!(remaining_args)
self[:remaining] = remaining_args.freeze
end
def freeze_named_args!(named_args)
self[:named] = NamedArgs.new(
*named_args.freeze,
override_spec: spec(nil),
force_bottle: force_bottle?,
flags: flags_only,
2020-09-29 23:46:30 +02:00
parent: self,
)
end
def freeze_processed_options!(processed_options)
# Reset cache values reliant on processed_options
@cli_args = nil
@processed_options += processed_options
@processed_options.freeze
@options_only = cli_args.select { |a| a.start_with?("-") }.freeze
@flags_only = cli_args.select { |a| a.start_with?("--") }.freeze
end
2019-09-25 14:21:06 +05:30
sig { returns(NamedArgs) }
2019-09-08 19:56:24 +05:30
def named
self[:named]
2019-09-08 19:56:24 +05:30
end
2020-03-04 17:23:20 +00:00
def no_named?
named.blank?
end
2019-09-08 19:56:24 +05:30
def formulae
odeprecated "args.formulae", "args.named.to_formulae"
named.to_formulae
2019-09-08 19:56:24 +05:30
end
def formulae_and_casks
odeprecated "args.formulae_and_casks", "args.named.to_formulae_and_casks"
named.to_formulae_and_casks
end
2019-09-08 19:56:24 +05:30
def resolved_formulae
odeprecated "args.resolved_formulae", "args.named.to_resolved_formulae"
named.to_resolved_formulae
2019-09-08 19:56:24 +05:30
end
2020-06-30 12:08:03 -04:00
def resolved_formulae_casks
odeprecated "args.resolved_formulae_casks", "args.named.to_resolved_formulae_to_casks"
named.to_resolved_formulae_to_casks
end
def formulae_paths
odeprecated "args.formulae_paths", "args.named.to_formulae_paths"
named.to_formulae_paths
end
2019-09-08 19:56:24 +05:30
def casks
odeprecated "args.casks", "args.named.homebrew_tap_cask_names"
named.homebrew_tap_cask_names
2019-10-20 21:00:05 -04:00
end
2020-08-03 12:02:20 -04:00
def loaded_casks
odeprecated "args.loaded_casks", "args.named.to_cask"
named.to_casks
2020-08-03 12:02:20 -04:00
end
2019-10-20 21:00:05 -04:00
def kegs
odeprecated "args.kegs", "args.named.to_kegs"
named.to_kegs
2020-06-24 11:59:07 -04:00
end
2020-06-30 12:08:03 -04:00
def kegs_casks
odeprecated "args.kegs", "args.named.to_kegs_to_casks"
named.to_kegs_to_casks
2019-10-20 21:00:05 -04:00
end
2019-09-08 19:56:24 +05:30
def build_stable?
!HEAD?
end
def build_from_source_formulae
if build_from_source? || build_bottle?
2020-11-19 18:12:16 +01:00
named.to_formulae_and_casks.select { |f| f.is_a?(Formula) }.map(&:full_name)
else
[]
end
end
def include_test_formulae
if include_test?
named.to_formulae.map(&:full_name)
else
[]
end
end
def value(name)
arg_prefix = "--#{name}="
flag_with_value = flags_only.find { |arg| arg.start_with?(arg_prefix) }
return unless flag_with_value
flag_with_value.delete_prefix(arg_prefix)
end
2020-10-20 12:03:48 +02:00
sig { returns(Context::ContextStruct) }
def context
Context::ContextStruct.new(debug: debug?, quiet: quiet?, verbose: verbose?)
end
private
def option_to_name(option)
option.sub(/\A--?/, "")
.tr("-", "_")
end
def cli_args
return @cli_args if @cli_args
2020-04-05 17:39:30 +05:30
@cli_args = []
@processed_options.each do |short, long|
option = long || short
switch = "#{option_to_name(option)}?".to_sym
flag = option_to_name(option).to_sym
if @table[switch] == true || @table[flag] == true
@cli_args << option
elsif @table[flag].instance_of? String
2020-08-19 17:12:32 +01:00
@cli_args << "#{option}=#{@table[flag]}"
elsif @table[flag].instance_of? Array
2020-08-19 17:12:32 +01:00
@cli_args << "#{option}=#{@table[flag].join(",")}"
end
end
@cli_args.freeze
2020-04-05 17:39:30 +05:30
end
2019-09-08 19:56:24 +05:30
def spec(default = :stable)
if HEAD?
2019-09-08 19:56:24 +05:30
:head
else
default
end
end
end
end
end