diff --git a/Library/Homebrew/cli_parser.rb b/Library/Homebrew/cli_parser.rb index 7d56d40089..c6eb823c30 100644 --- a/Library/Homebrew/cli_parser.rb +++ b/Library/Homebrew/cli_parser.rb @@ -10,13 +10,12 @@ module Homebrew instance_eval(&block) end - def switch(*names, description: nil) + def switch(*names, description: nil, env: nil) description = option_to_description(*names) if description.nil? @parser.on(*names, description) do - names.each do |name| - @parsed_args["#{option_to_name(name)}?"] = true - end + enable_switch(*names) end + enable_switch(*names) if !env.nil? && !ENV["HOMEBREW_#{env.to_s.upcase}"].nil? end def comma_array(name, description: nil) @@ -50,6 +49,14 @@ module Homebrew @parser.parse!(cmdline_args) @parsed_args end + + private + + def enable_switch(*names) + names.each do |name| + @parsed_args["#{option_to_name(name)}?"] = true + end + end end end end diff --git a/Library/Homebrew/dev-cmd/irb.rb b/Library/Homebrew/dev-cmd/irb.rb index 700cbe0097..b27cb4ab80 100644 --- a/Library/Homebrew/dev-cmd/irb.rb +++ b/Library/Homebrew/dev-cmd/irb.rb @@ -5,6 +5,8 @@ #: If `--pry` is passed or HOMEBREW_PRY is set, pry will be #: used instead of irb. +require "cli_parser" + class Symbol def f(*args) Formulary.factory(to_s, *args) @@ -21,7 +23,12 @@ module Homebrew module_function def irb - if ARGV.include? "--examples" + args = Homebrew::CLI::Parser.new do + switch "--examples" + switch "--pry", env: :pry + end.parse + + if args.examples? puts "'v8'.f # => instance of the v8 formula" puts ":hub.f.installed?" puts ":lua.f.methods - 1.methods" @@ -29,7 +36,7 @@ module Homebrew return end - if ARGV.pry? + if args.pry? Homebrew.install_gem_setup_path! "pry" require "pry" Pry.config.prompt_name = "brew" @@ -45,7 +52,7 @@ module Homebrew ohai "Interactive Homebrew Shell" puts "Example commands available with: brew irb --examples" - if ARGV.pry? + if args.pry? Pry.start else IRB.start diff --git a/Library/Homebrew/extend/ARGV.rb b/Library/Homebrew/extend/ARGV.rb index 8f8a63c7ef..0a66a0abe6 100644 --- a/Library/Homebrew/extend/ARGV.rb +++ b/Library/Homebrew/extend/ARGV.rb @@ -268,10 +268,6 @@ module HomebrewArgvExtension include? "--fetch-HEAD" end - def pry? - include?("--pry") || !ENV["HOMEBREW_PRY"].nil? - end - # eg. `foo -ns -i --bar` has three switches, n, s and i def switch?(char) return false if char.length > 1 diff --git a/Library/Homebrew/test/cli_parser_spec.rb b/Library/Homebrew/test/cli_parser_spec.rb index 2c2c7d9d93..fadb5cc881 100644 --- a/Library/Homebrew/test/cli_parser_spec.rb +++ b/Library/Homebrew/test/cli_parser_spec.rb @@ -6,6 +6,7 @@ describe Homebrew::CLI::Parser do described_class.new do switch "-v", "--verbose", description: "Flag for verbosity" switch "--more-verbose", description: "Flag for higher verbosity" + switch "--pry", env: :pry end } @@ -34,6 +35,12 @@ describe Homebrew::CLI::Parser do it "raises an exception when an invalid option is passed" do expect { parser.parse(["--random"]) }.to raise_error(OptionParser::InvalidOption, /--random/) end + + it "maps environment var to an option" do + allow(ENV).to receive(:[]).with("HOMEBREW_PRY").and_return("1") + args = parser.parse([]) + expect(args.pry?).to be true + end end describe "test long flag options" do