Fix passing multiple switches as a single word to the build
Fixes Homebrew/homebrew#17434.
This commit is contained in:
parent
b6631ac23f
commit
3414b4d689
@ -1,3 +1,5 @@
|
||||
require 'set'
|
||||
|
||||
class Option
|
||||
include Comparable
|
||||
|
||||
@ -33,6 +35,8 @@ class Option
|
||||
|
||||
def split_name(name)
|
||||
case name
|
||||
when /^[a-zA-Z]$/
|
||||
[name, "-#{name}"]
|
||||
when /^-[a-zA-Z]$/
|
||||
[name[1..1], name]
|
||||
when /^--(.+)$/
|
||||
@ -101,8 +105,16 @@ class Options
|
||||
case arg
|
||||
when self then arg
|
||||
when Option then new << arg
|
||||
when Array then new(arg.map { |a| Option.new(a.to_s) })
|
||||
else raise TypeError, "Cannot convert #{arg.inspect} to Options"
|
||||
when Array
|
||||
opts = arg.map do |arg|
|
||||
case arg
|
||||
when /^-[^-]+$/ then arg[1..-1].split(//)
|
||||
else arg
|
||||
end
|
||||
end.flatten
|
||||
new(opts.map { |o| Option.new(o) })
|
||||
else
|
||||
raise TypeError, "Cannot convert #{arg.inspect} to Options"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -140,4 +140,11 @@ class OptionsTests < Test::Unit::TestCase
|
||||
def test_coerce_raises_for_inappropriate_types
|
||||
assert_raises(TypeError) { Options.coerce(1) }
|
||||
end
|
||||
|
||||
def test_coerce_splits_multiple_switches_with_single_dash
|
||||
array = %w{-vd}
|
||||
verbose = Option.new("-v")
|
||||
debug = Option.new("-d")
|
||||
assert_equal [verbose, debug].sort, Options.coerce(array).to_a.sort
|
||||
end
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user