rubygems-update 1.8.6 → 1.8.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/History.txt +17 -4
- data/Manifest.txt +0 -1
- data/Rakefile +3 -5
- data/lib/rubygems.rb +7 -2
- data/lib/rubygems/commands/cleanup_command.rb +7 -4
- data/lib/rubygems/commands/setup_command.rb +1 -1
- data/lib/rubygems/commands/which_command.rb +1 -1
- data/lib/rubygems/gem_openssl.rb +3 -5
- data/lib/rubygems/installer.rb +1 -0
- data/lib/rubygems/remote_fetcher.rb +1 -1
- data/lib/rubygems/requirement.rb +4 -0
- data/lib/rubygems/test_case.rb +24 -3
- data/lib/rubygems/test_utilities.rb +2 -0
- data/lib/rubygems/uninstaller.rb +13 -7
- data/lib/rubygems/user_interaction.rb +1 -1
- data/test/rubygems/test_gem.rb +16 -4
- data/test/rubygems/test_gem_commands_cleanup_command.rb +38 -0
- data/test/rubygems/test_gem_commands_sources_command.rb +2 -0
- data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -13
- data/test/rubygems/test_gem_commands_which_command.rb +15 -1
- data/test/rubygems/test_gem_installer.rb +2 -1
- data/test/rubygems/test_gem_remote_fetcher.rb +22 -0
- data/test/rubygems/test_gem_stream_ui.rb +12 -6
- data/test/rubygems/test_gem_uninstaller.rb +11 -1
- metadata +37 -16
- metadata.gz.sig +0 -0
- data/util/gem_prelude.rb +0 -304
data.tar.gz.sig
ADDED
Binary file
|
data/History.txt
CHANGED
@@ -1,16 +1,29 @@
|
|
1
|
-
|
1
|
+
# coding: UTF-8
|
2
2
|
|
3
|
-
|
3
|
+
=== 1.8.7 / 2011-08-02
|
4
4
|
|
5
|
-
|
5
|
+
* 5 bug fixes:
|
6
|
+
* Added missing require for `gem uninstall --format-executable`
|
7
|
+
* The correct name of the executable being uninstalled is now displayed with
|
8
|
+
--format-executable
|
9
|
+
* Fixed `gem unpack uninstalled_gem` default version picker
|
10
|
+
* RubyGems no longer claims a nonexistent gem can be uninstalled
|
11
|
+
* `gem which` no longer claims directories are requirable files
|
12
|
+
* `gem cleanup` continues cleaning up gems if one can't be uninstalled due
|
13
|
+
to permissions. Issue #82
|
14
|
+
* Gem repository directories are no longer created world-writable. Patch by
|
15
|
+
Sakuro OZAWA. Ruby Bug #4930
|
16
|
+
|
17
|
+
=== 1.8.6 / 2011-07-25
|
6
18
|
|
7
19
|
* 1 minor enhancement:
|
8
20
|
|
9
21
|
* Add autorequires and delay startup of RubyGems until require is called.
|
10
22
|
See Ruby bug #4962
|
11
23
|
|
12
|
-
*
|
24
|
+
* 9 bug fixes:
|
13
25
|
|
26
|
+
* Restore behavior of Gem::Specification#loaded? Ruby Bug #5032
|
14
27
|
* Clean up SourceIndex.add_specs to not be so damn noisy. (tadman)
|
15
28
|
* Added missing APPLE_GEM_HOME in paths.
|
16
29
|
* Extend YAML::Syck::DefaultKey fixing to `marshal_dump` as well.
|
data/Manifest.txt
CHANGED
data/Rakefile
CHANGED
@@ -116,8 +116,7 @@ def rsync_with dir
|
|
116
116
|
" --exclude '*.rej' --exclude '*.orig' --exclude 'lib/rubygems/defaults/*'"
|
117
117
|
sh "rsync #{rsync_options} bin/gem #{dir}/bin/gem"
|
118
118
|
sh "rsync #{rsync_options} lib/ #{dir}/lib"
|
119
|
-
sh "rsync #{rsync_options} test/ #{dir}/test
|
120
|
-
sh "rsync #{rsync_options} util/gem_prelude.rb #{dir}/gem_prelude.rb"
|
119
|
+
sh "rsync #{rsync_options} test/ #{dir}/test"
|
121
120
|
end
|
122
121
|
|
123
122
|
def diff_with dir
|
@@ -128,11 +127,10 @@ def diff_with dir
|
|
128
127
|
sh "diff #{diff_options} lib/rubygems #{dir}/lib/rubygems; true"
|
129
128
|
sh "diff #{diff_options} lib/rbconfig #{dir}/lib/rbconfig; true"
|
130
129
|
sh "diff #{diff_options} test #{dir}/test/rubygems; true"
|
131
|
-
sh "diff #{diff_options} util/gem_prelude.rb #{dir}/gem_prelude.rb; true"
|
132
130
|
end
|
133
131
|
|
134
|
-
rubinius_dir = ENV['RUBINIUS_PATH'] || '
|
135
|
-
ruby_dir = ENV['RUBY_PATH'] || '../../ruby/trunk'
|
132
|
+
rubinius_dir = ENV['RUBINIUS_PATH'] || '../git.rubini.us/code'
|
133
|
+
ruby_dir = ENV['RUBY_PATH'] || '../../svn/ruby/trunk'
|
136
134
|
|
137
135
|
desc "Updates Ruby HEAD with the currently checked-out copy of RubyGems."
|
138
136
|
task :update_ruby do
|
data/lib/rubygems.rb
CHANGED
@@ -118,7 +118,7 @@ require "rubygems/deprecate"
|
|
118
118
|
# -The RubyGems Team
|
119
119
|
|
120
120
|
module Gem
|
121
|
-
VERSION = '1.8.
|
121
|
+
VERSION = '1.8.7'
|
122
122
|
|
123
123
|
##
|
124
124
|
# Raised when RubyGems is unable to load or activate a gem. Contains the
|
@@ -444,11 +444,16 @@ module Gem
|
|
444
444
|
def self.ensure_gem_subdirectories dir = Gem.dir
|
445
445
|
require 'fileutils'
|
446
446
|
|
447
|
+
old_umask = File.umask
|
448
|
+
File.umask old_umask | 022
|
449
|
+
|
447
450
|
%w[cache doc gems specifications].each do |name|
|
448
451
|
subdir = File.join dir, name
|
449
452
|
next if File.exist? subdir
|
450
453
|
FileUtils.mkdir_p subdir rescue nil # in case of perms issues -- lame
|
451
454
|
end
|
455
|
+
ensure
|
456
|
+
File.umask old_umask
|
452
457
|
end
|
453
458
|
|
454
459
|
##
|
@@ -1206,7 +1211,7 @@ end
|
|
1206
1211
|
# Otherwise return a path to the share area as define by
|
1207
1212
|
# "#{ConfigMap[:datadir]}/#{package_name}".
|
1208
1213
|
|
1209
|
-
def RbConfig.datadir(package_name)
|
1214
|
+
def RbConfig.datadir(package_name) # :nodoc:
|
1210
1215
|
warn "#{Gem.location_of_caller.join ':'}:Warning: " \
|
1211
1216
|
"RbConfig.datadir is deprecated and will be removed on or after " \
|
1212
1217
|
"August 2011. " \
|
@@ -61,6 +61,8 @@ installed elsewhere in GEM_PATH the cleanup command won't touch it.
|
|
61
61
|
|
62
62
|
deps = deplist.strongly_connected_components.flatten.reverse
|
63
63
|
|
64
|
+
original_path = Gem.path
|
65
|
+
|
64
66
|
deps.each do |spec|
|
65
67
|
if options[:dryrun] then
|
66
68
|
say "Dry Run Mode: Would uninstall #{spec.full_name}"
|
@@ -74,20 +76,21 @@ installed elsewhere in GEM_PATH the cleanup command won't touch it.
|
|
74
76
|
:version => "= #{spec.version}",
|
75
77
|
}
|
76
78
|
|
77
|
-
|
78
|
-
uninstall_options[:install_dir] = spec.base_dir
|
79
|
-
end
|
79
|
+
uninstall_options[:user_install] = Gem.user_dir == spec.base_dir
|
80
80
|
|
81
81
|
uninstaller = Gem::Uninstaller.new spec.name, uninstall_options
|
82
82
|
|
83
83
|
begin
|
84
84
|
uninstaller.uninstall
|
85
85
|
rescue Gem::DependencyRemovalException, Gem::InstallError,
|
86
|
-
Gem::GemNotInHomeException => e
|
86
|
+
Gem::GemNotInHomeException, Gem::FilePermissionError => e
|
87
87
|
say "Unable to uninstall #{spec.full_name}:"
|
88
88
|
say "\t#{e.class}: #{e.message}"
|
89
89
|
end
|
90
90
|
end
|
91
|
+
|
92
|
+
# Restore path Gem::Uninstaller may have change
|
93
|
+
Gem.use_paths(*original_path)
|
91
94
|
end
|
92
95
|
|
93
96
|
say "Clean Up Complete"
|
@@ -60,7 +60,7 @@ class Gem::Commands::WhichCommand < Gem::Command
|
|
60
60
|
dirs.each do |dir|
|
61
61
|
Gem.suffixes.each do |ext|
|
62
62
|
full_path = File.join dir, "#{package_name}#{ext}"
|
63
|
-
if File.exist? full_path then
|
63
|
+
if File.exist? full_path and not File.directory? full_path then
|
64
64
|
result << full_path
|
65
65
|
return result unless options[:show_all]
|
66
66
|
end
|
data/lib/rubygems/gem_openssl.rb
CHANGED
@@ -36,6 +36,8 @@ module Gem
|
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
+
# :stopdoc:
|
40
|
+
|
39
41
|
begin
|
40
42
|
require 'openssl'
|
41
43
|
|
@@ -44,7 +46,7 @@ begin
|
|
44
46
|
|
45
47
|
Gem.ssl_available = !!OpenSSL::Digest::SHA1
|
46
48
|
|
47
|
-
class OpenSSL::X509::Certificate
|
49
|
+
class OpenSSL::X509::Certificate
|
48
50
|
# Check the validity of this certificate.
|
49
51
|
def check_validity(issuer_cert = nil, time = Time.now)
|
50
52
|
ret = if @not_before && @not_before > time
|
@@ -66,8 +68,6 @@ rescue LoadError, StandardError
|
|
66
68
|
Gem.ssl_available = false
|
67
69
|
end
|
68
70
|
|
69
|
-
# :stopdoc:
|
70
|
-
|
71
71
|
module Gem::SSL
|
72
72
|
|
73
73
|
# We make our own versions of the constants here. This allows us
|
@@ -88,5 +88,3 @@ module Gem::SSL
|
|
88
88
|
|
89
89
|
end
|
90
90
|
|
91
|
-
# :startdoc:
|
92
|
-
|
data/lib/rubygems/installer.rb
CHANGED
@@ -434,6 +434,7 @@ class Gem::Installer
|
|
434
434
|
|
435
435
|
def check_that_user_bin_dir_is_in_path
|
436
436
|
user_bin_dir = @bin_dir || Gem.bindir(gem_home)
|
437
|
+
user_bin_dir.gsub!(File::SEPARATOR, File::ALT_SEPARATOR) if File::ALT_SEPARATOR
|
437
438
|
unless ENV['PATH'].split(File::PATH_SEPARATOR).include? user_bin_dir then
|
438
439
|
unless self.class.path_warning then
|
439
440
|
alert_warning "You don't have #{user_bin_dir} in your PATH,\n\t gem executables will not run."
|
data/lib/rubygems/requirement.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require "rubygems/version"
|
2
2
|
|
3
|
+
# :stopdoc:
|
4
|
+
|
3
5
|
# Hack to handle syck's DefaultKey bug with psych
|
4
6
|
#
|
5
7
|
# Quick note! If/when psych loads in 1.9, it will redefine
|
@@ -19,6 +21,8 @@ module YAML
|
|
19
21
|
end
|
20
22
|
end
|
21
23
|
|
24
|
+
# :startdoc:
|
25
|
+
|
22
26
|
##
|
23
27
|
# A Requirement is a set of one or more version restrictions. It supports a
|
24
28
|
# few (<tt>=, !=, >, <, >=, <=, ~></tt>) different restriction operators.
|
data/lib/rubygems/test_case.rb
CHANGED
@@ -97,7 +97,7 @@ class Gem::TestCase < MiniTest::Unit::TestCase
|
|
97
97
|
undef_method :default_test if instance_methods.include? 'default_test' or
|
98
98
|
instance_methods.include? :default_test
|
99
99
|
|
100
|
-
@@project_dir = Dir.pwd
|
100
|
+
@@project_dir = Dir.pwd unless defined?(@@project_dir)
|
101
101
|
|
102
102
|
##
|
103
103
|
# #setup prepares a sandboxed location to install gems. All installs are
|
@@ -116,6 +116,7 @@ class Gem::TestCase < MiniTest::Unit::TestCase
|
|
116
116
|
@orig_gem_home = ENV['GEM_HOME']
|
117
117
|
@orig_gem_path = ENV['GEM_PATH']
|
118
118
|
|
119
|
+
@current_dir = Dir.pwd
|
119
120
|
@ui = Gem::MockGemUi.new
|
120
121
|
|
121
122
|
tmpdir = nil
|
@@ -222,7 +223,7 @@ class Gem::TestCase < MiniTest::Unit::TestCase
|
|
222
223
|
Gem::RemoteFetcher.fetcher = nil
|
223
224
|
end
|
224
225
|
|
225
|
-
Dir.chdir
|
226
|
+
Dir.chdir @current_dir
|
226
227
|
|
227
228
|
FileUtils.rm_rf @tempdir unless ENV['KEEP_FILES']
|
228
229
|
|
@@ -256,6 +257,25 @@ class Gem::TestCase < MiniTest::Unit::TestCase
|
|
256
257
|
Gem::Installer.new(gem, :wrappers => true).install
|
257
258
|
end
|
258
259
|
|
260
|
+
##
|
261
|
+
# Builds and installs the Gem::Specification +spec+ into the user dir
|
262
|
+
|
263
|
+
def install_gem_user spec
|
264
|
+
require 'rubygems/installer'
|
265
|
+
|
266
|
+
use_ui Gem::MockGemUi.new do
|
267
|
+
Dir.chdir @tempdir do
|
268
|
+
Gem::Builder.new(spec).build
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
272
|
+
gem = File.join(@tempdir, File.basename(spec.cache_file)).untaint
|
273
|
+
|
274
|
+
i = Gem::Installer.new(gem, :wrappers => true, :user_install => true)
|
275
|
+
i.install
|
276
|
+
i.spec
|
277
|
+
end
|
278
|
+
|
259
279
|
##
|
260
280
|
# Uninstalls the Gem::Specification +spec+
|
261
281
|
def uninstall_gem spec
|
@@ -677,12 +697,13 @@ Also, a list:
|
|
677
697
|
end
|
678
698
|
|
679
699
|
v = Gem.marshal_version
|
700
|
+
|
680
701
|
Gem::Specification.each do |spec|
|
681
702
|
path = "#{@gem_repo}quick/Marshal.#{v}/#{spec.original_name}.gemspec.rz"
|
682
703
|
data = Marshal.dump spec
|
683
704
|
data_deflate = Zlib::Deflate.deflate data
|
684
705
|
@fetcher.data[path] = data_deflate
|
685
|
-
end
|
706
|
+
end unless Gem::RemoteFetcher === @fetcher # HACK for test_download_to_cache
|
686
707
|
|
687
708
|
nil # force errors
|
688
709
|
end
|
@@ -139,6 +139,8 @@ end
|
|
139
139
|
##
|
140
140
|
# A StringIO duck-typed class that uses Tempfile instead of String as the
|
141
141
|
# backing store.
|
142
|
+
#
|
143
|
+
# This is available when rubygems/test_utilities is required.
|
142
144
|
#--
|
143
145
|
# This class was added to flush out problems in Rubinius' IO implementation.
|
144
146
|
|
data/lib/rubygems/uninstaller.rb
CHANGED
@@ -70,7 +70,7 @@ class Gem::Uninstaller
|
|
70
70
|
list = Gem::Specification.find_all_by_name(@gem, @version)
|
71
71
|
|
72
72
|
if list.empty? then
|
73
|
-
raise Gem::InstallError, "
|
73
|
+
raise Gem::InstallError, "gem #{@gem.inspect} is not installed"
|
74
74
|
|
75
75
|
elsif list.size > 1 and @force_all then
|
76
76
|
remove_all list
|
@@ -141,9 +141,11 @@ class Gem::Uninstaller
|
|
141
141
|
|
142
142
|
return if executables.empty?
|
143
143
|
|
144
|
+
executables = executables.map { |exec| formatted_program_filename exec }
|
145
|
+
|
144
146
|
remove = if @force_executables.nil? then
|
145
147
|
ask_yes_no("Remove executables:\n" \
|
146
|
-
"\t#{
|
148
|
+
"\t#{executables.join ', '}\n\n" \
|
147
149
|
"in addition to the gem?",
|
148
150
|
true)
|
149
151
|
else
|
@@ -153,14 +155,17 @@ class Gem::Uninstaller
|
|
153
155
|
unless remove then
|
154
156
|
say "Executables and scripts will remain installed."
|
155
157
|
else
|
156
|
-
|
158
|
+
bin_dir = @bin_dir || Gem.bindir(spec.base_dir)
|
157
159
|
|
158
|
-
raise Gem::FilePermissionError,
|
160
|
+
raise Gem::FilePermissionError, bin_dir unless File.writable? bin_dir
|
159
161
|
|
160
|
-
|
162
|
+
executables.each do |exe_name|
|
161
163
|
say "Removing #{exe_name}"
|
162
|
-
|
163
|
-
|
164
|
+
|
165
|
+
exe_file = File.join bin_dir, exe_name
|
166
|
+
|
167
|
+
FileUtils.rm_f exe_file
|
168
|
+
FileUtils.rm_f "#{exe_file}.bat"
|
164
169
|
end
|
165
170
|
end
|
166
171
|
end
|
@@ -257,6 +262,7 @@ class Gem::Uninstaller
|
|
257
262
|
|
258
263
|
def formatted_program_filename(filename)
|
259
264
|
if @format_executable then
|
265
|
+
require 'rubygems/installer'
|
260
266
|
Gem::Installer.exec_format % File.basename(filename)
|
261
267
|
else
|
262
268
|
filename
|
data/test/rubygems/test_gem.rb
CHANGED
@@ -598,6 +598,20 @@ class TestGem < Gem::TestCase
|
|
598
598
|
assert File.directory? File.join(@gemhome, "cache")
|
599
599
|
end
|
600
600
|
|
601
|
+
def test_self_ensure_gem_directories_safe_permissions
|
602
|
+
FileUtils.rm_r @gemhome
|
603
|
+
Gem.use_paths @gemhome
|
604
|
+
|
605
|
+
old_umask = File.umask
|
606
|
+
File.umask 0
|
607
|
+
Gem.ensure_gem_subdirectories @gemhome
|
608
|
+
|
609
|
+
assert_equal 0, File::Stat.new(@gemhome).mode & 022
|
610
|
+
assert_equal 0, File::Stat.new(File.join(@gemhome, "cache")).mode & 022
|
611
|
+
ensure
|
612
|
+
File.umask old_umask
|
613
|
+
end unless win_platform?
|
614
|
+
|
601
615
|
def test_self_ensure_gem_directories_missing_parents
|
602
616
|
gemdir = File.join @tempdir, 'a/b/c/gemdir'
|
603
617
|
FileUtils.rm_rf File.join(@tempdir, 'a') rescue nil
|
@@ -985,9 +999,9 @@ class TestGem < Gem::TestCase
|
|
985
999
|
end
|
986
1000
|
end
|
987
1001
|
|
988
|
-
if Gem.win_platform?
|
1002
|
+
if Gem.win_platform? && '1.9' > RUBY_VERSION
|
1003
|
+
# Ruby 1.9 properly handles ~ path expansion, so no need to run such tests.
|
989
1004
|
def test_self_user_home_userprofile
|
990
|
-
skip 'Ruby 1.9 properly handles ~ path expansion' unless '1.9' > RUBY_VERSION
|
991
1005
|
|
992
1006
|
Gem.clear_paths
|
993
1007
|
|
@@ -1006,8 +1020,6 @@ class TestGem < Gem::TestCase
|
|
1006
1020
|
end
|
1007
1021
|
|
1008
1022
|
def test_self_user_home_user_drive_and_path
|
1009
|
-
skip 'Ruby 1.9 properly handles ~ path expansion' unless '1.9' > RUBY_VERSION
|
1010
|
-
|
1011
1023
|
Gem.clear_paths
|
1012
1024
|
|
1013
1025
|
# safe-keep env variables
|
@@ -38,6 +38,44 @@ class TestGemCommandsCleanupCommand < Gem::TestCase
|
|
38
38
|
refute_path_exists @b_1.gem_dir
|
39
39
|
end
|
40
40
|
|
41
|
+
def test_execute_all_user
|
42
|
+
@a_1_1 = quick_spec 'a', '1.1'
|
43
|
+
@a_1_1 = install_gem_user @a_1_1 # pick up user install path
|
44
|
+
|
45
|
+
Gem::Specification.dirs = [Gem.dir, Gem.user_dir]
|
46
|
+
|
47
|
+
assert_path_exists @a_1.gem_dir
|
48
|
+
assert_path_exists @a_1_1.gem_dir
|
49
|
+
|
50
|
+
@cmd.options[:args] = %w[a]
|
51
|
+
|
52
|
+
@cmd.execute
|
53
|
+
|
54
|
+
refute_path_exists @a_1.gem_dir
|
55
|
+
refute_path_exists @a_1_1.gem_dir
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_execute_all_user_no_sudo
|
59
|
+
FileUtils.chmod 0555, @gemhome
|
60
|
+
|
61
|
+
@a_1_1 = quick_spec 'a', '1.1'
|
62
|
+
@a_1_1 = install_gem_user @a_1_1 # pick up user install path
|
63
|
+
|
64
|
+
Gem::Specification.dirs = [Gem.dir, Gem.user_dir]
|
65
|
+
|
66
|
+
assert_path_exists @a_1.gem_dir
|
67
|
+
assert_path_exists @a_1_1.gem_dir
|
68
|
+
|
69
|
+
@cmd.options[:args] = %w[a]
|
70
|
+
|
71
|
+
@cmd.execute
|
72
|
+
|
73
|
+
assert_path_exists @a_1.gem_dir
|
74
|
+
refute_path_exists @a_1_1.gem_dir
|
75
|
+
ensure
|
76
|
+
FileUtils.chmod 0755, @gemhome
|
77
|
+
end unless win_platform?
|
78
|
+
|
41
79
|
def test_execute_dry_run
|
42
80
|
@cmd.options[:args] = %w[a]
|
43
81
|
@cmd.options[:dryrun] = true
|
@@ -69,19 +69,6 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase
|
|
69
69
|
Gem::Installer.exec_format = nil
|
70
70
|
end
|
71
71
|
|
72
|
-
def test_execute_not_installed
|
73
|
-
@cmd.options[:args] = ["foo"]
|
74
|
-
e = assert_raises Gem::InstallError do
|
75
|
-
use_ui @ui do
|
76
|
-
@cmd.execute
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
assert_match(/\Acannot uninstall, check `gem list -d foo`$/, e.message)
|
81
|
-
output = @ui.output.split "\n"
|
82
|
-
assert_empty output, "UI output should be empty after an uninstall error"
|
83
|
-
end
|
84
|
-
|
85
72
|
def test_execute_prerelease
|
86
73
|
@spec = quick_spec "pre", "2.b"
|
87
74
|
@gem = File.join @tempdir, @spec.file_name
|
@@ -22,6 +22,20 @@ class TestGemCommandsWhichCommand < Gem::TestCase
|
|
22
22
|
assert_equal '', @ui.error
|
23
23
|
end
|
24
24
|
|
25
|
+
def test_execute_directory
|
26
|
+
@cmd.handle_options %w[directory]
|
27
|
+
|
28
|
+
use_ui @ui do
|
29
|
+
assert_raises Gem::MockGemUi::TermError do
|
30
|
+
@cmd.execute
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
assert_equal '', @ui.output
|
35
|
+
assert_match %r%Can.t find ruby library file or shared library directory\n%,
|
36
|
+
@ui.error
|
37
|
+
end
|
38
|
+
|
25
39
|
def test_execute_one_missing
|
26
40
|
# TODO: this test fails in isolation
|
27
41
|
|
@@ -53,7 +67,7 @@ class TestGemCommandsWhichCommand < Gem::TestCase
|
|
53
67
|
end
|
54
68
|
|
55
69
|
def util_foo_bar
|
56
|
-
files = %w[lib/foo_bar.rb Rakefile]
|
70
|
+
files = %w[lib/foo_bar.rb lib/directory/baz.rb Rakefile]
|
57
71
|
@foo_bar = quick_spec 'foo_bar' do |gem|
|
58
72
|
gem.files = files
|
59
73
|
end
|
@@ -208,9 +208,10 @@ load Gem.bin_path('a', 'executable', version)
|
|
208
208
|
end
|
209
209
|
|
210
210
|
def test_generate_bin_bindir_with_user_install_warning
|
211
|
+
bin_dir = Gem.win_platform? ? File.expand_path(ENV["WINDIR"]) : "/usr/bin"
|
211
212
|
|
212
213
|
options = {
|
213
|
-
:bin_dir =>
|
214
|
+
:bin_dir => bin_dir,
|
214
215
|
:install_dir => "/non/existant"
|
215
216
|
}
|
216
217
|
|
@@ -346,6 +346,28 @@ gems:
|
|
346
346
|
assert_equal 'unsupported URI scheme ftp', e.message
|
347
347
|
end
|
348
348
|
|
349
|
+
def test_download_to_cache
|
350
|
+
@a2, @a2_gem = util_gem 'a', '2'
|
351
|
+
|
352
|
+
util_setup_spec_fetcher @a1, @a2
|
353
|
+
@fetcher.instance_variable_set :@a1, @a1
|
354
|
+
@fetcher.instance_variable_set :@a2, @a2
|
355
|
+
def @fetcher.fetch_path uri, mtime = nil, head = false
|
356
|
+
case uri.request_uri
|
357
|
+
when /#{@a1.spec_name}/ then
|
358
|
+
Gem.deflate Marshal.dump @a1
|
359
|
+
when /#{@a2.spec_name}/ then
|
360
|
+
Gem.deflate Marshal.dump @a2
|
361
|
+
else
|
362
|
+
uri.to_s
|
363
|
+
end
|
364
|
+
end
|
365
|
+
|
366
|
+
gem = Gem::RemoteFetcher.fetcher.download_to_cache dep 'a'
|
367
|
+
|
368
|
+
assert_equal @a2.file_name, File.basename(gem)
|
369
|
+
end
|
370
|
+
|
349
371
|
def test_explicit_proxy
|
350
372
|
use_ui @ui do
|
351
373
|
fetcher = Gem::RemoteFetcher.new @proxy_uri
|
@@ -35,7 +35,8 @@ class TestGemStreamUI < Gem::TestCase
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def test_ask
|
38
|
-
skip 'TTY detection broken on windows' if
|
38
|
+
skip 'TTY detection broken on windows' if
|
39
|
+
Gem.win_platform? unless RUBY_VERSION > '1.9.2'
|
39
40
|
|
40
41
|
timeout(1) do
|
41
42
|
expected_answer = "Arthur, King of the Britons"
|
@@ -46,7 +47,8 @@ class TestGemStreamUI < Gem::TestCase
|
|
46
47
|
end
|
47
48
|
|
48
49
|
def test_ask_no_tty
|
49
|
-
skip 'TTY
|
50
|
+
skip 'TTY detection broken on windows' if
|
51
|
+
Gem.win_platform? unless RUBY_VERSION > '1.9.2'
|
50
52
|
|
51
53
|
@in.tty = false
|
52
54
|
|
@@ -57,7 +59,8 @@ class TestGemStreamUI < Gem::TestCase
|
|
57
59
|
end
|
58
60
|
|
59
61
|
def test_ask_for_password
|
60
|
-
skip 'Always uses $stdin on windows' if
|
62
|
+
skip 'Always uses $stdin on windows' if
|
63
|
+
Gem.win_platform? unless RUBY_VERSION > '1.9.2'
|
61
64
|
|
62
65
|
timeout(1) do
|
63
66
|
expected_answer = "Arthur, King of the Britons"
|
@@ -68,7 +71,8 @@ class TestGemStreamUI < Gem::TestCase
|
|
68
71
|
end
|
69
72
|
|
70
73
|
def test_ask_for_password_no_tty
|
71
|
-
skip 'TTY handling is broken on windows' if
|
74
|
+
skip 'TTY handling is broken on windows' if
|
75
|
+
Gem.win_platform? unless RUBY_VERSION > '1.9.2'
|
72
76
|
|
73
77
|
@in.tty = false
|
74
78
|
|
@@ -79,7 +83,8 @@ class TestGemStreamUI < Gem::TestCase
|
|
79
83
|
end
|
80
84
|
|
81
85
|
def test_ask_yes_no_no_tty_with_default
|
82
|
-
skip 'TTY handling is broken on windows' if
|
86
|
+
skip 'TTY handling is broken on windows' if
|
87
|
+
Gem.win_platform? unless RUBY_VERSION > '1.9.2'
|
83
88
|
|
84
89
|
@in.tty = false
|
85
90
|
|
@@ -93,7 +98,8 @@ class TestGemStreamUI < Gem::TestCase
|
|
93
98
|
end
|
94
99
|
|
95
100
|
def test_ask_yes_no_no_tty_without_default
|
96
|
-
skip 'TTY handling is broken on windows' if
|
101
|
+
skip 'TTY handling is broken on windows' if
|
102
|
+
Gem.win_platform? unless RUBY_VERSION > '1.9.2'
|
97
103
|
|
98
104
|
@in.tty = false
|
99
105
|
|
@@ -94,7 +94,7 @@ class TestGemUninstaller < Gem::InstallerTestCase
|
|
94
94
|
exec_path = File.join Gem.user_dir, 'bin', 'foo-executable-bar'
|
95
95
|
assert_equal false, File.exist?(exec_path), 'removed exec from bin dir'
|
96
96
|
|
97
|
-
assert_equal "Removing executable\n", @ui.output
|
97
|
+
assert_equal "Removing foo-executable-bar\n", @ui.output
|
98
98
|
ensure
|
99
99
|
Gem::Installer.exec_format = nil
|
100
100
|
end
|
@@ -158,6 +158,16 @@ class TestGemUninstaller < Gem::InstallerTestCase
|
|
158
158
|
assert_same uninstaller, @post_uninstall_hook_arg
|
159
159
|
end
|
160
160
|
|
161
|
+
def test_uninstall_nonexistent
|
162
|
+
uninstaller = Gem::Uninstaller.new 'bogus', :executables => true
|
163
|
+
|
164
|
+
e = assert_raises Gem::InstallError do
|
165
|
+
uninstaller.uninstall
|
166
|
+
end
|
167
|
+
|
168
|
+
assert_equal 'gem "bogus" is not installed', e.message
|
169
|
+
end
|
170
|
+
|
161
171
|
def test_uninstall_not_ok
|
162
172
|
quick_gem 'z' do |s|
|
163
173
|
s.add_runtime_dependency @spec.name
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubygems-update
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 57
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 8
|
9
|
-
-
|
10
|
-
version: 1.8.
|
9
|
+
- 7
|
10
|
+
version: 1.8.7
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Jim Weirich
|
@@ -15,9 +15,30 @@ authors:
|
|
15
15
|
- Eric Hodel
|
16
16
|
autorequire:
|
17
17
|
bindir: bin
|
18
|
-
cert_chain:
|
18
|
+
cert_chain:
|
19
|
+
- |
|
20
|
+
-----BEGIN CERTIFICATE-----
|
21
|
+
MIIDNjCCAh6gAwIBAgIBADANBgkqhkiG9w0BAQUFADBBMRAwDgYDVQQDDAdkcmJy
|
22
|
+
YWluMRgwFgYKCZImiZPyLGQBGRYIc2VnbWVudDcxEzARBgoJkiaJk/IsZAEZFgNu
|
23
|
+
ZXQwHhcNMDcxMjIxMDIwNDE0WhcNMDgxMjIwMDIwNDE0WjBBMRAwDgYDVQQDDAdk
|
24
|
+
cmJyYWluMRgwFgYKCZImiZPyLGQBGRYIc2VnbWVudDcxEzARBgoJkiaJk/IsZAEZ
|
25
|
+
FgNuZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCbbgLrGLGIDE76
|
26
|
+
LV/cvxdEzCuYuS3oG9PrSZnuDweySUfdp/so0cDq+j8bqy6OzZSw07gdjwFMSd6J
|
27
|
+
U5ddZCVywn5nnAQ+Ui7jMW54CYt5/H6f2US6U0hQOjJR6cpfiymgxGdfyTiVcvTm
|
28
|
+
Gj/okWrQl0NjYOYBpDi+9PPmaH2RmLJu0dB/NylsDnW5j6yN1BEI8MfJRR+HRKZY
|
29
|
+
mUtgzBwF1V4KIZQ8EuL6I/nHVu07i6IkrpAgxpXUfdJQJi0oZAqXurAV3yTxkFwd
|
30
|
+
g62YrrW26mDe+pZBzR6bpLE+PmXCzz7UxUq3AE0gPHbiMXie3EFE0oxnsU3lIduh
|
31
|
+
sCANiQ8BAgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
|
32
|
+
BBS5k4Z75VSpdM0AclG2UvzFA/VW5DANBgkqhkiG9w0BAQUFAAOCAQEAHagT4lfX
|
33
|
+
kP/hDaiwGct7XPuVGbrOsKRVD59FF5kETBxEc9UQ1clKWngf8JoVuEoKD774dW19
|
34
|
+
bU0GOVWO+J6FMmT/Cp7nuFJ79egMf/gy4gfUfQMuvfcr6DvZUPIs9P/TlK59iMYF
|
35
|
+
DIOQ3DxdF3rMzztNUCizN4taVscEsjCcgW6WkUJnGdqlu3OHWpQxZBJkBTjPCoc6
|
36
|
+
UW6on70SFPmAy/5Cq0OJNGEWBfgD9q7rrs/X8GGwUWqXb85RXnUVi/P8Up75E0ag
|
37
|
+
14jEc90kN+C7oI/AGCBN0j6JnEtYIEJZibjjDJTSMWlUKKkj30kq7hlUC2CepJ4v
|
38
|
+
x52qPcexcYZR7w==
|
39
|
+
-----END CERTIFICATE-----
|
19
40
|
|
20
|
-
date: 2011-
|
41
|
+
date: 2011-08-05 00:00:00 Z
|
21
42
|
dependencies:
|
22
43
|
- !ruby/object:Gem::Dependency
|
23
44
|
name: minitest
|
@@ -27,12 +48,12 @@ dependencies:
|
|
27
48
|
requirements:
|
28
49
|
- - ">="
|
29
50
|
- !ruby/object:Gem::Version
|
30
|
-
hash:
|
51
|
+
hash: 1
|
31
52
|
segments:
|
32
53
|
- 2
|
54
|
+
- 3
|
33
55
|
- 1
|
34
|
-
|
35
|
-
version: 2.1.0
|
56
|
+
version: 2.3.1
|
36
57
|
type: :development
|
37
58
|
version_requirements: *id001
|
38
59
|
- !ruby/object:Gem::Dependency
|
@@ -132,14 +153,13 @@ dependencies:
|
|
132
153
|
requirement: &id008 !ruby/object:Gem::Requirement
|
133
154
|
none: false
|
134
155
|
requirements:
|
135
|
-
- -
|
156
|
+
- - ~>
|
136
157
|
- !ruby/object:Gem::Version
|
137
|
-
hash:
|
158
|
+
hash: 17
|
138
159
|
segments:
|
139
160
|
- 2
|
140
161
|
- 9
|
141
|
-
|
142
|
-
version: 2.9.4
|
162
|
+
version: "2.9"
|
143
163
|
type: :development
|
144
164
|
version_requirements: *id008
|
145
165
|
description: |-
|
@@ -376,16 +396,17 @@ files:
|
|
376
396
|
- test/rubygems/test_gem_version_option.rb
|
377
397
|
- test/rubygems/test_kernel.rb
|
378
398
|
- util/CL2notes
|
379
|
-
- util/gem_prelude.rb
|
380
399
|
- .gemtest
|
381
400
|
homepage: http://rubygems.org
|
382
401
|
licenses: []
|
383
402
|
|
403
|
+
metadata: {}
|
404
|
+
|
384
405
|
post_install_message:
|
385
406
|
rdoc_options:
|
386
407
|
- --main
|
387
408
|
- README.rdoc
|
388
|
-
- --title=RubyGems 1.8.
|
409
|
+
- --title=RubyGems 1.8.7 Documentation
|
389
410
|
require_paths:
|
390
411
|
- hide_lib_for_update
|
391
412
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -411,9 +432,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
411
432
|
requirements: []
|
412
433
|
|
413
434
|
rubyforge_project: rubygems
|
414
|
-
rubygems_version: 1.8.
|
435
|
+
rubygems_version: 1.8.6
|
415
436
|
signing_key:
|
416
|
-
specification_version:
|
437
|
+
specification_version: 4
|
417
438
|
summary: RubyGems is a package management framework for Ruby
|
418
439
|
test_files:
|
419
440
|
- test/rubygems/test_config.rb
|
metadata.gz.sig
ADDED
Binary file
|
data/util/gem_prelude.rb
DELETED
@@ -1,304 +0,0 @@
|
|
1
|
-
# depends on: array.rb dir.rb env.rb file.rb hash.rb module.rb regexp.rb
|
2
|
-
# vim: filetype=ruby
|
3
|
-
|
4
|
-
# NOTICE: Ruby is during initialization here.
|
5
|
-
# * Encoding.default_external does not reflects -E.
|
6
|
-
# * Should not expect Encoding.default_internal.
|
7
|
-
# * Locale encoding is available.
|
8
|
-
|
9
|
-
if defined?(Gem) then
|
10
|
-
|
11
|
-
# :stopdoc:
|
12
|
-
|
13
|
-
module Kernel
|
14
|
-
|
15
|
-
def gem(gem_name, *requirements)
|
16
|
-
Gem.push_gem_version_on_load_path(gem_name, *requirements)
|
17
|
-
end
|
18
|
-
private :gem
|
19
|
-
end
|
20
|
-
|
21
|
-
module Gem
|
22
|
-
|
23
|
-
ConfigMap = {
|
24
|
-
:EXEEXT => RbConfig::CONFIG["EXEEXT"],
|
25
|
-
:RUBY_SO_NAME => RbConfig::CONFIG["RUBY_SO_NAME"],
|
26
|
-
:arch => RbConfig::CONFIG["arch"],
|
27
|
-
:bindir => RbConfig::CONFIG["bindir"],
|
28
|
-
:libdir => RbConfig::CONFIG["libdir"],
|
29
|
-
:ruby_install_name => RbConfig::CONFIG["ruby_install_name"],
|
30
|
-
:ruby_version => RbConfig::CONFIG["ruby_version"],
|
31
|
-
:rubylibprefix => RbConfig::CONFIG["rubylibprefix"],
|
32
|
-
:sitedir => RbConfig::CONFIG["sitedir"],
|
33
|
-
:sitelibdir => RbConfig::CONFIG["sitelibdir"],
|
34
|
-
}
|
35
|
-
|
36
|
-
def self.dir
|
37
|
-
@gem_home ||= nil
|
38
|
-
set_home(ENV['GEM_HOME'] || default_dir) unless @gem_home
|
39
|
-
@gem_home
|
40
|
-
end
|
41
|
-
|
42
|
-
def self.path
|
43
|
-
@gem_path ||= nil
|
44
|
-
unless @gem_path
|
45
|
-
paths = [ENV['GEM_PATH'] || default_path]
|
46
|
-
paths << APPLE_GEM_HOME if defined? APPLE_GEM_HOME
|
47
|
-
set_paths(paths.compact.join(File::PATH_SEPARATOR))
|
48
|
-
end
|
49
|
-
@gem_path
|
50
|
-
end
|
51
|
-
|
52
|
-
def self.post_install(&hook)
|
53
|
-
@post_install_hooks << hook
|
54
|
-
end
|
55
|
-
|
56
|
-
def self.post_uninstall(&hook)
|
57
|
-
@post_uninstall_hooks << hook
|
58
|
-
end
|
59
|
-
|
60
|
-
def self.pre_install(&hook)
|
61
|
-
@pre_install_hooks << hook
|
62
|
-
end
|
63
|
-
|
64
|
-
def self.pre_uninstall(&hook)
|
65
|
-
@pre_uninstall_hooks << hook
|
66
|
-
end
|
67
|
-
|
68
|
-
def self.set_home(home)
|
69
|
-
home = home.dup.force_encoding(Encoding.find('filesystem'))
|
70
|
-
home.gsub!(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
|
71
|
-
@gem_home = home
|
72
|
-
end
|
73
|
-
|
74
|
-
def self.set_paths(gpaths)
|
75
|
-
if gpaths
|
76
|
-
@gem_path = gpaths.split(File::PATH_SEPARATOR)
|
77
|
-
|
78
|
-
if File::ALT_SEPARATOR then
|
79
|
-
@gem_path.map! do |path|
|
80
|
-
path.gsub File::ALT_SEPARATOR, File::SEPARATOR
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
@gem_path << Gem.dir
|
85
|
-
else
|
86
|
-
# TODO: should this be Gem.default_path instead?
|
87
|
-
@gem_path = [Gem.dir]
|
88
|
-
end
|
89
|
-
|
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
|
102
|
-
end
|
103
|
-
|
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
|
-
|
109
|
-
|
110
|
-
##
|
111
|
-
# Methods before this line will be removed when QuickLoader is replaced
|
112
|
-
# with the real RubyGems
|
113
|
-
|
114
|
-
GEM_PRELUDE_METHODS = Gem.methods(false)
|
115
|
-
|
116
|
-
begin
|
117
|
-
verbose, debug = $VERBOSE, $DEBUG
|
118
|
-
$VERBOSE = $DEBUG = nil
|
119
|
-
|
120
|
-
begin
|
121
|
-
require 'rubygems/defaults/operating_system'
|
122
|
-
rescue ::LoadError
|
123
|
-
end
|
124
|
-
|
125
|
-
if defined?(RUBY_ENGINE) then
|
126
|
-
begin
|
127
|
-
require "rubygems/defaults/#{RUBY_ENGINE}"
|
128
|
-
rescue ::LoadError
|
129
|
-
end
|
130
|
-
end
|
131
|
-
ensure
|
132
|
-
$VERBOSE, $DEBUG = verbose, debug
|
133
|
-
end
|
134
|
-
|
135
|
-
module QuickLoader
|
136
|
-
|
137
|
-
@loaded_full_rubygems_library = false
|
138
|
-
|
139
|
-
def self.load_full_rubygems_library
|
140
|
-
return if @loaded_full_rubygems_library
|
141
|
-
|
142
|
-
@loaded_full_rubygems_library = true
|
143
|
-
|
144
|
-
class << Gem
|
145
|
-
Gem::GEM_PRELUDE_METHODS.each do |method_name|
|
146
|
-
undef_method method_name
|
147
|
-
end
|
148
|
-
undef_method :const_missing
|
149
|
-
undef_method :method_missing
|
150
|
-
end
|
151
|
-
|
152
|
-
Kernel.module_eval do
|
153
|
-
undef_method :gem if method_defined? :gem
|
154
|
-
end
|
155
|
-
|
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
|
162
|
-
require 'rubygems'
|
163
|
-
end
|
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
|
-
|
184
|
-
GemPaths = {}
|
185
|
-
GemVersions = {}
|
186
|
-
|
187
|
-
def push_gem_version_on_load_path(gem_name, *requirements)
|
188
|
-
if requirements.empty?
|
189
|
-
unless GemPaths.has_key?(gem_name) then
|
190
|
-
raise Gem::LoadError, "Could not find RubyGem #{gem_name} (>= 0)\n"
|
191
|
-
end
|
192
|
-
|
193
|
-
# highest version gems already active
|
194
|
-
return false
|
195
|
-
else
|
196
|
-
if requirements.length > 1 then
|
197
|
-
QuickLoader.load_full_rubygems_library
|
198
|
-
return gem(gem_name, *requirements)
|
199
|
-
end
|
200
|
-
|
201
|
-
requirement, version = requirements[0].split
|
202
|
-
requirement.strip!
|
203
|
-
|
204
|
-
if loaded_version = GemVersions[gem_name] then
|
205
|
-
case requirement
|
206
|
-
when ">", ">=" then
|
207
|
-
return false if
|
208
|
-
(loaded_version <=> Gem.integers_for(version)) >= 0
|
209
|
-
when "~>" then
|
210
|
-
required_version = Gem.integers_for version
|
211
|
-
|
212
|
-
return false if loaded_version.first == required_version.first
|
213
|
-
end
|
214
|
-
end
|
215
|
-
|
216
|
-
QuickLoader.load_full_rubygems_library
|
217
|
-
gem gem_name, *requirements
|
218
|
-
end
|
219
|
-
end
|
220
|
-
|
221
|
-
def integers_for(gem_version)
|
222
|
-
numbers = gem_version.split(".").collect {|n| n.to_i}
|
223
|
-
numbers.pop while numbers.last == 0
|
224
|
-
numbers << 0 if numbers.empty?
|
225
|
-
numbers
|
226
|
-
end
|
227
|
-
|
228
|
-
def push_all_highest_version_gems_on_load_path
|
229
|
-
Gem.path.each do |path|
|
230
|
-
gems_directory = File.join(path, "gems")
|
231
|
-
|
232
|
-
if File.exist?(gems_directory) then
|
233
|
-
Dir.entries(gems_directory).each do |gem_directory_name|
|
234
|
-
next if gem_directory_name == "." || gem_directory_name == ".."
|
235
|
-
|
236
|
-
next unless gem_name = gem_directory_name[/(.*)-(.*)/, 1]
|
237
|
-
new_version = integers_for($2)
|
238
|
-
current_version = GemVersions[gem_name]
|
239
|
-
|
240
|
-
if !current_version or (current_version <=> new_version) < 0 then
|
241
|
-
GemVersions[gem_name] = new_version
|
242
|
-
GemPaths[gem_name] = File.join(gems_directory, gem_directory_name)
|
243
|
-
end
|
244
|
-
end
|
245
|
-
end
|
246
|
-
end
|
247
|
-
|
248
|
-
require_paths = []
|
249
|
-
|
250
|
-
GemPaths.each_value do |path|
|
251
|
-
if File.exist?(file = File.join(path, ".require_paths")) then
|
252
|
-
paths = File.read(file).split.map do |require_path|
|
253
|
-
File.join path, require_path
|
254
|
-
end
|
255
|
-
|
256
|
-
require_paths.concat paths
|
257
|
-
else
|
258
|
-
require_paths << file if File.exist?(file = File.join(path, "bin"))
|
259
|
-
require_paths << file if File.exist?(file = File.join(path, "lib"))
|
260
|
-
end
|
261
|
-
end
|
262
|
-
|
263
|
-
# "tag" the first require_path inserted into the $LOAD_PATH to enable
|
264
|
-
# indexing correctly with rubygems proper when it inserts an explicitly
|
265
|
-
# gem version
|
266
|
-
unless require_paths.empty? then
|
267
|
-
require_paths.first.instance_variable_set(:@gem_prelude_index, true)
|
268
|
-
end
|
269
|
-
# gem directories must come after -I and ENV['RUBYLIB']
|
270
|
-
$:[$:.index{|e|e.instance_variable_defined?(:@gem_prelude_index)}||-1,0] = require_paths
|
271
|
-
end
|
272
|
-
|
273
|
-
def const_missing(constant)
|
274
|
-
QuickLoader.load_full_rubygems_library
|
275
|
-
|
276
|
-
if Gem.const_defined?(constant) then
|
277
|
-
Gem.const_get constant
|
278
|
-
else
|
279
|
-
super
|
280
|
-
end
|
281
|
-
end
|
282
|
-
|
283
|
-
def method_missing(method, *args, &block)
|
284
|
-
QuickLoader.load_full_rubygems_library
|
285
|
-
super unless Gem.respond_to?(method)
|
286
|
-
Gem.send(method, *args, &block)
|
287
|
-
end
|
288
|
-
end
|
289
|
-
|
290
|
-
extend QuickLoader
|
291
|
-
|
292
|
-
end
|
293
|
-
|
294
|
-
begin
|
295
|
-
Gem.push_all_highest_version_gems_on_load_path
|
296
|
-
Gem::QuickLoader.fake_rubygems_as_loaded
|
297
|
-
rescue Exception => e
|
298
|
-
puts "Error loading gem paths on load path in gem_prelude"
|
299
|
-
puts e
|
300
|
-
puts e.backtrace.join("\n")
|
301
|
-
end
|
302
|
-
|
303
|
-
end
|
304
|
-
|