rubygems-update 2.6.8 → 2.6.9
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of rubygems-update might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.travis.yml +9 -6
- data/CODE_OF_CONDUCT.md +36 -33
- data/History.txt +16 -0
- data/Manifest.txt +5 -3
- data/Rakefile +5 -0
- data/bundler/CHANGELOG.md +72 -0
- data/bundler/DEVELOPMENT.md +2 -2
- data/bundler/README.md +5 -0
- data/bundler/lib/bundler.rb +1 -1
- data/bundler/lib/bundler/cli.rb +42 -29
- data/bundler/lib/bundler/cli/common.rb +17 -0
- data/bundler/lib/bundler/cli/exec.rb +6 -0
- data/bundler/lib/bundler/cli/gem.rb +16 -3
- data/bundler/lib/bundler/cli/install.rb +7 -20
- data/bundler/lib/bundler/cli/lock.rb +1 -1
- data/bundler/lib/bundler/cli/open.rb +2 -1
- data/bundler/lib/bundler/cli/outdated.rb +91 -43
- data/bundler/lib/bundler/cli/update.rb +3 -10
- data/bundler/lib/bundler/compact_index_client.rb +7 -1
- data/bundler/lib/bundler/current_ruby.rb +1 -0
- data/bundler/lib/bundler/definition.rb +9 -5
- data/bundler/lib/bundler/dependency.rb +12 -0
- data/bundler/lib/bundler/env.rb +25 -20
- data/bundler/lib/bundler/errors.rb +21 -0
- data/bundler/lib/bundler/fetcher.rb +2 -2
- data/bundler/lib/bundler/fetcher/compact_index.rb +15 -3
- data/bundler/lib/bundler/friendly_errors.rb +23 -7
- data/bundler/lib/bundler/index.rb +9 -4
- data/bundler/lib/bundler/inline.rb +1 -1
- data/bundler/lib/bundler/installer.rb +1 -1
- data/bundler/lib/bundler/installer/gem_installer.rb +2 -2
- data/bundler/lib/bundler/installer/parallel_installer.rb +40 -9
- data/bundler/lib/bundler/lockfile_parser.rb +0 -1
- data/bundler/lib/bundler/match_platform.rb +12 -4
- data/bundler/lib/bundler/plugin/api.rb +2 -1
- data/bundler/lib/bundler/plugin/api/source.rb +1 -1
- data/bundler/lib/bundler/postit_trampoline.rb +3 -3
- data/bundler/lib/bundler/resolver.rb +6 -1
- data/bundler/lib/bundler/retry.rb +4 -1
- data/bundler/lib/bundler/rubygems_gem_installer.rb +18 -6
- data/bundler/lib/bundler/rubygems_integration.rb +16 -3
- data/bundler/lib/bundler/settings.rb +8 -3
- data/bundler/lib/bundler/shared_helpers.rb +15 -12
- data/bundler/lib/bundler/source.rb +4 -0
- data/bundler/lib/bundler/source/git/git_proxy.rb +2 -1
- data/bundler/lib/bundler/source/rubygems.rb +9 -0
- data/bundler/lib/bundler/spec_set.rb +4 -0
- data/bundler/lib/bundler/templates/newgem/gitignore.tt +5 -0
- data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +1 -1
- data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +10 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +10 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +1 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -2
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -2
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +62 -0
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +10 -3
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +12 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -2
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +2 -0
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +27 -19
- data/bundler/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/faster.rb +1 -0
- data/bundler/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/persistent.rb +24 -23
- data/bundler/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/persistent/ssl_reuse.rb +2 -1
- data/bundler/lib/bundler/vendored_persistent.rb +9 -4
- data/bundler/lib/bundler/version.rb +1 -1
- data/bundler/lib/bundler/worker.rb +27 -5
- data/bundler/man/bundle-config.ronn +28 -1
- data/bundler/man/bundle-install.ronn +1 -1
- data/bundler/man/bundle-lock.ronn +47 -0
- data/bundler/man/bundle-outdated.ronn +107 -0
- data/bundler/man/bundle-update.ronn +152 -3
- data/bundler/man/bundle.ronn +22 -4
- data/bundler/man/gemfile.5.ronn +16 -0
- data/lib/rubygems.rb +1 -1
- data/lib/rubygems/ext/ext_conf_builder.rb +5 -3
- data/lib/rubygems/ext/rake_builder.rb +1 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +3 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +9 -2
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +2 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +1 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +17 -17
- data/lib/rubygems/server.rb +11 -4
- data/lib/rubygems/stub_specification.rb +6 -1
- data/lib/rubygems/version.rb +6 -2
- data/test/rubygems/test_gem.rb +2 -0
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +23 -0
- data/test/rubygems/test_gem_ext_rake_builder.rb +34 -17
- data/test/rubygems/test_gem_server.rb +16 -0
- data/test/rubygems/test_gem_specification.rb +1 -1
- data/test/rubygems/test_gem_stub_specification.rb +61 -0
- data/test/rubygems/test_gem_version.rb +6 -0
- data/util/ci +5 -5
- metadata +31 -29
data/lib/rubygems.rb
CHANGED
@@ -48,9 +48,11 @@ class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
|
|
48
48
|
run cmd, results
|
49
49
|
ensure
|
50
50
|
if File.exist? 'mkmf.log'
|
51
|
-
|
52
|
-
"
|
53
|
-
|
51
|
+
unless $?.success? then
|
52
|
+
results << "To see why this extension failed to compile, please check" \
|
53
|
+
" the mkmf.log which can be found here:\n"
|
54
|
+
results << " " + File.join(dest_path, 'mkmf.log') + "\n"
|
55
|
+
end
|
54
56
|
FileUtils.mv 'mkmf.log', dest_path
|
55
57
|
end
|
56
58
|
siteconf.unlink
|
@@ -9,7 +9,7 @@ class Gem::Ext::RakeBuilder < Gem::Ext::Builder
|
|
9
9
|
|
10
10
|
def self.build(extension, directory, dest_path, results, args=[], lib_dir=nil)
|
11
11
|
if File.basename(extension) =~ /mkrf_conf/i then
|
12
|
-
cmd = "#{Gem.ruby} #{File.basename extension}"
|
12
|
+
cmd = "#{Gem.ruby} #{File.basename extension}".dup
|
13
13
|
cmd << " #{args.join " "}" unless args.empty?
|
14
14
|
run cmd, results
|
15
15
|
end
|
@@ -119,6 +119,7 @@ module Gem::Resolver::Molinillo
|
|
119
119
|
# {Vertex#successors}
|
120
120
|
def ==(other)
|
121
121
|
return false unless other
|
122
|
+
return true if equal?(other)
|
122
123
|
vertices.each do |name, vertex|
|
123
124
|
other_vertex = other.vertex_named(name)
|
124
125
|
return false unless other_vertex
|
@@ -134,6 +135,7 @@ module Gem::Resolver::Molinillo
|
|
134
135
|
def add_child_vertex(name, payload, parent_names, requirement)
|
135
136
|
root = !parent_names.delete(nil) { true }
|
136
137
|
vertex = add_vertex(name, payload, root)
|
138
|
+
vertex.explicit_requirements << requirement if root
|
137
139
|
parent_names.each do |parent_name|
|
138
140
|
parent_node = vertex_named(parent_name)
|
139
141
|
add_edge(parent_node, vertex, requirement)
|
@@ -152,7 +154,7 @@ module Gem::Resolver::Molinillo
|
|
152
154
|
# Detaches the {#vertex_named} `name` {Vertex} from the graph, recursively
|
153
155
|
# removing any non-root vertices that were orphaned in the process
|
154
156
|
# @param [String] name
|
155
|
-
# @return [
|
157
|
+
# @return [Array<Vertex>] the vertices which have been detached
|
156
158
|
def detach_vertex_named(name)
|
157
159
|
log.detach_vertex_named(self, name)
|
158
160
|
end
|
@@ -14,16 +14,23 @@ module Gem::Resolver::Molinillo
|
|
14
14
|
|
15
15
|
# (see Action#up)
|
16
16
|
def up(graph)
|
17
|
-
return unless @vertex = graph.vertices.delete(name)
|
17
|
+
return [] unless @vertex = graph.vertices.delete(name)
|
18
|
+
|
19
|
+
removed_vertices = [@vertex]
|
18
20
|
@vertex.outgoing_edges.each do |e|
|
19
21
|
v = e.destination
|
20
22
|
v.incoming_edges.delete(e)
|
21
|
-
|
23
|
+
if !v.root? && v.incoming_edges.empty?
|
24
|
+
removed_vertices.concat graph.detach_vertex_named(v.name)
|
25
|
+
end
|
22
26
|
end
|
27
|
+
|
23
28
|
@vertex.incoming_edges.each do |e|
|
24
29
|
v = e.origin
|
25
30
|
v.outgoing_edges.delete(e)
|
26
31
|
end
|
32
|
+
|
33
|
+
removed_vertices
|
27
34
|
end
|
28
35
|
|
29
36
|
# (see Action#down)
|
@@ -81,6 +81,7 @@ module Gem::Resolver::Molinillo
|
|
81
81
|
# @return [Boolean] whether the two vertices are equal, determined
|
82
82
|
# by a recursive traversal of each {Vertex#successors}
|
83
83
|
def ==(other)
|
84
|
+
return true if equal?(other)
|
84
85
|
shallow_eql?(other) &&
|
85
86
|
successors.to_set == other.successors.to_set
|
86
87
|
end
|
@@ -89,6 +90,7 @@ module Gem::Resolver::Molinillo
|
|
89
90
|
# @return [Boolean] whether the two vertices are equal, determined
|
90
91
|
# solely by {#name} and {#payload} equality
|
91
92
|
def shallow_eql?(other)
|
93
|
+
return true if equal?(other)
|
92
94
|
other &&
|
93
95
|
name == other.name &&
|
94
96
|
payload == other.payload
|
@@ -194,18 +194,20 @@ module Gem::Resolver::Molinillo
|
|
194
194
|
def state_index_for_unwind
|
195
195
|
current_requirement = requirement
|
196
196
|
existing_requirement = requirement_for_existing_name(name)
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
197
|
+
index = -1
|
198
|
+
[current_requirement, existing_requirement].each do |r|
|
199
|
+
until r.nil?
|
200
|
+
current_state = find_state_for(r)
|
201
|
+
if state_any?(current_state)
|
202
|
+
current_index = states.index(current_state)
|
203
|
+
index = current_index if current_index > index
|
204
|
+
break
|
205
|
+
end
|
206
|
+
r = parent_of(r)
|
207
|
+
end
|
201
208
|
end
|
202
209
|
|
203
|
-
|
204
|
-
existing_state = find_state_for(existing_requirement)
|
205
|
-
return states.index(existing_state) if state_any?(existing_state)
|
206
|
-
existing_requirement = parent_of(existing_requirement)
|
207
|
-
end
|
208
|
-
-1
|
210
|
+
index
|
209
211
|
end
|
210
212
|
|
211
213
|
# @return [Object] the requirement that led to `requirement` being added
|
@@ -364,19 +366,17 @@ module Gem::Resolver::Molinillo
|
|
364
366
|
if matching_deps.empty? && !succ.root? && succ.predecessors.to_a == [vertex]
|
365
367
|
debug(depth) { "Removing orphaned spec #{succ.name} after swapping #{name}" }
|
366
368
|
succ.requirements.each { |r| @parent_of.delete(r) }
|
367
|
-
activated.detach_vertex_named(succ.name)
|
368
|
-
|
369
|
-
all_successor_names = succ.recursive_successors.map(&:name)
|
370
369
|
|
371
|
-
|
372
|
-
|
373
|
-
|
370
|
+
removed_names = activated.detach_vertex_named(succ.name).map(&:name)
|
371
|
+
requirements.delete_if do |r|
|
372
|
+
# the only removed vertices are those with no other requirements,
|
373
|
+
# so it's safe to delete only based upon name here
|
374
|
+
removed_names.include?(name_for(r))
|
374
375
|
end
|
375
376
|
elsif !matching_deps.include?(outgoing_edge.requirement)
|
376
377
|
activated.delete_edge(outgoing_edge)
|
377
378
|
requirements.delete(outgoing_edge.requirement)
|
378
379
|
end
|
379
|
-
matching_deps.delete(outgoing_edge.requirement)
|
380
380
|
end
|
381
381
|
end
|
382
382
|
|
data/lib/rubygems/server.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
require 'webrick'
|
3
3
|
require 'zlib'
|
4
4
|
require 'erb'
|
5
|
+
require 'uri'
|
5
6
|
|
6
7
|
require 'rubygems'
|
7
8
|
require 'rubygems/rdoc'
|
@@ -68,7 +69,7 @@ class Gem::Server
|
|
68
69
|
<h1>Summary</h1>
|
69
70
|
<p>There are <%=values["gem_count"]%> gems installed:</p>
|
70
71
|
<p>
|
71
|
-
<%= values["specs"].map { |v| "<a href
|
72
|
+
<%= values["specs"].map { |v| "<a href=\"##{u v["name"]}\">#{h v["name"]}</a>" }.join ', ' %>.
|
72
73
|
<h1>Gems</h1>
|
73
74
|
|
74
75
|
<dl>
|
@@ -81,20 +82,20 @@ class Gem::Server
|
|
81
82
|
<b><%=h spec["name"]%> <%=h spec["version"]%></b>
|
82
83
|
|
83
84
|
<% if spec["ri_installed"] || spec["rdoc_installed"] then %>
|
84
|
-
<a href="<%=
|
85
|
+
<a href="<%=spec["doc_path"]%>">[rdoc]</a>
|
85
86
|
<% else %>
|
86
87
|
<span title="rdoc not installed">[rdoc]</span>
|
87
88
|
<% end %>
|
88
89
|
|
89
90
|
<% if spec["homepage"] then %>
|
90
|
-
<a href="<%=
|
91
|
+
<a href="<%=uri_encode spec["homepage"]%>" title="<%=h spec["homepage"]%>">[www]</a>
|
91
92
|
<% else %>
|
92
93
|
<span title="no homepage available">[www]</span>
|
93
94
|
<% end %>
|
94
95
|
|
95
96
|
<% if spec["has_deps"] then %>
|
96
97
|
- depends on
|
97
|
-
<%= spec["dependencies"].map { |v| "<a href=\"##{u v["name"]}>#{h v["name"]}</a>" }.join ', ' %>.
|
98
|
+
<%= spec["dependencies"].map { |v| "<a href=\"##{u v["name"]}\">#{h v["name"]}</a>" }.join ', ' %>.
|
98
99
|
<% end %>
|
99
100
|
</dt>
|
100
101
|
<dd>
|
@@ -455,6 +456,12 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
|
455
456
|
end.max
|
456
457
|
end
|
457
458
|
|
459
|
+
def uri_encode(str)
|
460
|
+
str.gsub(URI::UNSAFE) do |match|
|
461
|
+
match.each_byte.map { |c| sprintf('%%%02X', c.ord) }.join
|
462
|
+
end
|
463
|
+
end
|
464
|
+
|
458
465
|
def doc_root gem_name
|
459
466
|
if have_rdoc_4_plus? then
|
460
467
|
"/doc_root/#{u gem_name}/"
|
@@ -39,7 +39,12 @@ class Gem::StubSpecification < Gem::BasicSpecification
|
|
39
39
|
def initialize data, extensions
|
40
40
|
parts = data[PREFIX.length..-1].split(" ".freeze, 4)
|
41
41
|
@name = parts[0].freeze
|
42
|
-
@version = Gem::Version.
|
42
|
+
@version = if Gem::Version.correct?(parts[1])
|
43
|
+
Gem::Version.new(parts[1])
|
44
|
+
else
|
45
|
+
Gem::Version.new(0)
|
46
|
+
end
|
47
|
+
|
43
48
|
@platform = Gem::Platform.new parts[2]
|
44
49
|
@extensions = extensions
|
45
50
|
@full_name = if platform == Gem::Platform::RUBY
|
data/lib/rubygems/version.rb
CHANGED
@@ -204,8 +204,12 @@ class Gem::Version
|
|
204
204
|
# series of digits or ASCII letters separated by dots.
|
205
205
|
|
206
206
|
def initialize version
|
207
|
-
|
208
|
-
|
207
|
+
unless self.class.correct?(version)
|
208
|
+
raise ArgumentError, "Malformed version number string #{version}"
|
209
|
+
end
|
210
|
+
|
211
|
+
# If version is an empty string convert it to 0
|
212
|
+
version = 0 if version =~ /\A\s*\Z/
|
209
213
|
|
210
214
|
@version = version.to_s.strip.gsub("-",".pre.")
|
211
215
|
@segments = nil
|
data/test/rubygems/test_gem.rb
CHANGED
@@ -1451,6 +1451,7 @@ class TestGem < Gem::TestCase
|
|
1451
1451
|
ENV['RUBYGEMS_GEMDEPS'] = "-"
|
1452
1452
|
|
1453
1453
|
out = `#{Gem.ruby.dup.untaint} -I "#{LIB_PATH.untaint}" -rubygems -e "p Gem.loaded_specs.values.map(&:full_name).sort"`
|
1454
|
+
out.sub!(/, "openssl-#{Gem::Version::VERSION_PATTERN}"/, "")
|
1454
1455
|
|
1455
1456
|
assert_equal '["a-1", "b-1", "c-1"]', out.strip
|
1456
1457
|
end
|
@@ -1484,6 +1485,7 @@ class TestGem < Gem::TestCase
|
|
1484
1485
|
out = Dir.chdir "sub1" do
|
1485
1486
|
`#{Gem.ruby.dup.untaint} -I "#{LIB_PATH.untaint}" -rubygems -e "p Gem.loaded_specs.values.map(&:full_name).sort"`
|
1486
1487
|
end
|
1488
|
+
out.sub!(/, "openssl-#{Gem::Version::VERSION_PATTERN}"/, "")
|
1487
1489
|
|
1488
1490
|
Dir.rmdir "sub1"
|
1489
1491
|
|
@@ -111,6 +111,29 @@ class TestGemExtExtConfBuilder < Gem::TestCase
|
|
111
111
|
|
112
112
|
assert_match(/^#{Gem.ruby}.* extconf.rb/, output[1])
|
113
113
|
assert_match(File.join(@dest_path, 'mkmf.log'), output[4])
|
114
|
+
assert_includes(output, "To see why this extension failed to compile, please check the mkmf.log which can be found here:\n")
|
115
|
+
|
116
|
+
assert_path_exists File.join @dest_path, 'mkmf.log'
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_class_build_extconf_success_without_warning
|
120
|
+
if vc_windows? && !nmake_found?
|
121
|
+
skip("test_class_build_extconf_fail skipped - nmake not found")
|
122
|
+
end
|
123
|
+
|
124
|
+
File.open File.join(@ext, 'extconf.rb'), 'w' do |extconf|
|
125
|
+
extconf.puts "require 'mkmf'"
|
126
|
+
extconf.puts "File.open('mkmf.log', 'w'){|f| f.write('a')}"
|
127
|
+
extconf.puts "create_makefile 'foo'"
|
128
|
+
end
|
129
|
+
|
130
|
+
output = []
|
131
|
+
|
132
|
+
Dir.chdir @ext do
|
133
|
+
Gem::Ext::ExtConfBuilder.build 'extconf.rb', nil, @dest_path, output
|
134
|
+
end
|
135
|
+
|
136
|
+
refute_includes(output, "To see why this extension failed to compile, please check the mkmf.log which can be found here:\n")
|
114
137
|
|
115
138
|
assert_path_exists File.join @dest_path, 'mkmf.log'
|
116
139
|
end
|
@@ -14,14 +14,7 @@ class TestGemExtRakeBuilder < Gem::TestCase
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def test_class_build
|
17
|
-
|
18
|
-
mkrf_conf.puts <<-EO_MKRF
|
19
|
-
File.open("Rakefile","w") do |f|
|
20
|
-
f.puts "task :default"
|
21
|
-
end
|
22
|
-
EO_MKRF
|
23
|
-
end
|
24
|
-
|
17
|
+
create_temp_mkrf_file('task :default')
|
25
18
|
output = []
|
26
19
|
realdir = nil # HACK /tmp vs. /private/tmp
|
27
20
|
|
@@ -39,15 +32,31 @@ class TestGemExtRakeBuilder < Gem::TestCase
|
|
39
32
|
end
|
40
33
|
end
|
41
34
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
35
|
+
# https://github.com/rubygems/rubygems/pull/1819
|
36
|
+
#
|
37
|
+
# It should not fail with a non-empty args list either
|
38
|
+
def test_class_build_with_args
|
39
|
+
create_temp_mkrf_file('task :default')
|
40
|
+
output = []
|
41
|
+
realdir = nil # HACK /tmp vs. /private/tmp
|
42
|
+
|
43
|
+
build_rake_in do |rake|
|
44
|
+
Dir.chdir @ext do
|
45
|
+
realdir = Dir.pwd
|
46
|
+
non_empty_args_list = ['']
|
47
|
+
Gem::Ext::RakeBuilder.build 'mkrf_conf.rb', nil, @dest_path, output, non_empty_args_list
|
48
|
+
end
|
49
|
+
|
50
|
+
output = output.join "\n"
|
51
|
+
|
52
|
+
refute_match %r%^rake failed:%, output
|
53
|
+
assert_match %r%^#{Regexp.escape @@ruby} mkrf_conf\.rb%, output
|
54
|
+
assert_match %r%^#{Regexp.escape rake} RUBYARCHDIR=#{Regexp.escape @dest_path} RUBYLIBDIR=#{Regexp.escape @dest_path}%, output
|
49
55
|
end
|
56
|
+
end
|
50
57
|
|
58
|
+
def test_class_build_fail
|
59
|
+
create_temp_mkrf_file("task :default do abort 'fail' end")
|
51
60
|
output = []
|
52
61
|
|
53
62
|
build_rake_in(false) do |rake|
|
@@ -60,6 +69,14 @@ class TestGemExtRakeBuilder < Gem::TestCase
|
|
60
69
|
assert_match %r%^rake failed%, error.message
|
61
70
|
end
|
62
71
|
end
|
63
|
-
|
72
|
+
|
73
|
+
def create_temp_mkrf_file(rakefile_content)
|
74
|
+
File.open File.join(@ext, 'mkrf_conf.rb'), 'w' do |mkrf_conf|
|
75
|
+
mkrf_conf.puts <<-EO_MKRF
|
76
|
+
File.open("Rakefile","w") do |f|
|
77
|
+
f.puts "#{rakefile_content}"
|
78
|
+
end
|
79
|
+
EO_MKRF
|
80
|
+
end
|
81
|
+
end
|
64
82
|
end
|
65
|
-
|
@@ -392,6 +392,22 @@ class TestGemServer < Gem::TestCase
|
|
392
392
|
Marshal.load(Gem.gunzip(@res.body))
|
393
393
|
end
|
394
394
|
|
395
|
+
def test_uri_encode
|
396
|
+
url_safe = @server.uri_encode 'http://rubyonrails.org/">malicious_content</a>'
|
397
|
+
assert_equal url_safe, 'http://rubyonrails.org/%22%3Emalicious_content%3C/a%3E'
|
398
|
+
end
|
399
|
+
|
400
|
+
# Regression test for issue #1793: incorrect URL encoding.
|
401
|
+
# Checking that no URLs have had '://' incorrectly encoded
|
402
|
+
def test_regression_1793
|
403
|
+
data = StringIO.new "GET / HTTP/1.0\r\n\r\n"
|
404
|
+
@req.parse data
|
405
|
+
|
406
|
+
@server.root @req, @res
|
407
|
+
|
408
|
+
refute_match %r|%3A%2F%2F|, @res.body
|
409
|
+
end
|
410
|
+
|
395
411
|
def util_listen
|
396
412
|
webrick = Object.new
|
397
413
|
webrick.instance_variable_set :@listeners, []
|
@@ -1260,7 +1260,7 @@ dependencies: []
|
|
1260
1260
|
s.version = '1'
|
1261
1261
|
end
|
1262
1262
|
|
1263
|
-
spec.instance_variable_set :@licenses,
|
1263
|
+
spec.instance_variable_set :@licenses, (class << (Object.new);self;end)
|
1264
1264
|
spec.loaded_from = '/path/to/file'
|
1265
1265
|
|
1266
1266
|
e = assert_raises Gem::FormatException do
|
@@ -33,6 +33,20 @@ class TestStubSpecification < Gem::TestCase
|
|
33
33
|
assert_equal %w[ext/stub_e/extconf.rb], stub.extensions
|
34
34
|
end
|
35
35
|
|
36
|
+
def test_initialize_version
|
37
|
+
stub = stub_with_version
|
38
|
+
|
39
|
+
assert_equal 'stub_v', stub.name
|
40
|
+
assert_equal v(2), stub.version
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_initialize_with_empty_version
|
44
|
+
stub = stub_without_version
|
45
|
+
|
46
|
+
assert_equal 'stub_v', stub.name
|
47
|
+
assert_equal v(0), stub.version
|
48
|
+
end
|
49
|
+
|
36
50
|
def test_initialize_missing_stubline
|
37
51
|
stub = Gem::StubSpecification.gemspec_stub(BAR, @base_dir, @gems_dir)
|
38
52
|
assert_equal "bar", stub.name
|
@@ -164,6 +178,53 @@ class TestStubSpecification < Gem::TestCase
|
|
164
178
|
assert stub.to_spec.instance_variable_get :@ignored
|
165
179
|
end
|
166
180
|
|
181
|
+
def stub_with_version
|
182
|
+
spec = File.join @gemhome, 'specifications', 'stub_e-2.gemspec'
|
183
|
+
open spec, 'w' do |io|
|
184
|
+
io.write <<-STUB
|
185
|
+
# -*- encoding: utf-8 -*-
|
186
|
+
# stub: stub_v 2 ruby lib
|
187
|
+
|
188
|
+
Gem::Specification.new do |s|
|
189
|
+
s.name = 'stub_v'
|
190
|
+
s.version = Gem::Version.new '2'
|
191
|
+
end
|
192
|
+
STUB
|
193
|
+
|
194
|
+
io.flush
|
195
|
+
|
196
|
+
stub = Gem::StubSpecification.gemspec_stub io.path, @gemhome, File.join(@gemhome, 'gems')
|
197
|
+
|
198
|
+
yield stub if block_given?
|
199
|
+
|
200
|
+
return stub
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
def stub_without_version
|
205
|
+
spec = File.join @gemhome, 'specifications', 'stub-2.gemspec'
|
206
|
+
open spec, 'w' do |io|
|
207
|
+
io.write <<-STUB
|
208
|
+
# -*- encoding: utf-8 -*-
|
209
|
+
# stub: stub_v ruby lib
|
210
|
+
|
211
|
+
Gem::Specification.new do |s|
|
212
|
+
s.name = 'stub_v'
|
213
|
+
s.version = ""
|
214
|
+
end
|
215
|
+
STUB
|
216
|
+
|
217
|
+
io.flush
|
218
|
+
|
219
|
+
stub = Gem::StubSpecification.gemspec_stub io.path, @gemhome, File.join(@gemhome, 'gems')
|
220
|
+
|
221
|
+
yield stub if block_given?
|
222
|
+
|
223
|
+
return stub
|
224
|
+
end
|
225
|
+
|
226
|
+
end
|
227
|
+
|
167
228
|
def stub_with_extension
|
168
229
|
spec = File.join @gemhome, 'specifications', 'stub_e-2.gemspec'
|
169
230
|
open spec, 'w' do |io|
|