rubygems-update 1.3.6 → 1.3.7
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.
- data.tar.gz.sig +0 -0
- data/ChangeLog +86 -0
- data/History.txt +34 -1
- data/Manifest.txt +6 -1
- data/Rakefile +79 -34
- data/lib/rubygems.rb +52 -30
- data/lib/rubygems/builder.rb +2 -0
- data/lib/rubygems/command.rb +12 -0
- data/lib/rubygems/command_manager.rb +17 -12
- data/lib/rubygems/commands/contents_command.rb +1 -1
- data/lib/rubygems/commands/dependency_command.rb +3 -1
- data/lib/rubygems/commands/environment_command.rb +3 -2
- data/lib/rubygems/commands/fetch_command.rb +7 -3
- data/lib/rubygems/commands/install_command.rb +2 -1
- data/lib/rubygems/commands/query_command.rb +16 -3
- data/lib/rubygems/commands/server_command.rb +5 -3
- data/lib/rubygems/commands/setup_command.rb +1 -1
- data/lib/rubygems/commands/unpack_command.rb +35 -23
- data/lib/rubygems/commands/update_command.rb +1 -1
- data/lib/rubygems/defaults.rb +4 -6
- data/lib/rubygems/dependency.rb +32 -6
- data/lib/rubygems/dependency_installer.rb +10 -3
- data/lib/rubygems/doc_manager.rb +5 -2
- data/lib/rubygems/errors.rb +35 -0
- data/lib/rubygems/exceptions.rb +10 -1
- data/lib/rubygems/indexer.rb +1 -1
- data/lib/rubygems/installer.rb +6 -5
- data/lib/rubygems/package.rb +6 -3
- data/lib/rubygems/package/f_sync_dir.rb +4 -3
- data/lib/rubygems/package/tar_header.rb +4 -3
- data/lib/rubygems/package/tar_output.rb +4 -3
- data/lib/rubygems/package/tar_reader.rb +4 -3
- data/lib/rubygems/package/tar_writer.rb +4 -3
- data/lib/rubygems/package_task.rb +4 -3
- data/lib/rubygems/platform.rb +4 -1
- data/lib/rubygems/remote_fetcher.rb +9 -3
- data/lib/rubygems/requirement.rb +5 -0
- data/lib/rubygems/security.rb +3 -3
- data/lib/rubygems/server.rb +33 -18
- data/lib/rubygems/source_index.rb +4 -4
- data/lib/rubygems/source_info_cache.rb +4 -2
- data/lib/rubygems/spec_fetcher.rb +33 -11
- data/lib/rubygems/specification.rb +40 -32
- data/lib/rubygems/test_utilities.rb +2 -2
- data/lib/rubygems/validator.rb +3 -4
- data/lib/rubygems/version.rb +1 -1
- data/test/gem_package_tar_test_case.rb +2 -2
- data/test/gemutilities.rb +15 -9
- data/test/insure_session.rb +1 -1
- data/test/plugin/exception/rubygems_plugin.rb +2 -0
- data/test/plugin/load/rubygems_plugin.rb +1 -0
- data/test/plugin/standarderror/rubygems_plugin.rb +2 -0
- data/test/rubygems/commands/crash_command.rb +5 -0
- data/test/rubygems_plugin.rb +5 -0
- data/test/simple_gem.rb +15 -15
- data/test/test_gem.rb +45 -2
- data/test/test_gem_command_manager.rb +14 -0
- data/test/test_gem_commands_contents_command.rb +7 -5
- data/test/test_gem_commands_environment_command.rb +3 -1
- data/test/test_gem_commands_fetch_command.rb +21 -1
- data/test/test_gem_commands_install_command.rb +2 -4
- data/test/test_gem_commands_query_command.rb +33 -6
- data/test/test_gem_commands_server_command.rb +9 -2
- data/test/test_gem_commands_uninstall_command.rb +4 -2
- data/test/test_gem_commands_unpack_command.rb +46 -2
- data/test/test_gem_config_file.rb +2 -0
- data/test/test_gem_dependency.rb +11 -0
- data/test/test_gem_doc_manager.rb +1 -1
- data/test/test_gem_indexer.rb +2 -2
- data/test/test_gem_installer.rb +1 -1
- data/test/test_gem_package_tar_input.rb +1 -1
- data/test/test_gem_package_tar_writer.rb +3 -3
- data/test/test_gem_platform.rb +19 -0
- data/test/test_gem_server.rb +11 -0
- data/test/test_gem_source_index.rb +2 -2
- data/test/test_gem_spec_fetcher.rb +42 -0
- data/test/test_gem_specification.rb +46 -7
- data/util/{gem_prelude.rb.template → gem_prelude.rb} +53 -23
- metadata +16 -6
- metadata.gz.sig +0 -0
data/test/test_gem_indexer.rb
CHANGED
@@ -2,7 +2,7 @@ require File.expand_path('../gemutilities', __FILE__)
|
|
2
2
|
require 'rubygems/indexer'
|
3
3
|
|
4
4
|
unless ''.respond_to? :to_xs then
|
5
|
-
warn "Gem::Indexer tests are being skipped. Install builder gem."
|
5
|
+
warn "Gem::Indexer tests are being skipped. Install builder gem." if $VERBOSE
|
6
6
|
end
|
7
7
|
|
8
8
|
class TestGemIndexer < RubyGemTestCase
|
@@ -165,7 +165,7 @@ pl-1-i386-linux
|
|
165
165
|
<title>ExampleForge gems</title>
|
166
166
|
<link>http://example.com</link>
|
167
167
|
<description>Recently released gems from http://example.com</description>
|
168
|
-
<generator>RubyGems v#{Gem::
|
168
|
+
<generator>RubyGems v#{Gem::VERSION}</generator>
|
169
169
|
<docs>http://cyber.law.harvard.edu/rss/rss.html</docs>
|
170
170
|
<item>
|
171
171
|
<title>a-2</title>
|
data/test/test_gem_installer.rb
CHANGED
@@ -63,7 +63,7 @@ load Gem.bin_path('a', 'my_exec', version)
|
|
63
63
|
#{Gem.ruby}: No such file or directory -- extconf.rb (LoadError)
|
64
64
|
EOF
|
65
65
|
|
66
|
-
assert_match %r%#{Regexp.escape Gem.ruby} extconf
|
66
|
+
assert_match %r%#{Regexp.escape Gem.ruby} extconf\.rb%,
|
67
67
|
File.read(gem_make_out)
|
68
68
|
assert_match %r%#{Regexp.escape Gem.ruby}: No such file%,
|
69
69
|
File.read(gem_make_out)
|
@@ -39,7 +39,7 @@ class TestTarWriter < TarTestCase
|
|
39
39
|
def test_add_file_simple_padding
|
40
40
|
@tar_writer.add_file_simple 'x', 0, 100
|
41
41
|
|
42
|
-
assert_headers_equal tar_file_header('x', '', 0, 100),
|
42
|
+
assert_headers_equal tar_file_header('x', '', 0, 100),
|
43
43
|
@io.string[0, 512]
|
44
44
|
|
45
45
|
assert_equal "\0" * 512, @io.string[512, 512]
|
@@ -54,7 +54,7 @@ class TestTarWriter < TarTestCase
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def test_add_file_simple_size
|
57
|
-
assert_raises Gem::Package::TarWriter::FileOverflow do
|
57
|
+
assert_raises Gem::Package::TarWriter::FileOverflow do
|
58
58
|
@tar_writer.add_file_simple("lib/foo/bar", 0, 10) do |io|
|
59
59
|
io.write "1" * 11
|
60
60
|
end
|
@@ -62,7 +62,7 @@ class TestTarWriter < TarTestCase
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def test_add_file_unseekable
|
65
|
-
assert_raises Gem::Package::NonSeekableIO do
|
65
|
+
assert_raises Gem::Package::NonSeekableIO do
|
66
66
|
Gem::Package::TarWriter.new(Object.new).add_file 'x', 0
|
67
67
|
end
|
68
68
|
end
|
data/test/test_gem_platform.rb
CHANGED
@@ -30,6 +30,9 @@ class TestGemPlatform < RubyGemTestCase
|
|
30
30
|
'hppa2.0w-hpux11.31' => ['hppa2.0w', 'hpux', '11'],
|
31
31
|
'java' => [nil, 'java', nil],
|
32
32
|
'jruby' => [nil, 'java', nil],
|
33
|
+
'universal-dotnet' => ['universal', 'dotnet', nil],
|
34
|
+
'universal-dotnet2.0' => ['universal', 'dotnet', '2.0'],
|
35
|
+
'universal-dotnet4.0' => ['universal', 'dotnet', '4.0'],
|
33
36
|
'powerpc-aix5.3.0.0' => ['powerpc', 'aix', '5'],
|
34
37
|
'powerpc-darwin7' => ['powerpc', 'darwin', '7'],
|
35
38
|
'powerpc-darwin8' => ['powerpc', 'darwin', '8'],
|
@@ -227,6 +230,22 @@ class TestGemPlatform < RubyGemTestCase
|
|
227
230
|
util_set_arch 'java'
|
228
231
|
assert_match 'java', Gem::Platform.local
|
229
232
|
assert_match 'jruby', Gem::Platform.local
|
233
|
+
|
234
|
+
util_set_arch 'universal-dotnet2.0'
|
235
|
+
assert_match 'universal-dotnet', Gem::Platform.local
|
236
|
+
assert_match 'universal-dotnet-2.0', Gem::Platform.local
|
237
|
+
refute_match 'universal-dotnet-4.0', Gem::Platform.local
|
238
|
+
assert_match 'dotnet', Gem::Platform.local
|
239
|
+
assert_match 'dotnet-2.0', Gem::Platform.local
|
240
|
+
refute_match 'dotnet-4.0', Gem::Platform.local
|
241
|
+
|
242
|
+
util_set_arch 'universal-dotnet4.0'
|
243
|
+
assert_match 'universal-dotnet', Gem::Platform.local
|
244
|
+
refute_match 'universal-dotnet-2.0', Gem::Platform.local
|
245
|
+
assert_match 'universal-dotnet-4.0', Gem::Platform.local
|
246
|
+
assert_match 'dotnet', Gem::Platform.local
|
247
|
+
refute_match 'dotnet-2.0', Gem::Platform.local
|
248
|
+
assert_match 'dotnet-4.0', Gem::Platform.local
|
230
249
|
|
231
250
|
util_set_arch 'powerpc-darwin'
|
232
251
|
assert_match 'powerpc-darwin', Gem::Platform.local
|
data/test/test_gem_server.rb
CHANGED
@@ -20,6 +20,17 @@ class TestGemServer < RubyGemTestCase
|
|
20
20
|
@res = WEBrick::HTTPResponse.new :HTTPVersion => '1.0'
|
21
21
|
end
|
22
22
|
|
23
|
+
def test_spec_dirs
|
24
|
+
s = Gem::Server.new Gem.dir, process_based_port, false
|
25
|
+
|
26
|
+
assert_equal [File.join(Gem.dir, 'specifications')], s.spec_dirs
|
27
|
+
|
28
|
+
s = Gem::Server.new [Gem.dir, Gem.dir], process_based_port, false
|
29
|
+
|
30
|
+
assert_equal [File.join(Gem.dir, 'specifications'),
|
31
|
+
File.join(Gem.dir, 'specifications')], s.spec_dirs
|
32
|
+
end
|
33
|
+
|
23
34
|
def test_Marshal
|
24
35
|
data = StringIO.new "GET /Marshal.#{Gem.marshal_version} HTTP/1.0\r\n\r\n"
|
25
36
|
@req.parse data
|
@@ -85,7 +85,7 @@ Gem::Specification.new do |s|
|
|
85
85
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
86
86
|
s.specification_version = 2
|
87
87
|
|
88
|
-
if Gem::Version.new(Gem::
|
88
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
89
89
|
else
|
90
90
|
end
|
91
91
|
else
|
@@ -334,7 +334,7 @@ WARNING: Invalid .gemspec format in '#{spec_file}'
|
|
334
334
|
end
|
335
335
|
|
336
336
|
def test_refresh_bang
|
337
|
-
a1_spec = File.join @gemhome, "specifications", @a1.spec_name
|
337
|
+
a1_spec = File.join @gemhome, "specifications", @a1.spec_name
|
338
338
|
|
339
339
|
FileUtils.mv a1_spec, @tempdir
|
340
340
|
|
@@ -115,6 +115,21 @@ class TestGemSpecFetcher < RubyGemTestCase
|
|
115
115
|
assert_equal [[@pl1.full_name, @gem_repo]], spec_names
|
116
116
|
end
|
117
117
|
|
118
|
+
def test_fetch_with_errors_mismatched_platform
|
119
|
+
util_set_arch 'hrpa-989'
|
120
|
+
|
121
|
+
@fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@pl1.original_name}.gemspec.rz"] =
|
122
|
+
util_zip(Marshal.dump(@pl1))
|
123
|
+
|
124
|
+
dep = Gem::Dependency.new 'pl', 1
|
125
|
+
specs_and_sources, errors = @sf.fetch_with_errors dep
|
126
|
+
|
127
|
+
assert_equal 0, specs_and_sources.size
|
128
|
+
assert_equal 1, errors.size
|
129
|
+
|
130
|
+
assert_equal "i386-linux", errors[0].platforms.first
|
131
|
+
end
|
132
|
+
|
118
133
|
def test_fetch_spec
|
119
134
|
spec_uri = "#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a1.spec_name}"
|
120
135
|
@fetcher.data["#{spec_uri}.rz"] = util_zip(Marshal.dump(@a1))
|
@@ -220,6 +235,33 @@ class TestGemSpecFetcher < RubyGemTestCase
|
|
220
235
|
assert_equal [], specs
|
221
236
|
end
|
222
237
|
|
238
|
+
def test_find_matching_with_errors_matched_platform
|
239
|
+
util_set_arch 'i386-linux'
|
240
|
+
|
241
|
+
dep = Gem::Dependency.new 'pl', 1
|
242
|
+
specs, errors = @sf.find_matching_with_errors dep
|
243
|
+
|
244
|
+
expected = [
|
245
|
+
[['pl', Gem::Version.new(1), 'i386-linux'], @gem_repo],
|
246
|
+
]
|
247
|
+
|
248
|
+
assert_equal expected, specs
|
249
|
+
assert_equal 0, errors.size
|
250
|
+
end
|
251
|
+
|
252
|
+
def test_find_matching_with_errors_invalid_platform
|
253
|
+
util_set_arch 'hrpa-899'
|
254
|
+
|
255
|
+
dep = Gem::Dependency.new 'pl', 1
|
256
|
+
specs, errors = @sf.find_matching_with_errors dep
|
257
|
+
|
258
|
+
assert_equal 0, specs.size
|
259
|
+
|
260
|
+
assert_equal 1, errors.size
|
261
|
+
|
262
|
+
assert_equal "i386-linux", errors[0].platforms.first
|
263
|
+
end
|
264
|
+
|
223
265
|
def test_find_all_platforms
|
224
266
|
util_set_arch 'i386-freebsd6'
|
225
267
|
|
@@ -473,6 +473,31 @@ end
|
|
473
473
|
assert_equal expected, @a1.files.sort
|
474
474
|
end
|
475
475
|
|
476
|
+
def test_files_append
|
477
|
+
@a1.files = %w(files bin/common)
|
478
|
+
@a1.test_files = %w(test_files bin/common)
|
479
|
+
@a1.executables = %w(executables common)
|
480
|
+
@a1.extra_rdoc_files = %w(extra_rdoc_files bin/common)
|
481
|
+
@a1.extensions = %w(extensions bin/common)
|
482
|
+
|
483
|
+
expected = %w[
|
484
|
+
bin/common
|
485
|
+
bin/executables
|
486
|
+
extensions
|
487
|
+
extra_rdoc_files
|
488
|
+
files
|
489
|
+
test_files
|
490
|
+
]
|
491
|
+
assert_equal expected, @a1.files.sort
|
492
|
+
|
493
|
+
@a1.files << "generated_file.c"
|
494
|
+
|
495
|
+
expected << "generated_file.c"
|
496
|
+
expected.sort!
|
497
|
+
|
498
|
+
assert_equal expected, @a1.files.sort
|
499
|
+
end
|
500
|
+
|
476
501
|
def test_files_duplicate
|
477
502
|
@a2.files = %w[a b c d b]
|
478
503
|
@a2.extra_rdoc_files = %w[x y z x]
|
@@ -549,7 +574,7 @@ end
|
|
549
574
|
'i386-mswin32_80' => 'a-1-x86-mswin32-80',
|
550
575
|
'i386-mingw32' => 'a-1-x86-mingw32'
|
551
576
|
}
|
552
|
-
|
577
|
+
|
553
578
|
test_cases.each do |arch, expected|
|
554
579
|
util_set_arch arch
|
555
580
|
@a1.platform = 'current'
|
@@ -748,14 +773,14 @@ Gem::Specification.new do |s|
|
|
748
773
|
s.files = [\"lib/code.rb\"]
|
749
774
|
s.homepage = %q{http://example.com}
|
750
775
|
s.require_paths = [\"lib\"]
|
751
|
-
s.rubygems_version = %q{#{Gem::
|
776
|
+
s.rubygems_version = %q{#{Gem::VERSION}}
|
752
777
|
s.summary = %q{this is a summary}
|
753
778
|
|
754
779
|
if s.respond_to? :specification_version then
|
755
780
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
756
781
|
s.specification_version = #{Gem::Specification::CURRENT_SPECIFICATION_VERSION}
|
757
782
|
|
758
|
-
if Gem::Version.new(Gem::
|
783
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
759
784
|
s.add_runtime_dependency(%q<b>, [\"= 1\"])
|
760
785
|
else
|
761
786
|
s.add_dependency(%q<b>, [\"= 1\"])
|
@@ -802,7 +827,7 @@ Gem::Specification.new do |s|
|
|
802
827
|
s.require_paths = [\"lib\"]
|
803
828
|
s.requirements = [\"A working computer\"]
|
804
829
|
s.rubyforge_project = %q{example}
|
805
|
-
s.rubygems_version = %q{#{Gem::
|
830
|
+
s.rubygems_version = %q{#{Gem::VERSION}}
|
806
831
|
s.summary = %q{this is a summary}
|
807
832
|
s.test_files = [\"test/suite.rb\"]
|
808
833
|
|
@@ -810,7 +835,7 @@ Gem::Specification.new do |s|
|
|
810
835
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
811
836
|
s.specification_version = 3
|
812
837
|
|
813
|
-
if Gem::Version.new(Gem::
|
838
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
814
839
|
s.add_runtime_dependency(%q<rake>, [\"> 0.4\"])
|
815
840
|
s.add_runtime_dependency(%q<jabber4r>, [\"> 0.0.0\"])
|
816
841
|
s.add_runtime_dependency(%q<pqa>, [\"> 0.4\", \"<= 0.6\"])
|
@@ -883,7 +908,7 @@ end
|
|
883
908
|
|
884
909
|
yaml_str = @a1.to_yaml
|
885
910
|
|
886
|
-
same_spec = YAML.load
|
911
|
+
same_spec = YAML.load yaml_str
|
887
912
|
|
888
913
|
assert_equal Gem::Platform.new('powerpc-darwin7'), same_spec.platform
|
889
914
|
assert_equal 'powerpc-darwin7.9.0', same_spec.original_platform
|
@@ -1173,7 +1198,7 @@ end
|
|
1173
1198
|
@a1.validate
|
1174
1199
|
end
|
1175
1200
|
|
1176
|
-
assert_equal "expected RubyGems version #{Gem::
|
1201
|
+
assert_equal "expected RubyGems version #{Gem::VERSION}, was 3",
|
1177
1202
|
e.message
|
1178
1203
|
end
|
1179
1204
|
|
@@ -1228,6 +1253,20 @@ end
|
|
1228
1253
|
assert_equal Gem::Version.new('1'), @a1.version
|
1229
1254
|
end
|
1230
1255
|
|
1256
|
+
def test_load_errors_contain_filename
|
1257
|
+
specfile = Tempfile.new(self.class.name.downcase)
|
1258
|
+
specfile.write "raise 'boom'"
|
1259
|
+
specfile.close
|
1260
|
+
begin
|
1261
|
+
Gem::Specification.load(specfile.path)
|
1262
|
+
rescue => e
|
1263
|
+
name_rexp = Regexp.new(Regexp.escape(specfile.path))
|
1264
|
+
assert e.backtrace.grep(name_rexp).any?
|
1265
|
+
end
|
1266
|
+
ensure
|
1267
|
+
specfile.delete
|
1268
|
+
end
|
1269
|
+
|
1231
1270
|
def util_setup_validate
|
1232
1271
|
Dir.chdir @tempdir do
|
1233
1272
|
FileUtils.mkdir_p File.join('ext', 'a')
|
@@ -1,6 +1,5 @@
|
|
1
1
|
# depends on: array.rb dir.rb env.rb file.rb hash.rb module.rb regexp.rb
|
2
2
|
# vim: filetype=ruby
|
3
|
-
# WARN
|
4
3
|
|
5
4
|
# NOTICE: Ruby is during initialization here.
|
6
5
|
# * Encoding.default_external does not reflects -E.
|
@@ -16,7 +15,7 @@ if defined?(Gem) then
|
|
16
15
|
def gem(gem_name, *version_requirements)
|
17
16
|
Gem.push_gem_version_on_load_path(gem_name, *version_requirements)
|
18
17
|
end
|
19
|
-
|
18
|
+
private :gem
|
20
19
|
end
|
21
20
|
|
22
21
|
module Gem
|
@@ -43,7 +42,7 @@ if defined?(Gem) then
|
|
43
42
|
def self.path
|
44
43
|
@gem_path ||= nil
|
45
44
|
unless @gem_path
|
46
|
-
paths = [ENV['GEM_PATH']]
|
45
|
+
paths = [ENV['GEM_PATH'] || default_path]
|
47
46
|
paths << APPLE_GEM_HOME if defined? APPLE_GEM_HOME
|
48
47
|
set_paths(paths.compact.join(File::PATH_SEPARATOR))
|
49
48
|
end
|
@@ -67,7 +66,8 @@ if defined?(Gem) then
|
|
67
66
|
end
|
68
67
|
|
69
68
|
def self.set_home(home)
|
70
|
-
home = home.
|
69
|
+
home = home.dup.force_encoding(Encoding.find('filesystem'))
|
70
|
+
home.gsub!(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
|
71
71
|
@gem_home = home
|
72
72
|
end
|
73
73
|
|
@@ -88,9 +88,24 @@ if defined?(Gem) then
|
|
88
88
|
end
|
89
89
|
|
90
90
|
@gem_path.uniq!
|
91
|
+
@gem_path.map!{|x|x.force_encoding(Encoding.find('filesystem'))}
|
92
|
+
end
|
93
|
+
|
94
|
+
def self.user_home
|
95
|
+
@user_home ||= File.expand_path("~").force_encoding(Encoding.find('filesystem'))
|
96
|
+
rescue
|
97
|
+
if File::ALT_SEPARATOR then
|
98
|
+
"C:/"
|
99
|
+
else
|
100
|
+
"/"
|
101
|
+
end
|
91
102
|
end
|
92
103
|
|
93
|
-
#
|
104
|
+
# begin rubygems/defaults
|
105
|
+
# NOTE: this require will be replaced with in-place eval before compilation.
|
106
|
+
require 'lib/rubygems/defaults.rb'
|
107
|
+
# end rubygems/defaults
|
108
|
+
|
94
109
|
|
95
110
|
##
|
96
111
|
# Methods before this line will be removed when QuickLoader is replaced
|
@@ -130,18 +145,42 @@ if defined?(Gem) then
|
|
130
145
|
Gem::GEM_PRELUDE_METHODS.each do |method_name|
|
131
146
|
undef_method method_name
|
132
147
|
end
|
148
|
+
undef_method :const_missing
|
149
|
+
undef_method :method_missing
|
133
150
|
end
|
134
151
|
|
135
152
|
Kernel.module_eval do
|
136
153
|
undef_method :gem if method_defined? :gem
|
137
154
|
end
|
138
155
|
|
139
|
-
$".delete
|
140
|
-
|
141
|
-
|
156
|
+
$".delete path_to_full_rubygems_library
|
157
|
+
$".each do |path|
|
158
|
+
if /#{Regexp.escape File::SEPARATOR}rubygems\.rb\z/ =~ path
|
159
|
+
raise LoadError, "another rubygems is already loaded from #{path}"
|
160
|
+
end
|
161
|
+
end
|
142
162
|
require 'rubygems'
|
143
163
|
end
|
144
164
|
|
165
|
+
def self.fake_rubygems_as_loaded
|
166
|
+
path = path_to_full_rubygems_library
|
167
|
+
$" << path unless $".include?(path)
|
168
|
+
end
|
169
|
+
|
170
|
+
def self.path_to_full_rubygems_library
|
171
|
+
installed_path = File.join(Gem::ConfigMap[:rubylibprefix], Gem::ConfigMap[:ruby_version])
|
172
|
+
if $:.include?(installed_path)
|
173
|
+
return File.join(installed_path, 'rubygems.rb')
|
174
|
+
else # e.g., on test-all
|
175
|
+
$:.each do |dir|
|
176
|
+
if File.exist?( path = File.join(dir, 'rubygems.rb') )
|
177
|
+
return path
|
178
|
+
end
|
179
|
+
end
|
180
|
+
raise LoadError, 'rubygems.rb'
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
145
184
|
GemPaths = {}
|
146
185
|
GemVersions = {}
|
147
186
|
|
@@ -194,19 +233,11 @@ if defined?(Gem) then
|
|
194
233
|
Dir.entries(gems_directory).each do |gem_directory_name|
|
195
234
|
next if gem_directory_name == "." || gem_directory_name == ".."
|
196
235
|
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
gem_name = gem_directory_name[0...dash]
|
236
|
+
next unless gem_name = gem_directory_name[/(.*)-(.*)/, 1]
|
237
|
+
new_version = integers_for($2)
|
201
238
|
current_version = GemVersions[gem_name]
|
202
|
-
|
203
|
-
|
204
|
-
if current_version then
|
205
|
-
if (current_version <=> new_version) == -1 then
|
206
|
-
GemVersions[gem_name] = new_version
|
207
|
-
GemPaths[gem_name] = File.join(gems_directory, gem_directory_name)
|
208
|
-
end
|
209
|
-
else
|
239
|
+
|
240
|
+
if !current_version or (current_version <=> new_version) < 0 then
|
210
241
|
GemVersions[gem_name] = new_version
|
211
242
|
GemPaths[gem_name] = File.join(gems_directory, gem_directory_name)
|
212
243
|
end
|
@@ -236,7 +267,7 @@ if defined?(Gem) then
|
|
236
267
|
require_paths.first.instance_variable_set(:@gem_prelude_index, true)
|
237
268
|
end
|
238
269
|
# gem directories must come after -I and ENV['RUBYLIB']
|
239
|
-
$:[$:.index(
|
270
|
+
$:[$:.index{|e|e.instance_variable_defined?(:@gem_prelude_index)}||-1,0] = require_paths
|
240
271
|
end
|
241
272
|
|
242
273
|
def const_missing(constant)
|
@@ -262,8 +293,7 @@ if defined?(Gem) then
|
|
262
293
|
|
263
294
|
begin
|
264
295
|
Gem.push_all_highest_version_gems_on_load_path
|
265
|
-
|
266
|
-
Gem::ConfigMap[:ruby_version], "rubygems.rb")
|
296
|
+
Gem::QuickLoader.fake_rubygems_as_loaded
|
267
297
|
rescue Exception => e
|
268
298
|
puts "Error loading gem paths on load path in gem_prelude"
|
269
299
|
puts e
|