aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJack Nagel2013-08-22 11:46:47 -0500
committerJack Nagel2013-08-22 11:49:24 -0500
commit94da753a7390f7b95b6d92516d162afada74b69e (patch)
tree803981a485bb6e616facc8a783072d6e2857b0fa
parent5770f9bbf8e93cfc444451b97d8c957b2a7ca085 (diff)
downloadhomebrew-94da753a7390f7b95b6d92516d162afada74b69e.tar.bz2
Options: ensure copies do not share the underlying collection
-rw-r--r--Library/Homebrew/options.rb5
-rw-r--r--Library/Homebrew/test/test_options.rb6
2 files changed, 11 insertions, 0 deletions
diff --git a/Library/Homebrew/options.rb b/Library/Homebrew/options.rb
index b59cd2930..033e5b69e 100644
--- a/Library/Homebrew/options.rb
+++ b/Library/Homebrew/options.rb
@@ -54,6 +54,11 @@ class Options
@options = Set.new(*args)
end
+ def initialize_copy(other)
+ super
+ @options = @options.dup
+ end
+
def each(*args, &block)
@options.each(*args, &block)
end
diff --git a/Library/Homebrew/test/test_options.rb b/Library/Homebrew/test/test_options.rb
index b0f560354..493aa100a 100644
--- a/Library/Homebrew/test/test_options.rb
+++ b/Library/Homebrew/test/test_options.rb
@@ -152,4 +152,10 @@ class OptionsTests < Test::Unit::TestCase
debug = Option.new("-d")
assert_equal [verbose, debug].sort, Options.coerce(array).to_a.sort
end
+
+ def test_copies_do_not_share_underlying_collection
+ copy = @options.dup << Option.new("foo")
+ assert_empty @options
+ assert_equal 1, copy.count
+ end
end