slimgems 1.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. data/ChangeLog +5811 -0
  2. data/History.txt +887 -0
  3. data/LICENSE.txt +51 -0
  4. data/README.md +87 -0
  5. data/Rakefile +120 -0
  6. data/bin/gem +25 -0
  7. data/bin/update_slimgems +35 -0
  8. data/bootstrap/Rakefile +4 -0
  9. data/hide_lib_for_update/note.txt +5 -0
  10. data/lib/gauntlet_rubygems.rb +50 -0
  11. data/lib/rbconfig/datadir.rb +20 -0
  12. data/lib/rubygems.rb +1220 -0
  13. data/lib/rubygems/builder.rb +102 -0
  14. data/lib/rubygems/command.rb +534 -0
  15. data/lib/rubygems/command_manager.rb +182 -0
  16. data/lib/rubygems/commands/build_command.rb +53 -0
  17. data/lib/rubygems/commands/cert_command.rb +86 -0
  18. data/lib/rubygems/commands/check_command.rb +80 -0
  19. data/lib/rubygems/commands/cleanup_command.rb +106 -0
  20. data/lib/rubygems/commands/contents_command.rb +98 -0
  21. data/lib/rubygems/commands/dependency_command.rb +195 -0
  22. data/lib/rubygems/commands/environment_command.rb +132 -0
  23. data/lib/rubygems/commands/fetch_command.rb +67 -0
  24. data/lib/rubygems/commands/generate_index_command.rb +133 -0
  25. data/lib/rubygems/commands/help_command.rb +172 -0
  26. data/lib/rubygems/commands/install_command.rb +178 -0
  27. data/lib/rubygems/commands/list_command.rb +35 -0
  28. data/lib/rubygems/commands/lock_command.rb +110 -0
  29. data/lib/rubygems/commands/mirror_command.rb +111 -0
  30. data/lib/rubygems/commands/outdated_command.rb +33 -0
  31. data/lib/rubygems/commands/owner_command.rb +75 -0
  32. data/lib/rubygems/commands/pristine_command.rb +93 -0
  33. data/lib/rubygems/commands/push_command.rb +56 -0
  34. data/lib/rubygems/commands/query_command.rb +280 -0
  35. data/lib/rubygems/commands/rdoc_command.rb +91 -0
  36. data/lib/rubygems/commands/search_command.rb +31 -0
  37. data/lib/rubygems/commands/server_command.rb +86 -0
  38. data/lib/rubygems/commands/setup_command.rb +387 -0
  39. data/lib/rubygems/commands/sources_command.rb +157 -0
  40. data/lib/rubygems/commands/specification_command.rb +125 -0
  41. data/lib/rubygems/commands/stale_command.rb +27 -0
  42. data/lib/rubygems/commands/uninstall_command.rb +83 -0
  43. data/lib/rubygems/commands/unpack_command.rb +121 -0
  44. data/lib/rubygems/commands/update_command.rb +212 -0
  45. data/lib/rubygems/commands/which_command.rb +86 -0
  46. data/lib/rubygems/config_file.rb +345 -0
  47. data/lib/rubygems/custom_require.rb +44 -0
  48. data/lib/rubygems/defaults.rb +101 -0
  49. data/lib/rubygems/dependency.rb +227 -0
  50. data/lib/rubygems/dependency_installer.rb +286 -0
  51. data/lib/rubygems/dependency_list.rb +208 -0
  52. data/lib/rubygems/doc_manager.rb +242 -0
  53. data/lib/rubygems/errors.rb +35 -0
  54. data/lib/rubygems/exceptions.rb +91 -0
  55. data/lib/rubygems/ext.rb +18 -0
  56. data/lib/rubygems/ext/builder.rb +56 -0
  57. data/lib/rubygems/ext/configure_builder.rb +25 -0
  58. data/lib/rubygems/ext/ext_conf_builder.rb +24 -0
  59. data/lib/rubygems/ext/rake_builder.rb +39 -0
  60. data/lib/rubygems/format.rb +81 -0
  61. data/lib/rubygems/gem_openssl.rb +92 -0
  62. data/lib/rubygems/gem_path_searcher.rb +100 -0
  63. data/lib/rubygems/gem_runner.rb +79 -0
  64. data/lib/rubygems/gemcutter_utilities.rb +49 -0
  65. data/lib/rubygems/indexer.rb +720 -0
  66. data/lib/rubygems/install_update_options.rb +125 -0
  67. data/lib/rubygems/installer.rb +604 -0
  68. data/lib/rubygems/local_remote_options.rb +135 -0
  69. data/lib/rubygems/old_format.rb +153 -0
  70. data/lib/rubygems/package.rb +97 -0
  71. data/lib/rubygems/package/f_sync_dir.rb +23 -0
  72. data/lib/rubygems/package/tar_header.rb +266 -0
  73. data/lib/rubygems/package/tar_input.rb +222 -0
  74. data/lib/rubygems/package/tar_output.rb +144 -0
  75. data/lib/rubygems/package/tar_reader.rb +106 -0
  76. data/lib/rubygems/package/tar_reader/entry.rb +141 -0
  77. data/lib/rubygems/package/tar_writer.rb +241 -0
  78. data/lib/rubygems/package_task.rb +126 -0
  79. data/lib/rubygems/platform.rb +183 -0
  80. data/lib/rubygems/remote_fetcher.rb +414 -0
  81. data/lib/rubygems/require_paths_builder.rb +18 -0
  82. data/lib/rubygems/requirement.rb +153 -0
  83. data/lib/rubygems/security.rb +814 -0
  84. data/lib/rubygems/server.rb +872 -0
  85. data/lib/rubygems/source_index.rb +597 -0
  86. data/lib/rubygems/source_info_cache.rb +395 -0
  87. data/lib/rubygems/source_info_cache_entry.rb +56 -0
  88. data/lib/rubygems/spec_fetcher.rb +337 -0
  89. data/lib/rubygems/specification.rb +1486 -0
  90. data/lib/rubygems/test_utilities.rb +147 -0
  91. data/lib/rubygems/text.rb +65 -0
  92. data/lib/rubygems/uninstaller.rb +278 -0
  93. data/lib/rubygems/user_interaction.rb +527 -0
  94. data/lib/rubygems/validator.rb +240 -0
  95. data/lib/rubygems/version.rb +316 -0
  96. data/lib/rubygems/version_option.rb +65 -0
  97. data/lib/ubygems.rb +10 -0
  98. data/setup.rb +42 -0
  99. data/test/bogussources.rb +8 -0
  100. data/test/data/gem-private_key.pem +27 -0
  101. data/test/data/gem-public_cert.pem +20 -0
  102. data/test/fake_certlib/openssl.rb +7 -0
  103. data/test/foo/discover.rb +0 -0
  104. data/test/functional.rb +92 -0
  105. data/test/gem_installer_test_case.rb +97 -0
  106. data/test/gem_package_tar_test_case.rb +132 -0
  107. data/test/gemutilities.rb +605 -0
  108. data/test/insure_session.rb +43 -0
  109. data/test/mockgemui.rb +56 -0
  110. data/test/plugin/exception/rubygems_plugin.rb +2 -0
  111. data/test/plugin/load/rubygems_plugin.rb +1 -0
  112. data/test/plugin/standarderror/rubygems_plugin.rb +2 -0
  113. data/test/private_key.pem +27 -0
  114. data/test/public_cert.pem +20 -0
  115. data/test/rubygems_plugin.rb +21 -0
  116. data/test/simple_gem.rb +66 -0
  117. data/test/test_config.rb +12 -0
  118. data/test/test_gem.rb +766 -0
  119. data/test/test_gem_builder.rb +27 -0
  120. data/test/test_gem_command.rb +178 -0
  121. data/test/test_gem_command_manager.rb +207 -0
  122. data/test/test_gem_commands_build_command.rb +74 -0
  123. data/test/test_gem_commands_cert_command.rb +124 -0
  124. data/test/test_gem_commands_check_command.rb +18 -0
  125. data/test/test_gem_commands_contents_command.rb +156 -0
  126. data/test/test_gem_commands_dependency_command.rb +216 -0
  127. data/test/test_gem_commands_environment_command.rb +144 -0
  128. data/test/test_gem_commands_fetch_command.rb +76 -0
  129. data/test/test_gem_commands_generate_index_command.rb +135 -0
  130. data/test/test_gem_commands_install_command.rb +315 -0
  131. data/test/test_gem_commands_list_command.rb +36 -0
  132. data/test/test_gem_commands_lock_command.rb +68 -0
  133. data/test/test_gem_commands_mirror_command.rb +60 -0
  134. data/test/test_gem_commands_outdated_command.rb +40 -0
  135. data/test/test_gem_commands_owner_command.rb +105 -0
  136. data/test/test_gem_commands_pristine_command.rb +108 -0
  137. data/test/test_gem_commands_push_command.rb +81 -0
  138. data/test/test_gem_commands_query_command.rb +426 -0
  139. data/test/test_gem_commands_server_command.rb +59 -0
  140. data/test/test_gem_commands_sources_command.rb +209 -0
  141. data/test/test_gem_commands_specification_command.rb +139 -0
  142. data/test/test_gem_commands_stale_command.rb +38 -0
  143. data/test/test_gem_commands_uninstall_command.rb +83 -0
  144. data/test/test_gem_commands_unpack_command.rb +199 -0
  145. data/test/test_gem_commands_update_command.rb +353 -0
  146. data/test/test_gem_commands_which_command.rb +66 -0
  147. data/test/test_gem_config_file.rb +287 -0
  148. data/test/test_gem_dependency.rb +149 -0
  149. data/test/test_gem_dependency_installer.rb +661 -0
  150. data/test/test_gem_dependency_list.rb +230 -0
  151. data/test/test_gem_doc_manager.rb +31 -0
  152. data/test/test_gem_ext_configure_builder.rb +84 -0
  153. data/test/test_gem_ext_ext_conf_builder.rb +173 -0
  154. data/test/test_gem_ext_rake_builder.rb +81 -0
  155. data/test/test_gem_format.rb +70 -0
  156. data/test/test_gem_gem_path_searcher.rb +78 -0
  157. data/test/test_gem_gem_runner.rb +45 -0
  158. data/test/test_gem_gemcutter_utilities.rb +103 -0
  159. data/test/test_gem_indexer.rb +673 -0
  160. data/test/test_gem_install_update_options.rb +68 -0
  161. data/test/test_gem_installer.rb +857 -0
  162. data/test/test_gem_local_remote_options.rb +97 -0
  163. data/test/test_gem_package_tar_header.rb +130 -0
  164. data/test/test_gem_package_tar_input.rb +112 -0
  165. data/test/test_gem_package_tar_output.rb +97 -0
  166. data/test/test_gem_package_tar_reader.rb +46 -0
  167. data/test/test_gem_package_tar_reader_entry.rb +109 -0
  168. data/test/test_gem_package_tar_writer.rb +144 -0
  169. data/test/test_gem_package_task.rb +59 -0
  170. data/test/test_gem_platform.rb +264 -0
  171. data/test/test_gem_remote_fetcher.rb +740 -0
  172. data/test/test_gem_requirement.rb +292 -0
  173. data/test/test_gem_server.rb +356 -0
  174. data/test/test_gem_silent_ui.rb +113 -0
  175. data/test/test_gem_source_index.rb +461 -0
  176. data/test/test_gem_spec_fetcher.rb +410 -0
  177. data/test/test_gem_specification.rb +1291 -0
  178. data/test/test_gem_stream_ui.rb +218 -0
  179. data/test/test_gem_text.rb +43 -0
  180. data/test/test_gem_uninstaller.rb +146 -0
  181. data/test/test_gem_validator.rb +63 -0
  182. data/test/test_gem_version.rb +181 -0
  183. data/test/test_gem_version_option.rb +89 -0
  184. data/test/test_kernel.rb +59 -0
  185. metadata +413 -0
