cli/parser: use cli/args and tweak freeze behaviour.
This commit is contained in:
parent
e9806b6b55
commit
ae63381bd9
@ -1,5 +1,5 @@
|
|||||||
|
require "cli/args"
|
||||||
require "optparse"
|
require "optparse"
|
||||||
require "ostruct"
|
|
||||||
require "set"
|
require "set"
|
||||||
|
|
||||||
COMMAND_DESC_WIDTH = 80
|
COMMAND_DESC_WIDTH = 80
|
||||||
@ -25,9 +25,7 @@ module Homebrew
|
|||||||
|
|
||||||
def initialize(&block)
|
def initialize(&block)
|
||||||
@parser = OptionParser.new
|
@parser = OptionParser.new
|
||||||
Homebrew.args = OpenStruct.new
|
@args = Homebrew::CLI::Args.new(argv: ARGV_WITHOUT_MONKEY_PATCHING)
|
||||||
# undefine tap to allow --tap argument
|
|
||||||
Homebrew.args.instance_eval { undef tap }
|
|
||||||
@constraints = []
|
@constraints = []
|
||||||
@conflicts = []
|
@conflicts = []
|
||||||
@switch_sources = {}
|
@switch_sources = {}
|
||||||
@ -77,7 +75,7 @@ module Homebrew
|
|||||||
description = option_to_description(name) if description.nil?
|
description = option_to_description(name) if description.nil?
|
||||||
process_option(name, description)
|
process_option(name, description)
|
||||||
@parser.on(name, OptionParser::REQUIRED_ARGUMENT, Array, *wrap_option_desc(description)) do |list|
|
@parser.on(name, OptionParser::REQUIRED_ARGUMENT, Array, *wrap_option_desc(description)) do |list|
|
||||||
Homebrew.args[option_to_name(name)] = list
|
@args[option_to_name(name)] = list
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -92,7 +90,7 @@ module Homebrew
|
|||||||
process_option(*names, description)
|
process_option(*names, description)
|
||||||
@parser.on(*names, *wrap_option_desc(description), required) do |option_value|
|
@parser.on(*names, *wrap_option_desc(description), required) do |option_value|
|
||||||
names.each do |name|
|
names.each do |name|
|
||||||
Homebrew.args[option_to_name(name)] = option_value
|
@args[option_to_name(name)] = option_value
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -128,6 +126,8 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
|
|
||||||
def parse(cmdline_args = ARGV)
|
def parse(cmdline_args = ARGV)
|
||||||
|
raise "Arguments were already parsed!" if @args_parsed
|
||||||
|
|
||||||
begin
|
begin
|
||||||
remaining_args = @parser.parse(cmdline_args)
|
remaining_args = @parser.parse(cmdline_args)
|
||||||
rescue OptionParser::InvalidOption => e
|
rescue OptionParser::InvalidOption => e
|
||||||
@ -135,8 +135,9 @@ module Homebrew
|
|||||||
raise e
|
raise e
|
||||||
end
|
end
|
||||||
check_constraint_violations
|
check_constraint_violations
|
||||||
Homebrew.args[:remaining] = remaining_args
|
@args[:remaining] = remaining_args
|
||||||
Homebrew.args.freeze
|
@args_parsed = true
|
||||||
|
Homebrew.args = @args
|
||||||
cmdline_args.freeze
|
cmdline_args.freeze
|
||||||
@parser
|
@parser
|
||||||
end
|
end
|
||||||
@ -180,13 +181,13 @@ module Homebrew
|
|||||||
def enable_switch(*names, from:)
|
def enable_switch(*names, from:)
|
||||||
names.each do |name|
|
names.each do |name|
|
||||||
@switch_sources[option_to_name(name)] = from
|
@switch_sources[option_to_name(name)] = from
|
||||||
Homebrew.args["#{option_to_name(name)}?"] = true
|
@args["#{option_to_name(name)}?"] = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def disable_switch(*names)
|
def disable_switch(*names)
|
||||||
names.each do |name|
|
names.each do |name|
|
||||||
Homebrew.args.delete_field("#{option_to_name(name)}?")
|
@args.delete_field("#{option_to_name(name)}?")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -196,7 +197,7 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
|
|
||||||
def option_passed?(name)
|
def option_passed?(name)
|
||||||
Homebrew.args.respond_to?(name) || Homebrew.args.respond_to?("#{name}?")
|
@args.respond_to?(name) || @args.respond_to?("#{name}?")
|
||||||
end
|
end
|
||||||
|
|
||||||
def wrap_option_desc(desc)
|
def wrap_option_desc(desc)
|
||||||
|
|||||||
@ -205,7 +205,7 @@ describe Homebrew::CLI::Parser do
|
|||||||
|
|
||||||
it "raises exception upon Homebrew.args mutation" do
|
it "raises exception upon Homebrew.args mutation" do
|
||||||
parser.parse(["--switch-a"])
|
parser.parse(["--switch-a"])
|
||||||
expect { parser.parse(["--switch-b"]) }.to raise_error(RuntimeError, /can't modify frozen OpenStruct/)
|
expect { parser.parse(["--switch-b"]) }.to raise_error(RuntimeError, /Arguments were already parsed!/)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user