Skip to content

Commit 4f0639a

Browse files
Merge pull request #7439 from flavorjones/flavorjones-deep-copy-gem-requirements
feature: deep copy requirements in Gem::Specification and Gem::Requirement (cherry picked from commit 5712b52)
1 parent 7ce2c06 commit 4f0639a

File tree

4 files changed

+23
-3
lines changed

4 files changed

+23
-3
lines changed

lib/rubygems/requirement.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,11 @@ def _sorted_requirements
284284
def _tilde_requirements
285285
@_tilde_requirements ||= _sorted_requirements.select {|r| r.first == "~>" }
286286
end
287+
288+
def initialize_copy(other) # :nodoc:
289+
@requirements = other.requirements.dup
290+
super
291+
end
287292
end
288293

289294
class Gem::Version

lib/rubygems/specification.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2075,7 +2075,8 @@ def initialize(name = nil, version = nil)
20752075
end
20762076

20772077
##
2078-
# Duplicates array_attributes from +other_spec+ so state isn't shared.
2078+
# Duplicates Array and Gem::Requirement attributes from +other_spec+ so state isn't shared.
2079+
#
20792080

20802081
def initialize_copy(other_spec)
20812082
self.class.array_attributes.each do |name|
@@ -2097,6 +2098,9 @@ def initialize_copy(other_spec)
20972098
raise e
20982099
end
20992100
end
2101+
2102+
@required_ruby_version = other_spec.required_ruby_version.dup
2103+
@required_rubygems_version = other_spec.required_rubygems_version.dup
21002104
end
21012105

21022106
def base_dir

test/rubygems/test_gem_requirement.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,14 @@ def test_concat
1212
assert_equal [[">=", v(1)], ["<", v(2)]], r.requirements
1313
end
1414

15+
def test_initialize_copy
16+
r = req("= 1.2")
17+
r2 = r.dup
18+
19+
assert_equal r.requirements, r2.requirements
20+
refute_same r.requirements, r2.requirements
21+
end
22+
1523
def test_equals2
1624
r = req "= 1.2"
1725
assert_equal r, r.dup

test/rubygems/test_gem_specification.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1194,10 +1194,13 @@ def test_initialize_copy
11941194
assert_same spec.bindir, dup_spec.bindir
11951195

11961196
assert_equal ">= 0", spec.required_ruby_version.to_s
1197-
assert_same spec.required_ruby_version, dup_spec.required_ruby_version
1197+
assert_equal spec.required_ruby_version, dup_spec.required_ruby_version
1198+
refute_same spec.required_ruby_version, dup_spec.required_ruby_version
11981199

11991200
assert_equal ">= 0", spec.required_rubygems_version.to_s
1200-
assert_same spec.required_rubygems_version,
1201+
assert_equal spec.required_rubygems_version,
1202+
dup_spec.required_rubygems_version
1203+
refute_same spec.required_rubygems_version,
12011204
dup_spec.required_rubygems_version
12021205
end
12031206

0 commit comments

Comments
 (0)