@@ -0,0 +1,86 @@
1
+ require 'rubygems/command'
2
+ require 'rubygems/server'
3
+
4
+ class Gem::Commands::ServerCommand < Gem::Command
5
+
6
+ def initialize
7
+ super 'server', 'Documentation and gem repository HTTP server',
8
+ :port => 8808, :gemdir => [], :daemon => false
9
+
10
+ OptionParser.accept :Port do |port|
11
+ if port =~ /\A\d+\z/ then
12
+ port = Integer port
13
+ raise OptionParser::InvalidArgument, "#{port}: not a port number" if
14
+ port > 65535
15
+
16
+ port
17
+ else
18
+ begin
19
+ Socket.getservbyname port
20
+ rescue SocketError
21
+ raise OptionParser::InvalidArgument, "#{port}: no such named service"
22
+ end
23
+ end
24
+ end
25
+
26
+ add_option '-p', '--port=PORT', :Port,
27
+ 'port to listen on' do |port, options|
28
+ options[:port] = port
29
+ end
30
+
31
+ add_option '-d', '--dir=GEMDIR',
32
+ 'directories from which to serve gems',
33
+ 'multiple directories may be provided' do |gemdir, options|
34
+ options[:gemdir] << File.expand_path(gemdir)
35
+ end
36
+
37
+ add_option '--[no-]daemon', 'run as a daemon' do |daemon, options|
38
+ options[:daemon] = daemon
39
+ end
40
+
41
+ add_option '-b', '--bind=HOST,HOST',
42
+ 'addresses to bind', Array do |address, options|
43
+ options[:addresses] ||= []
44
+ options[:addresses].push(*address)
45
+ end
46
+
47
+ add_option '-l', '--launch[=COMMAND]',
48
+ 'launches a browser window',
49
+ "COMMAND defaults to 'start' on Windows",
50
+ "and 'open' on all other platforms" do |launch, options|
51
+ launch ||= Gem.win_platform? ? 'start' : 'open'
52
+ options[:launch] = launch
53
+ end
54
+ end
55
+
56
+ def defaults_str # :nodoc:
57
+ "--port 8808 --dir #{Gem.dir} --no-daemon"
58
+ end
59
+
60
+ def description # :nodoc:
61
+ <<-EOF
62
+ The server command starts up a web server that hosts the RDoc for your
63
+ installed gems and can operate as a server for installation of gems on other
64
+ machines.
65
+
66
+ The cache files for installed gems must exist to use the server as a source
67
+ for gem installation.
68
+
69
+ To install gems from a running server, use `gem install GEMNAME --source
70
+ http://gem_server_host:8808`
71
+
72
+ You can set up a shortcut to gem server documentation using the URL:
73
+
74
+ http://localhost:8808/rdoc?q=%s - Firefox
75
+ http://localhost:8808/rdoc?q=* - LaunchBar
76
+
77
+ EOF
78
+ end
79
+
80
+ def execute
81
+ options[:gemdir] << Gem.dir if options[:gemdir].empty?
82
+ Gem::Server.run options
83
+ end
84
+
85
+ end
86
+
@@ -0,0 +1,387 @@
1
+ require 'rubygems/command'
2
+ require 'fileutils'
3
+ require 'rbconfig'
4
+ require 'tmpdir'
5
+
6
+ ##
7
+ # Installs SlimGems itself. This command is ordinarily only available from a
8
+ # SlimGems checkout or tarball.
9
+
10
+ class Gem::Commands::SetupCommand < Gem::Command
11
+
12
+ def initialize
13
+ super 'setup', "Install #{Gem::NAME}",
14
+ :format_executable => true, :rdoc => true, :ri => true,
15
+ :site_or_vendor => :sitelibdir,
16
+ :destdir => '', :prefix => ''
17
+
18
+ add_option '--prefix=PREFIX',
19
+ "Prefix path for installing #{Gem::NAME}",
20
+ 'Will not affect gem repository location' do |prefix, options|
21
+ options[:prefix] = File.expand_path prefix
22
+ end
23
+
24
+ add_option '--destdir=DESTDIR',
25
+ "Root directory to install #{Gem::NAME} into",
26
+ "Mainly used for packaging #{Gem::NAME}" do |destdir, options|
27
+ options[:destdir] = File.expand_path destdir
28
+ end
29
+
30
+ add_option '--[no-]vendor',
31
+ 'Install into vendorlibdir not sitelibdir',
32
+ '(Requires Ruby 1.8.7)' do |vendor, options|
33
+ if vendor and Gem.ruby_version < Gem::Version.new('1.8.7') then
34
+ raise OptionParser::InvalidOption,
35
+ "requires ruby 1.8.7+ (you have #{Gem.ruby_version})"
36
+ end
37
+
38
+ options[:site_or_vendor] = vendor ? :vendorlibdir : :sitelibdir
39
+ end
40
+
41
+ add_option '--[no-]format-executable',
42
+ 'Makes `gem` match ruby',
43
+ 'If ruby is ruby18, gem will be gem18' do |value, options|
44
+ options[:format_executable] = value
45
+ end
46
+
47
+ add_option '--[no-]rdoc',
48
+ "Generate RDoc documentation for #{Gem::NAME}" do |value, options|
49
+ options[:rdoc] = value
50
+ end
51
+
52
+ add_option '--[no-]ri',
53
+ "Generate RI documentation for #{Gem::NAME}" do |value, options|
54
+ options[:ri] = value
55
+ end
56
+ end
57
+
58
+ def check_ruby_version
59
+ required_version = Gem::Requirement.new '>= 1.8.6'
60
+
61
+ unless required_version.satisfied_by? Gem.ruby_version then
62
+ alert_error "Expected Ruby version #{required_version}, is #{Gem.ruby_version}"
63
+ terminate_interaction 1
64
+ end
65
+ end
66
+
67
+ def defaults_str # :nodoc:
68
+ "--format-executable --rdoc --ri"
69
+ end
70
+
71
+ def description # :nodoc:
72
+ <<-EOF
73
+ Installs #{Gem::NAME} itself.
74
+
75
+ #{Gem::NAME} installs RDoc for itself in GEM_HOME. By default this is:
76
+ #{Gem.dir}
77
+
78
+ If you prefer a different directory, set the GEM_HOME environment variable.
79
+
80
+ #{Gem::NAME} will install the gem command with a name matching ruby's
81
+ prefix and suffix. If ruby was installed as `ruby18`, gem will be
82
+ installed as `gem18`.
83
+
84
+ By default, this #{Gem::NAME} will install gem as:
85
+ #{Gem.default_exec_format % 'gem'}
86
+ EOF
87
+ end
88
+
89
+ def execute
90
+ @verbose = Gem.configuration.really_verbose
91
+
92
+ install_destdir = options[:destdir]
93
+
94
+ unless install_destdir.empty? then
95
+ ENV['GEM_HOME'] ||= File.join(install_destdir,
96
+ Gem.default_dir.gsub(/^[a-zA-Z]:/, ''))
97
+ end
98
+
99
+ check_ruby_version
100
+
101
+ if Gem.configuration.really_verbose then
102
+ extend FileUtils::Verbose
103
+ else
104
+ extend FileUtils
105
+ end
106
+
107
+ lib_dir, bin_dir = make_destination_dirs install_destdir
108
+
109
+ backup_lib lib_dir
110
+
111
+ install_lib lib_dir
112
+
113
+ install_executables bin_dir
114
+
115
+ remove_old_bin_files bin_dir
116
+
117
+ remove_source_caches install_destdir
118
+
119
+ say "#{Gem::NAME} #{Gem::VERSION} installed"
120
+
121
+ uninstall_old_gemcutter
122
+
123
+ uninstall_old_rubygems
124
+
125
+ install_rdoc
126
+
127
+ say
128
+ if @verbose then
129
+ say "-" * 78
130
+ say
131
+ end
132
+
133
+ release_notes = File.join Dir.pwd, 'History.txt'
134
+
135
+ release_notes = if File.exist? release_notes then
136
+ open release_notes do |io|
137
+ text = io.gets '==='
138
+ text << io.gets('===')
139
+ text[0...-3]
140
+ end
141
+ else
142
+ "Oh-no! Unable to find release notes!"
143
+ end
144
+
145
+ say release_notes
146
+
147
+ say
148
+ say "-" * 78
149
+ say
150
+
151
+ say "#{Gem::NAME} installed the following executables:"
152
+ say @bin_file_names.map { |name| "\t#{name}\n" }
153
+ say
154
+
155
+ unless @bin_file_names.grep(/#{File::SEPARATOR}gem$/) then
156
+ say "If `gem` was installed by a previous #{Gem::NAME} installation, you may need"
157
+ say "to remove it by hand."
158
+ say
159
+ end
160
+ end
161
+
162
+ def install_executables(bin_dir)
163
+ say "Installing gem executable" if @verbose
164
+
165
+ @bin_file_names = []
166
+
167
+ Dir.chdir 'bin' do
168
+ bin_files = Dir['*']
169
+
170
+ bin_files.delete "update_#{Gem::GEM_NAME}"
171
+
172
+ bin_files.each do |bin_file|
173
+ bin_file_formatted = if options[:format_executable] then
174
+ Gem.default_exec_format % bin_file
175
+ else
176
+ bin_file
177
+ end
178
+
179
+ dest_file = File.join bin_dir, bin_file_formatted
180
+ bin_tmp_file = File.join Dir.tmpdir, bin_file
181
+
182
+ begin
183
+ bin = File.readlines bin_file
184
+ bin[0] = "#!#{Gem.ruby}\n"
185
+
186
+ File.open bin_tmp_file, 'w' do |fp|
187
+ fp.puts bin.join
188
+ end
189
+
190
+ install bin_tmp_file, dest_file, :mode => 0755
191
+ @bin_file_names << dest_file
192
+ ensure
193
+ rm bin_tmp_file
194
+ end
195
+
196
+ next unless Gem.win_platform?
197
+
198
+ begin
199
+ bin_cmd_file = File.join Dir.tmpdir, "#{bin_file}.bat"
200
+
201
+ File.open bin_cmd_file, 'w' do |file|
202
+ file.puts <<-TEXT
203
+ @ECHO OFF
204
+ IF NOT "%~f0" == "~f0" GOTO :WinNT
205
+ @"#{File.basename(Gem.ruby).chomp('"')}" "#{dest_file}" %1 %2 %3 %4 %5 %6 %7 %8 %9
206
+ GOTO :EOF
207
+ :WinNT
208
+ @"#{File.basename(Gem.ruby).chomp('"')}" "%~dpn0" %*
209
+ TEXT
210
+ end
211
+
212
+ install bin_cmd_file, "#{dest_file}.bat", :mode => 0755
213
+ ensure
214
+ rm bin_cmd_file
215
+ end
216
+ end
217
+ end
218
+ end
219
+
220
+ def backup_lib(lib_dir)
221
+ return unless ENV['GEM_BOOTSTRAP']
222
+ backup_dir = File.join(lib_dir, 'rubygems-backup')
223
+ rm_rf(backup_dir) if File.directory?(backup_dir)
224
+ mkdir_p(backup_dir)
225
+ list = %w(rubygems rubygems.rb ubygems.rb gauntlet_rubygems.rb).map do |f|
226
+ File.join(lib_dir, f)
227
+ end
228
+ mv(list, backup_dir)
229
+ end
230
+
231
+ def install_lib(lib_dir)
232
+ say "Installing #{Gem::NAME}" if @verbose
233
+
234
+ Dir.chdir 'lib' do
235
+ lib_files = Dir[File.join('**', '*rb')]
236
+
237
+ lib_files.each do |lib_file|
238
+ dest_file = File.join lib_dir, lib_file
239
+ dest_dir = File.dirname dest_file
240
+ mkdir_p dest_dir unless File.directory? dest_dir
241
+
242
+ install lib_file, dest_file, :mode => 0644
243
+ end
244
+ end
245
+ end
246
+
247
+ def install_rdoc
248
+ gem_doc_dir = File.join Gem.dir, 'doc'
249
+ rubygems_name = "#{Gem::GEM_NAME}-#{Gem::VERSION}"
250
+ rubygems_doc_dir = File.join gem_doc_dir, rubygems_name
251
+
252
+ if File.writable? gem_doc_dir and
253
+ (not File.exist? rubygems_doc_dir or
254
+ File.writable? rubygems_doc_dir) then
255
+ say "Removing old #{Gem::NAME} RDoc and ri" if @verbose
256
+ Dir[File.join(Gem.dir, 'doc', "#{Gem::GEM_NAME}-[0-9]*")].each do |dir|
257
+ rm_rf dir
258
+ end
259
+ Dir[File.join(Gem.dir, 'doc', 'rubygems-[0-9]*')].each do |dir|
260
+ rm_rf dir
261
+ end
262
+
263
+ if options[:ri] then
264
+ ri_dir = File.join rubygems_doc_dir, 'ri'
265
+ say "Installing #{rubygems_name} ri into #{ri_dir}" if @verbose
266
+ run_rdoc '--ri', '--op', ri_dir
267
+ end
268
+
269
+ if options[:rdoc] then
270
+ rdoc_dir = File.join rubygems_doc_dir, 'rdoc'
271
+ say "Installing #{rubygems_name} rdoc into #{rdoc_dir}" if @verbose
272
+ run_rdoc '--op', rdoc_dir
273
+ end
274
+ elsif @verbose then
275
+ say "Skipping RDoc generation, #{gem_doc_dir} not writable"
276
+ say "Set the GEM_HOME environment variable if you want RDoc generated"
277
+ end
278
+ end
279
+
280
+ def make_destination_dirs(install_destdir)
281
+ lib_dir = nil
282
+ bin_dir = nil
283
+
284
+ prefix = options[:prefix]
285
+ site_or_vendor = options[:site_or_vendor]
286
+
287
+ if prefix.empty? then
288
+ lib_dir = Gem::ConfigMap[site_or_vendor]
289
+ bin_dir = Gem::ConfigMap[:bindir]
290
+ else
291
+ # Apple installed this lib into libdir, and version <= 1.1.0 gets
292
+ # confused about installation location, so switch back to
293
+ # sitelibdir/vendorlibdir.
294
+ if defined?(APPLE_GEM_HOME) and
295
+ # just in case us and Apple don't get this patched up proper.
296
+ (prefix == Gem::ConfigMap[:libdir] or
297
+ # this one is important
298
+ prefix == File.join(Gem::ConfigMap[:libdir], 'ruby')) then
299
+ lib_dir = Gem::ConfigMap[site_or_vendor]
300
+ bin_dir = Gem::ConfigMap[:bindir]
301
+ else
302
+ lib_dir = File.join prefix, 'lib'
303
+ bin_dir = File.join prefix, 'bin'
304
+ end
305
+ end
306
+
307
+ unless install_destdir.empty? then
308
+ lib_dir = File.join install_destdir, lib_dir.gsub(/^[a-zA-Z]:/, '')
309
+ bin_dir = File.join install_destdir, bin_dir.gsub(/^[a-zA-Z]:/, '')
310
+ end
311
+
312
+ mkdir_p lib_dir
313
+ mkdir_p bin_dir
314
+
315
+ return lib_dir, bin_dir
316
+ end
317
+
318
+ def remove_old_bin_files(bin_dir)
319
+ old_bin_files = {
320
+ 'gem_mirror' => 'gem mirror',
321
+ 'gem_server' => 'gem server',
322
+ 'gemlock' => 'gem lock',
323
+ 'gemri' => 'ri',
324
+ 'gemwhich' => 'gem which',
325
+ 'index_gem_repository.rb' => 'gem generate_index',
326
+ }
327
+
328
+ old_bin_files.each do |old_bin_file, new_name|
329
+ old_bin_path = File.join bin_dir, old_bin_file
330
+ next unless File.exist? old_bin_path
331
+
332
+ deprecation_message = "`#{old_bin_file}` has been deprecated. Use `#{new_name}` instead."
333
+
334
+ File.open old_bin_path, 'w' do |fp|
335
+ fp.write <<-EOF
336
+ #!#{Gem.ruby}
337
+
338
+ abort "#{deprecation_message}"
339
+ EOF
340
+ end
341
+
342
+ next unless Gem.win_platform?
343
+
344
+ File.open "#{old_bin_path}.bat", 'w' do |fp|
345
+ fp.puts %{@ECHO.#{deprecation_message}}
346
+ end
347
+ end
348
+ end
349
+
350
+ def remove_source_caches(install_destdir)
351
+ if install_destdir.empty?
352
+ require 'rubygems/source_info_cache'
353
+
354
+ user_cache_file = File.join(install_destdir,
355
+ Gem::SourceInfoCache.user_cache_file)
356
+ system_cache_file = File.join(install_destdir,
357
+ Gem::SourceInfoCache.system_cache_file)
358
+
359
+ say "Removing old source_cache files" if Gem.configuration.really_verbose
360
+ rm_f user_cache_file if File.writable? File.dirname(user_cache_file)
361
+ rm_f system_cache_file if File.writable? File.dirname(system_cache_file)
362
+ end
363
+ end
364
+
365
+ def run_rdoc(*args)
366
+ # don't need to do this
367
+ end
368
+
369
+ def uninstall_old_gemcutter
370
+ require 'rubygems/uninstaller'
371
+
372
+ ui = Gem::Uninstaller.new('gemcutter', :all => true, :ignore => true,
373
+ :version => '< 0.4')
374
+ ui.uninstall
375
+ rescue Gem::InstallError
376
+ end
377
+
378
+ def uninstall_old_rubygems
379
+ require 'rubygems/uninstaller'
380
+
381
+ ui = Gem::Uninstaller.new('rubygems-update', :all => true, :ignore => true,
382
+ :executables => true)
383
+ ui.uninstall
384
+ rescue Gem::InstallError
385
+ end
386
+ end
387
+