rubygems-update 1.0.1 → 1.1.0

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.

Files changed (172) hide show
  1. data.tar.gz.sig +0 -0
  2. data/ChangeLog +248 -0
  3. data/README +2 -0
  4. data/Rakefile +47 -23
  5. data/bin/gem +9 -4
  6. data/bin/update_rubygems +15 -1
  7. data/examples/application/bin/myapp +0 -0
  8. data/lib/rubygems.rb +506 -373
  9. data/lib/rubygems/builder.rb +14 -7
  10. data/lib/rubygems/command.rb +9 -9
  11. data/lib/rubygems/command_manager.rb +1 -0
  12. data/lib/rubygems/commands/cleanup_command.rb +67 -69
  13. data/lib/rubygems/commands/environment_command.rb +16 -10
  14. data/lib/rubygems/commands/fetch_command.rb +7 -9
  15. data/lib/rubygems/commands/install_command.rb +9 -3
  16. data/lib/rubygems/commands/list_command.rb +2 -4
  17. data/lib/rubygems/commands/mirror_command.rb +1 -1
  18. data/lib/rubygems/commands/query_command.rb +52 -5
  19. data/lib/rubygems/commands/sources_command.rb +19 -10
  20. data/lib/rubygems/commands/specification_command.rb +10 -6
  21. data/lib/rubygems/commands/uninstall_command.rb +23 -6
  22. data/lib/rubygems/commands/unpack_command.rb +15 -3
  23. data/lib/rubygems/commands/update_command.rb +27 -25
  24. data/lib/rubygems/custom_require.rb +1 -1
  25. data/lib/rubygems/defaults.rb +8 -1
  26. data/lib/rubygems/dependency_installer.rb +72 -104
  27. data/lib/rubygems/digest/digest_adapter.rb +0 -0
  28. data/lib/rubygems/digest/md5.rb +0 -0
  29. data/lib/rubygems/digest/sha1.rb +0 -0
  30. data/lib/rubygems/digest/sha2.rb +0 -0
  31. data/lib/rubygems/exceptions.rb +22 -1
  32. data/lib/rubygems/format.rb +16 -10
  33. data/lib/rubygems/indexer.rb +46 -33
  34. data/lib/rubygems/indexer/abstract_index_builder.rb +10 -2
  35. data/lib/rubygems/indexer/latest_index_builder.rb +35 -0
  36. data/lib/rubygems/indexer/master_index_builder.rb +9 -8
  37. data/lib/rubygems/indexer/quick_index_builder.rb +5 -3
  38. data/lib/rubygems/install_update_options.rb +7 -1
  39. data/lib/rubygems/installer.rb +8 -5
  40. data/lib/rubygems/package.rb +17 -774
  41. data/lib/rubygems/package/f_sync_dir.rb +24 -0
  42. data/lib/rubygems/package/tar_header.rb +245 -0
  43. data/lib/rubygems/package/tar_input.rb +219 -0
  44. data/lib/rubygems/package/tar_output.rb +143 -0
  45. data/lib/rubygems/package/tar_reader.rb +86 -0
  46. data/lib/rubygems/package/tar_reader/entry.rb +99 -0
  47. data/lib/rubygems/package/tar_writer.rb +180 -0
  48. data/lib/rubygems/remote_fetcher.rb +131 -16
  49. data/lib/rubygems/requirement.rb +2 -0
  50. data/lib/rubygems/rubygems_version.rb +1 -1
  51. data/lib/rubygems/security.rb +1 -0
  52. data/lib/rubygems/server.rb +85 -104
  53. data/lib/rubygems/source_index.rb +412 -329
  54. data/lib/rubygems/source_info_cache.rb +232 -99
  55. data/lib/rubygems/source_info_cache_entry.rb +14 -4
  56. data/lib/rubygems/specification.rb +9 -10
  57. data/lib/rubygems/timer.rb +0 -0
  58. data/lib/rubygems/uninstaller.rb +56 -32
  59. data/lib/rubygems/user_interaction.rb +4 -10
  60. data/lib/rubygems/validator.rb +0 -0
  61. data/scripts/gemdoc.rb +0 -0
  62. data/scripts/specdoc.rb +0 -0
  63. data/setup.rb +56 -19
  64. data/test/gem_installer_test_case.rb +86 -0
  65. data/test/gem_installer_test_case.rbc +0 -0
  66. data/test/gem_package_tar_test_case.rb +146 -0
  67. data/test/gem_package_tar_test_case.rbc +0 -0
  68. data/test/gemutilities.rb +123 -38
  69. data/test/gemutilities.rbc +0 -0
  70. data/test/mockgemui.rb +5 -13
  71. data/test/mockgemui.rbc +0 -0
  72. data/test/private_key.pem +27 -0
  73. data/test/public_cert.pem +20 -0
  74. data/test/simple_gem.rbc +0 -0
  75. data/test/test_config.rbc +0 -0
  76. data/test/test_gem.rb +46 -4
  77. data/test/test_gem.rbc +0 -0
  78. data/test/test_gem_builder.rbc +0 -0
  79. data/test/test_gem_command.rbc +0 -0
  80. data/test/test_gem_command_manager.rb +4 -2
  81. data/test/test_gem_command_manager.rbc +0 -0
  82. data/test/test_gem_commands_build_command.rbc +0 -0
  83. data/test/test_gem_commands_cert_command.rb +5 -1
  84. data/test/test_gem_commands_cert_command.rbc +0 -0
  85. data/test/test_gem_commands_check_command.rbc +0 -0
  86. data/test/test_gem_commands_contents_command.rbc +0 -0
  87. data/test/test_gem_commands_dependency_command.rbc +0 -0
  88. data/test/test_gem_commands_environment_command.rb +17 -1
  89. data/test/test_gem_commands_environment_command.rbc +0 -0
  90. data/test/test_gem_commands_fetch_command.rb +6 -5
  91. data/test/test_gem_commands_fetch_command.rbc +0 -0
  92. data/test/test_gem_commands_generate_index_command.rbc +0 -0
  93. data/test/test_gem_commands_install_command.rb +36 -28
  94. data/test/test_gem_commands_install_command.rbc +0 -0
  95. data/test/test_gem_commands_mirror_command.rbc +0 -0
  96. data/test/test_gem_commands_pristine_command.rbc +0 -0
  97. data/test/test_gem_commands_query_command.rb +143 -19
  98. data/test/test_gem_commands_query_command.rbc +0 -0
  99. data/test/test_gem_commands_server_command.rb +1 -1
  100. data/test/test_gem_commands_server_command.rbc +0 -0
  101. data/test/test_gem_commands_sources_command.rb +67 -9
  102. data/test/test_gem_commands_sources_command.rbc +0 -0
  103. data/test/test_gem_commands_specification_command.rb +3 -2
  104. data/test/test_gem_commands_specification_command.rbc +0 -0
  105. data/test/test_gem_commands_unpack_command.rb +46 -4
  106. data/test/test_gem_commands_unpack_command.rbc +0 -0
  107. data/test/test_gem_commands_update_command.rb +174 -0
  108. data/test/test_gem_commands_update_command.rbc +0 -0
  109. data/test/test_gem_config_file.rbc +0 -0
  110. data/test/test_gem_dependency.rbc +0 -0
  111. data/test/test_gem_dependency_installer.rb +172 -187
  112. data/test/test_gem_dependency_installer.rbc +0 -0
  113. data/test/test_gem_dependency_list.rbc +0 -0
  114. data/test/test_gem_digest.rb +0 -0
  115. data/test/test_gem_digest.rbc +0 -0
  116. data/test/test_gem_doc_manager.rbc +0 -0
  117. data/test/test_gem_ext_configure_builder.rb +9 -6
  118. data/test/test_gem_ext_configure_builder.rbc +0 -0
  119. data/test/test_gem_ext_ext_conf_builder.rbc +0 -0
  120. data/test/test_gem_ext_rake_builder.rbc +0 -0
  121. data/test/test_gem_format.rb +1 -1
  122. data/test/test_gem_format.rbc +0 -0
  123. data/test/test_gem_gem_path_searcher.rbc +0 -0
  124. data/test/test_gem_gem_runner.rbc +0 -0
  125. data/test/test_gem_indexer.rb +7 -2
  126. data/test/test_gem_indexer.rbc +0 -0
  127. data/test/test_gem_install_update_options.rbc +0 -0
  128. data/test/test_gem_installer.rb +5 -84
  129. data/test/test_gem_installer.rbc +0 -0
  130. data/test/test_gem_local_remote_options.rbc +0 -0
  131. data/test/test_gem_outdated_command.rbc +0 -0
  132. data/test/test_gem_package_tar_header.rb +137 -0
  133. data/test/test_gem_package_tar_header.rbc +0 -0
  134. data/test/test_gem_package_tar_input.rb +119 -0
  135. data/test/test_gem_package_tar_input.rbc +0 -0
  136. data/test/test_gem_package_tar_output.rb +104 -0
  137. data/test/test_gem_package_tar_output.rbc +0 -0
  138. data/test/test_gem_package_tar_reader.rb +53 -0
  139. data/test/test_gem_package_tar_reader.rbc +0 -0
  140. data/test/test_gem_package_tar_reader_entry.rb +116 -0
  141. data/test/test_gem_package_tar_reader_entry.rbc +0 -0
  142. data/test/test_gem_package_tar_writer.rb +151 -0
  143. data/test/test_gem_package_tar_writer.rbc +0 -0
  144. data/test/test_gem_platform.rbc +0 -0
  145. data/test/test_gem_remote_fetcher.rb +189 -17
  146. data/test/test_gem_remote_fetcher.rbc +0 -0
  147. data/test/test_gem_requirement.rbc +0 -0
  148. data/test/test_gem_server.rb +13 -12
  149. data/test/test_gem_server.rbc +0 -0
  150. data/test/test_gem_source_index.rb +305 -56
  151. data/test/test_gem_source_index.rbc +0 -0
  152. data/test/test_gem_source_info_cache.rb +179 -53
  153. data/test/test_gem_source_info_cache.rbc +0 -0
  154. data/test/test_gem_source_info_cache_entry.rb +41 -10
  155. data/test/test_gem_source_info_cache_entry.rbc +0 -0
  156. data/test/test_gem_specification.rb +7 -7
  157. data/test/test_gem_specification.rbc +0 -0
  158. data/test/test_gem_stream_ui.rbc +0 -0
  159. data/test/test_gem_uninstaller.rb +43 -0
  160. data/test/test_gem_uninstaller.rbc +0 -0
  161. data/test/test_gem_validator.rbc +0 -0
  162. data/test/test_gem_version.rb +1 -1
  163. data/test/test_gem_version.rbc +0 -0
  164. data/test/test_gem_version_option.rbc +0 -0
  165. data/test/test_kernel.rb +1 -0
  166. data/test/test_kernel.rbc +0 -0
  167. metadata +85 -8
  168. metadata.gz.sig +0 -0
  169. data/lib/rubygems/gem_open_uri.rb +0 -7
  170. data/lib/rubygems/open-uri.rb +0 -773
  171. data/test/test_open_uri.rb +0 -13
  172. data/test/test_package.rb +0 -608
@@ -25,7 +25,12 @@ class TestGemSourceInfoCache < RubyGemTestCase
25
25
  @sic = Gem::SourceInfoCache.new
26
26
  @sic.instance_variable_set :@fetcher, @fetcher
27
27
 
28
+ @si_new = Gem::SourceIndex.new
29
+ @sice_new = Gem::SourceInfoCacheEntry.new @si_new, 0
30
+
28
31
  prep_cache_files @sic
32
+
33
+ @sic.reset_cache_data
29
34
  end
30
35
 
31
36
  def teardown
@@ -35,8 +40,10 @@ class TestGemSourceInfoCache < RubyGemTestCase
35
40
 
36
41
  def test_self_cache_refreshes
37
42
  Gem.configuration.update_sources = true #true by default
38
- source_index = Gem::SourceIndex.new 'key' => 'sys'
39
- @fetcher.data["#{@gem_repo}/Marshal.#{@marshal_version}"] = source_index.dump
43
+ si = Gem::SourceIndex.new
44
+ si.add_spec @a1
45
+
46
+ @fetcher.data["#{@gem_repo}/Marshal.#{@marshal_version}"] = si.dump
40
47
 
41
48
  Gem.sources.replace %W[#{@gem_repo}]
42
49
 
@@ -51,8 +58,10 @@ class TestGemSourceInfoCache < RubyGemTestCase
51
58
 
52
59
  def test_self_cache_skips_refresh_based_on_configuration
53
60
  Gem.configuration.update_sources = false
54
- source_index = Gem::SourceIndex.new 'key' => 'sys'
55
- @fetcher.data["#{@gem_repo}/Marshal.#{@marshal_version}"] = source_index.dump
61
+ si = Gem::SourceIndex.new
62
+ si.add_spec @a1
63
+
64
+ @fetcher.data["#{@gem_repo}/Marshal.#{@marshal_version}"] = si.dump
56
65
 
57
66
  Gem.sources.replace %w[#{@gem_repo}]
58
67
 
@@ -66,20 +75,24 @@ class TestGemSourceInfoCache < RubyGemTestCase
66
75
  end
67
76
 
68
77
  def test_self_cache_data
69
- source_index = Gem::SourceIndex.new 'key' => 'sys'
70
- @fetcher.data["#{@gem_repo}/Marshal.#{@marshal_version}"] = source_index.dump
78
+ si = Gem::SourceIndex.new
79
+ si.add_spec @a1
80
+
81
+ @fetcher.data["#{@gem_repo}/Marshal.#{@marshal_version}"] = si.dump
71
82
 
72
83
  Gem::SourceInfoCache.instance_variable_set :@cache, nil
73
- sice = Gem::SourceInfoCacheEntry.new source_index, 0
84
+ sice = Gem::SourceInfoCacheEntry.new si, 0
74
85
 
75
86
  use_ui @ui do
76
- assert_equal source_index.gems,
77
- Gem::SourceInfoCache.cache_data[@gem_repo].source_index.gems
87
+ gems = Gem::SourceInfoCache.cache_data[@gem_repo].source_index.gems
88
+ gem_names = gems.map { |_, spec| spec.full_name }
89
+
90
+ assert_equal si.gems.map { |_,spec| spec.full_name }, gem_names
78
91
  end
79
92
  end
80
93
 
81
94
  def test_cache_data
82
- assert_equal [['key','sys']], @sic.cache_data.to_a.sort
95
+ assert_equal [[@gem_repo, @usr_sice]], @sic.cache_data.to_a.sort
83
96
  end
84
97
 
85
98
  def test_cache_data_dirty
@@ -97,7 +110,14 @@ class TestGemSourceInfoCache < RubyGemTestCase
97
110
 
98
111
  data = { @gem_repo => { 'totally' => 'borked' } }
99
112
 
100
- [@sic.system_cache_file, @sic.user_cache_file].each do |fn|
113
+ cache_files = [
114
+ @sic.system_cache_file,
115
+ @sic.latest_system_cache_file,
116
+ @sic.user_cache_file,
117
+ @sic.latest_user_cache_file
118
+ ]
119
+
120
+ cache_files.each do |fn|
101
121
  FileUtils.mkdir_p File.dirname(fn)
102
122
  open(fn, "wb") { |f| f.write Marshal.dump(data) }
103
123
  end
@@ -113,7 +133,9 @@ class TestGemSourceInfoCache < RubyGemTestCase
113
133
 
114
134
  def test_cache_data_none_readable
115
135
  FileUtils.chmod 0222, @sic.system_cache_file
136
+ FileUtils.chmod 0222, @sic.latest_system_cache_file
116
137
  FileUtils.chmod 0222, @sic.user_cache_file
138
+ FileUtils.chmod 0222, @sic.latest_user_cache_file
117
139
  return if (File.stat(@sic.system_cache_file).mode & 0222) != 0222
118
140
  return if (File.stat(@sic.user_cache_file).mode & 0222) != 0222
119
141
  # HACK for systems that don't support chmod
@@ -129,6 +151,16 @@ class TestGemSourceInfoCache < RubyGemTestCase
129
151
  assert_equal 'unable to locate a writable cache file', e.message
130
152
  end
131
153
 
154
+ def test_cache_data_nonexistent
155
+ FileUtils.rm @sic.system_cache_file
156
+ FileUtils.rm @sic.latest_system_cache_file
157
+ FileUtils.rm @sic.user_cache_file
158
+ FileUtils.rm @sic.latest_user_cache_file
159
+
160
+ # TODO test verbose output
161
+ assert_equal [], @sic.cache_data.to_a.sort
162
+ end
163
+
132
164
  def test_cache_data_repair
133
165
  data = {
134
166
  @gem_repo => {
@@ -152,7 +184,8 @@ class TestGemSourceInfoCache < RubyGemTestCase
152
184
 
153
185
  def test_cache_data_user_fallback
154
186
  FileUtils.chmod 0444, @sic.system_cache_file
155
- assert_equal [['key','usr']], @sic.cache_data.to_a.sort
187
+
188
+ assert_equal [[@gem_repo, @usr_sice]], @sic.cache_data.to_a.sort
156
189
  end
157
190
 
158
191
  def test_cache_file
@@ -174,60 +207,118 @@ class TestGemSourceInfoCache < RubyGemTestCase
174
207
  end
175
208
 
176
209
  def test_flush
177
- @sic.cache_data['key'] = 'new'
210
+ @sic.cache_data[@gem_repo] = @sice_new
178
211
  @sic.update
179
212
  @sic.flush
180
213
 
181
- assert_equal [['key','new']], read_cache(@sic.system_cache_file).to_a.sort
214
+ assert_equal [[@gem_repo, @sice_new]],
215
+ read_cache(@sic.system_cache_file).to_a.sort
216
+ end
217
+
218
+ def test_latest_cache_data
219
+ util_make_gems
220
+
221
+ sice = Gem::SourceInfoCacheEntry.new @source_index, 0
222
+
223
+ @sic.set_cache_data @gem_repo => sice
224
+ latest = @sic.latest_cache_data
225
+ gems = latest[@gem_repo].source_index.search('a').map { |s| s.full_name }
226
+
227
+ assert_equal %w[a-2 a_evil-9], gems
228
+ end
229
+
230
+ def test_latest_cache_file
231
+ latest_cache_file = File.join File.dirname(@gemcache),
232
+ "latest_#{File.basename @gemcache}"
233
+ assert_equal latest_cache_file, @sic.latest_cache_file
234
+ end
235
+
236
+ def test_latest_system_cache_file
237
+ assert_equal File.join(Gem.dir, "latest_source_cache"),
238
+ @sic.latest_system_cache_file
239
+ end
240
+
241
+ def test_latest_user_cache_file
242
+ assert_equal @latest_usrcache, @sic.latest_user_cache_file
182
243
  end
183
244
 
184
245
  def test_read_system_cache
185
- assert_equal [['key','sys']], @sic.cache_data.to_a.sort
246
+ assert_equal [[@gem_repo, @sys_sice]], @sic.cache_data.to_a.sort
186
247
  end
187
248
 
188
249
  def test_read_user_cache
189
- FileUtils.chmod 0444, @sic.system_cache_file
250
+ FileUtils.chmod 0444, @sic.user_cache_file
251
+ FileUtils.chmod 0444, @sic.latest_user_cache_file
252
+
253
+ @si = Gem::SourceIndex.new
254
+ @si.add_specs @a1, @a2
255
+
256
+ @sice = Gem::SourceInfoCacheEntry.new @si, 0
257
+
258
+ @sic.set_cache_data({ @gem_repo => @sice })
259
+ @sic.update
260
+ @sic.write_cache
261
+ @sic.reset_cache_data
190
262
 
191
- assert_equal [['key','usr']], @sic.cache_data.to_a.sort
263
+ user_cache_data = @sic.cache_data.to_a.sort
264
+
265
+ assert_equal 1, user_cache_data.length
266
+ user_cache_data = user_cache_data.first
267
+
268
+ assert_equal @gem_repo, user_cache_data.first
269
+
270
+ gems = user_cache_data.last.source_index.map { |_,spec| spec.full_name }
271
+ assert_equal [@a2.full_name], gems
192
272
  end
193
273
 
194
274
  def test_search
195
- si = Gem::SourceIndex.new @gem1.full_name => @gem1
196
- cache_data = {
197
- @gem_repo => Gem::SourceInfoCacheEntry.new(si, nil)
198
- }
275
+ si = Gem::SourceIndex.new
276
+ si.add_spec @a1
277
+ cache_data = { @gem_repo => Gem::SourceInfoCacheEntry.new(si, nil) }
199
278
  @sic.instance_variable_set :@cache_data, cache_data
200
279
 
201
- assert_equal [@gem1], @sic.search(//)
280
+ assert_equal [@a1], @sic.search(//)
281
+ end
282
+
283
+ def test_search_all
284
+ util_make_gems
285
+
286
+ sice = Gem::SourceInfoCacheEntry.new @source_index, 0
287
+
288
+ @sic.set_cache_data @gem_repo => sice
289
+ @sic.update
290
+ @sic.write_cache
291
+ @sic.reset_cache_data
292
+
293
+ gem_names = @sic.search(//, false, true).map { |spec| spec.full_name }
294
+
295
+ assert_equal %w[a-1 a-2 a_evil-9 c-1.2], gem_names
202
296
  end
203
297
 
204
298
  def test_search_dependency
205
- si = Gem::SourceIndex.new @gem1.full_name => @gem1
206
- cache_data = {
207
- @gem_repo => Gem::SourceInfoCacheEntry.new(si, nil)
208
- }
299
+ si = Gem::SourceIndex.new
300
+ si.add_spec @a1
301
+ cache_data = { @gem_repo => Gem::SourceInfoCacheEntry.new(si, nil) }
209
302
  @sic.instance_variable_set :@cache_data, cache_data
210
303
 
211
- dep = Gem::Dependency.new @gem1.name, @gem1.version
304
+ dep = Gem::Dependency.new @a1.name, @a1.version
212
305
 
213
- assert_equal [@gem1], @sic.search(dep)
306
+ assert_equal [@a1], @sic.search(dep)
214
307
  end
215
308
 
216
309
  def test_search_no_matches
217
- si = Gem::SourceIndex.new @gem1.full_name => @gem1
218
- cache_data = {
219
- @gem_repo => Gem::SourceInfoCacheEntry.new(si, nil)
220
- }
310
+ si = Gem::SourceIndex.new
311
+ si.add_spec @a1
312
+ cache_data = { @gem_repo => Gem::SourceInfoCacheEntry.new(si, nil) }
221
313
  @sic.instance_variable_set :@cache_data, cache_data
222
314
 
223
315
  assert_equal [], @sic.search(/nonexistent/)
224
316
  end
225
317
 
226
318
  def test_search_no_matches_in_source
227
- si = Gem::SourceIndex.new @gem1.full_name => @gem1
228
- cache_data = {
229
- @gem_repo => Gem::SourceInfoCacheEntry.new(si, nil)
230
- }
319
+ si = Gem::SourceIndex.new
320
+ si.add_spec @a1
321
+ cache_data = { @gem_repo => Gem::SourceInfoCacheEntry.new(si, nil) }
231
322
  @sic.instance_variable_set :@cache_data, cache_data
232
323
  Gem.sources.replace %w[more-gems.example.com]
233
324
 
@@ -235,13 +326,12 @@ class TestGemSourceInfoCache < RubyGemTestCase
235
326
  end
236
327
 
237
328
  def test_search_with_source
238
- si = Gem::SourceIndex.new @gem1.full_name => @gem1
239
- cache_data = {
240
- @gem_repo => Gem::SourceInfoCacheEntry.new(si, nil)
241
- }
329
+ si = Gem::SourceIndex.new
330
+ si.add_spec @a1
331
+ cache_data = { @gem_repo => Gem::SourceInfoCacheEntry.new(si, nil) }
242
332
  @sic.instance_variable_set :@cache_data, cache_data
243
333
 
244
- assert_equal [[@gem1, @gem_repo]],
334
+ assert_equal [[@a1, @gem_repo]],
245
335
  @sic.search_with_source(//)
246
336
  end
247
337
 
@@ -254,45 +344,81 @@ class TestGemSourceInfoCache < RubyGemTestCase
254
344
  end
255
345
 
256
346
  def test_write_cache
257
- @sic.cache_data['key'] = 'new'
347
+ @sic.cache_data[@gem_repo] = @sice_new
258
348
  @sic.write_cache
259
349
 
260
- assert_equal [['key', 'new']],
350
+ assert_equal [[@gem_repo, @sice_new]],
261
351
  read_cache(@sic.system_cache_file).to_a.sort
262
- assert_equal [['key', 'usr']],
352
+ assert_equal [[@gem_repo, @usr_sice]],
263
353
  read_cache(@sic.user_cache_file).to_a.sort
264
354
  end
265
355
 
266
356
  def test_write_cache_user
267
357
  FileUtils.chmod 0444, @sic.system_cache_file
268
- @sic.set_cache_data({'key' => 'new'})
358
+ @sic.set_cache_data({@gem_repo => @sice_new})
269
359
  @sic.update
270
360
  @sic.write_cache
271
361
 
272
- assert_equal [['key', 'sys']], read_cache(@sic.system_cache_file).to_a.sort
273
- assert_equal [['key', 'new']], read_cache(@sic.user_cache_file).to_a.sort
362
+ assert File.exist?(@sic.user_cache_file), 'user_cache_file'
363
+ assert File.exist?(@sic.latest_user_cache_file),
364
+ 'latest_user_cache_file exists'
365
+
366
+ assert_equal [[@gem_repo, @sys_sice]],
367
+ read_cache(@sic.system_cache_file).to_a.sort
368
+ assert_equal [[@gem_repo, @sice_new]],
369
+ read_cache(@sic.user_cache_file).to_a.sort
274
370
  end
275
371
 
276
372
  def test_write_cache_user_from_scratch
277
373
  FileUtils.rm_rf @sic.user_cache_file
374
+ FileUtils.rm_rf @sic.latest_user_cache_file
375
+
278
376
  FileUtils.chmod 0444, @sic.system_cache_file
279
- @sic.set_cache_data({'key' => 'new'})
377
+ FileUtils.chmod 0444, @sic.latest_system_cache_file
378
+
379
+ @si = Gem::SourceIndex.new
380
+ @si.add_specs @a1, @a2
381
+
382
+ @sice = Gem::SourceInfoCacheEntry.new @si, 0
383
+
384
+ @sic.set_cache_data({ @gem_repo => @sice })
280
385
  @sic.update
281
386
  @sic.write_cache
282
387
 
283
- assert_equal [['key', 'sys']], read_cache(@sic.system_cache_file).to_a.sort
284
- assert_equal [['key', 'new']], read_cache(@sic.user_cache_file).to_a.sort
388
+ assert File.exist?(@sic.user_cache_file), 'system_cache_file'
389
+ assert File.exist?(@sic.latest_user_cache_file),
390
+ 'latest_system_cache_file'
391
+
392
+ user_cache_data = read_cache(@sic.user_cache_file).to_a.sort
393
+ assert_equal 1, user_cache_data.length
394
+ user_cache_data = user_cache_data.first
395
+
396
+ assert_equal @gem_repo, user_cache_data.first
397
+
398
+ gems = user_cache_data.last.source_index.map { |_,spec| spec.full_name }
399
+ assert_equal [@a1.full_name, @a2.full_name], gems
400
+
401
+ user_cache_data = read_cache(@sic.latest_user_cache_file).to_a.sort
402
+ assert_equal 1, user_cache_data.length
403
+ user_cache_data = user_cache_data.first
404
+
405
+ assert_equal @gem_repo, user_cache_data.first
406
+
407
+ gems = user_cache_data.last.source_index.map { |_,spec| spec.full_name }
408
+ assert_equal [@a2.full_name], gems
285
409
  end
286
410
 
287
411
  def test_write_cache_user_no_directory
288
412
  FileUtils.rm_rf File.dirname(@sic.user_cache_file)
289
413
  FileUtils.chmod 0444, @sic.system_cache_file
290
- @sic.set_cache_data({'key' => 'new'})
414
+ @sic.set_cache_data({ @gem_repo => @sice_new })
291
415
  @sic.update
292
416
  @sic.write_cache
293
417
 
294
- assert_equal [['key','sys']], read_cache(@sic.system_cache_file).to_a.sort
295
- assert_equal [['key','new']], read_cache(@sic.user_cache_file).to_a.sort
418
+ assert_equal [[@gem_repo, @sys_sice]],
419
+ read_cache(@sic.system_cache_file).to_a.sort
420
+ assert_equal [[@gem_repo, @sice_new]],
421
+ read_cache(@sic.user_cache_file).to_a.sort
296
422
  end
297
423
 
298
424
  end
@@ -9,37 +9,68 @@ class TestGemSourceInfoCacheEntry < RubyGemTestCase
9
9
 
10
10
  util_setup_fake_fetcher
11
11
 
12
- @si = Gem::SourceIndex.new @gem1.full_name => @gem1.name
12
+ @si = Gem::SourceIndex.new
13
+ @si.add_spec @a1
13
14
  @sic_e = Gem::SourceInfoCacheEntry.new @si, @si.dump.size
14
15
  end
15
16
 
16
17
  def test_refresh
17
18
  @fetcher.data["#{@gem_repo}/Marshal.#{@marshal_version}.Z"] =
18
- proc { raise Exception }
19
+ proc { raise }
19
20
  @fetcher.data["#{@gem_repo}/Marshal.#{@marshal_version}"] = @si.dump
20
21
 
21
- assert_nothing_raised do
22
- @sic_e.refresh @gem_repo
22
+ use_ui @ui do
23
+ @sic_e.refresh @gem_repo, true
24
+ end
25
+ end
26
+
27
+ def test_refresh_all
28
+ @si.add_spec @a2
29
+
30
+ a1_name = @a1.full_name
31
+ a2_name = @a2.full_name
32
+
33
+ @fetcher.data["#{@gem_repo}/quick/index.rz"] =
34
+ util_zip [a1_name, a2_name].join("\n")
35
+ @fetcher.data["#{@gem_repo}/quick/latest_index.rz"] = util_zip a2_name
36
+ @fetcher.data["#{@gem_repo}/quick/Marshal.#{Gem.marshal_version}/#{a1_name}.gemspec.rz"] = util_zip Marshal.dump(@a1)
37
+ @fetcher.data["#{@gem_repo}/quick/Marshal.#{Gem.marshal_version}/#{a2_name}.gemspec.rz"] = util_zip Marshal.dump(@a2)
38
+ @fetcher.data["#{@gem_repo}/Marshal.#{Gem.marshal_version}"] =
39
+ Marshal.dump @si
40
+
41
+ sic_e = Gem::SourceInfoCacheEntry.new Gem::SourceIndex.new, 0
42
+
43
+ use_ui @ui do
44
+ sic_e.refresh @gem_repo, false
23
45
  end
46
+
47
+ assert_equal [a2_name], sic_e.source_index.map { |n,| n }.sort
48
+
49
+ use_ui @ui do
50
+ sic_e.refresh @gem_repo, true
51
+ end
52
+
53
+ assert_equal [a1_name, a2_name], sic_e.source_index.map { |n,| n }.sort
24
54
  end
25
55
 
26
56
  def test_refresh_bad_uri
27
57
  assert_raise URI::BadURIError do
28
- @sic_e.refresh 'gems.example.com'
58
+ @sic_e.refresh 'gems.example.com', true
29
59
  end
30
60
  end
31
61
 
32
62
  def test_refresh_update
33
- si = Gem::SourceIndex.new @gem1.full_name => @gem1,
34
- @gem2.full_name => @gem2
63
+ si = Gem::SourceIndex.new
64
+ si.add_spec @a1
65
+ si.add_spec @b2
35
66
  @fetcher.data["#{@gem_repo}/Marshal.#{@marshal_version}"] = si.dump
36
67
 
37
68
  use_ui @ui do
38
- @sic_e.refresh @gem_repo
69
+ @sic_e.refresh @gem_repo, true
39
70
  end
40
71
 
41
- new_gem = @sic_e.source_index.specification(@gem2.full_name)
42
- assert_equal @gem2.full_name, new_gem.full_name
72
+ new_gem = @sic_e.source_index.specification(@b2.full_name)
73
+ assert_equal @b2.full_name, new_gem.full_name
43
74
  end
44
75
 
45
76
  end