rubygems-update 1.8.15 → 1.8.16

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.
data/History.txt CHANGED
@@ -1,5 +1,13 @@
1
1
  # coding: UTF-8
2
2
 
3
+ === 1.8.16 / 2012-02-12
4
+
5
+ * 3 bug fixes:
6
+
7
+ * Fix gem specification loading when encoding is not UTF-8. #146
8
+ * Allow group writable if umask allows it already.
9
+ * Uniquify the spec list based on directory order priority
10
+
3
11
  === 1.8.15 / 2012-01-06
4
12
 
5
13
  * 1 bug fix:
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.15'
121
+ VERSION = '1.8.16'
122
122
 
123
123
  ##
124
124
  # Raised when RubyGems is unable to load or activate a gem. Contains the
@@ -445,7 +445,7 @@ module Gem
445
445
  require 'fileutils'
446
446
 
447
447
  old_umask = File.umask
448
- File.umask old_umask | 022
448
+ File.umask old_umask | 002
449
449
 
450
450
  %w[cache doc gems specifications].each do |name|
451
451
  subdir = File.join dir, name
@@ -262,18 +262,19 @@ class Gem::Specification
262
262
 
263
263
  def self._all # :nodoc:
264
264
  unless defined?(@@all) && @@all then
265
- specs = []
265
+ specs = {}
266
266
 
267
- self.dirs.reverse_each { |dir|
267
+ self.dirs.each { |dir|
268
268
  Dir[File.join(dir, "*.gemspec")].each { |path|
269
269
  spec = Gem::Specification.load path.untaint
270
270
  # #load returns nil if the spec is bad, so we just ignore
271
271
  # it at this stage
272
- specs << spec if spec
272
+ specs[spec.full_name] ||= spec if spec
273
273
  }
274
274
  }
275
275
 
276
- @@all = specs
276
+ @@all = specs.values
277
+
277
278
  _resort!
278
279
  end
279
280
  @@all
@@ -537,7 +538,7 @@ class Gem::Specification
537
538
  file = file.dup.untaint
538
539
 
539
540
  code = if defined? Encoding
540
- File.read file, :encoding => "UTF-8"
541
+ File.read file, :mode => 'r:UTF-8:-'
541
542
  else
542
543
  File.read file
543
544
  end
@@ -243,7 +243,7 @@ class Gem::TestCase < MiniTest::Unit::TestCase
243
243
  ##
244
244
  # Builds and installs the Gem::Specification +spec+
245
245
 
246
- def install_gem spec
246
+ def install_gem spec, options = {}
247
247
  require 'rubygems/installer'
248
248
 
249
249
  use_ui Gem::MockGemUi.new do
@@ -254,26 +254,14 @@ class Gem::TestCase < MiniTest::Unit::TestCase
254
254
 
255
255
  gem = File.join(@tempdir, File.basename(spec.cache_file)).untaint
256
256
 
257
- Gem::Installer.new(gem, :wrappers => true).install
257
+ Gem::Installer.new(gem, options.merge({:wrappers => true})).install
258
258
  end
259
259
 
260
260
  ##
261
261
  # Builds and installs the Gem::Specification +spec+ into the user dir
262
262
 
263
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
264
+ install_gem spec, :user_install => true
277
265
  end
278
266
 
279
267
  ##
@@ -880,4 +868,3 @@ Also, a list:
880
868
  end
881
869
 
882
870
  end
883
-
@@ -629,8 +629,8 @@ class TestGem < Gem::TestCase
629
629
  File.umask 0
630
630
  Gem.ensure_gem_subdirectories @gemhome
631
631
 
632
- assert_equal 0, File::Stat.new(@gemhome).mode & 022
633
- assert_equal 0, File::Stat.new(File.join(@gemhome, "cache")).mode & 022
632
+ assert_equal 0, File::Stat.new(@gemhome).mode & 002
633
+ assert_equal 0, File::Stat.new(File.join(@gemhome, "cache")).mode & 002
634
634
  ensure
635
635
  File.umask old_umask
636
636
  end unless win_platform?
@@ -1122,6 +1122,86 @@ class TestGem < Gem::TestCase
1122
1122
  end
1123
1123
  end
1124
1124
 
1125
+ def test_gem_path_ordering
1126
+ refute_equal Gem.dir, Gem.user_dir
1127
+
1128
+ write_file File.join(@tempdir, 'lib', "g.rb") { |fp| fp.puts "" }
1129
+ write_file File.join(@tempdir, 'lib', 'm.rb') { |fp| fp.puts "" }
1130
+
1131
+ g = new_spec 'g', '1', nil, "lib/g.rb"
1132
+ m = new_spec 'm', '1', nil, "lib/m.rb"
1133
+
1134
+ install_gem g, :install_dir => Gem.dir
1135
+ m0 = install_gem m, :install_dir => Gem.dir
1136
+ m1 = install_gem m, :install_dir => Gem.user_dir
1137
+
1138
+ assert_equal m0.gem_dir, File.join(Gem.dir, "gems", "m-1")
1139
+ assert_equal m1.gem_dir, File.join(Gem.user_dir, "gems", "m-1")
1140
+
1141
+ tests = [
1142
+ [:dir0, [ Gem.dir, Gem.user_dir], m0],
1143
+ [:dir1, [ Gem.user_dir, Gem.dir], m1]
1144
+ ]
1145
+
1146
+ tests.each do |_name, _paths, expected|
1147
+ Gem.paths = { 'GEM_HOME' => _paths.first, 'GEM_PATH' => _paths }
1148
+ Gem::Specification.reset
1149
+ Gem.searcher = nil
1150
+
1151
+ assert_equal Gem::Dependency.new('m','1').to_specs,
1152
+ Gem::Dependency.new('m','1').to_specs.sort
1153
+
1154
+ assert_equal \
1155
+ [expected.gem_dir],
1156
+ Gem::Dependency.new('m','1').to_specs.map(&:gem_dir).sort,
1157
+ "Wrong specs for #{_name}"
1158
+
1159
+ spec = Gem::Dependency.new('m','1').to_spec
1160
+
1161
+ assert_equal \
1162
+ File.join(_paths.first, "gems", "m-1"),
1163
+ spec.gem_dir,
1164
+ "Wrong spec before require for #{_name}"
1165
+ refute spec.activated?, "dependency already activated for #{_name}"
1166
+
1167
+ gem "m"
1168
+
1169
+ spec = Gem::Dependency.new('m','1').to_spec
1170
+ assert spec.activated?, "dependency not activated for #{_name}"
1171
+
1172
+ assert_equal \
1173
+ File.join(_paths.first, "gems", "m-1"),
1174
+ spec.gem_dir,
1175
+ "Wrong spec after require for #{_name}"
1176
+
1177
+ spec.instance_variable_set :@activated, false
1178
+ Gem.loaded_specs.delete(spec.name)
1179
+ $:.delete(File.join(spec.gem_dir, "lib"))
1180
+ end
1181
+ end
1182
+
1183
+ def test_gem_path_ordering_short
1184
+ write_file File.join(@tempdir, 'lib', "g.rb") { |fp| fp.puts "" }
1185
+ write_file File.join(@tempdir, 'lib', 'm.rb') { |fp| fp.puts "" }
1186
+
1187
+ g = new_spec 'g', '1', nil, "lib/g.rb"
1188
+ m = new_spec 'm', '1', nil, "lib/m.rb"
1189
+
1190
+ install_gem g, :install_dir => Gem.dir
1191
+ install_gem m, :install_dir => Gem.dir
1192
+ install_gem m, :install_dir => Gem.user_dir
1193
+
1194
+ Gem.paths = {
1195
+ 'GEM_HOME' => Gem.dir,
1196
+ 'GEM_PATH' => [ Gem.dir, Gem.user_dir]
1197
+ }
1198
+
1199
+ assert_equal \
1200
+ File.join(Gem.dir, "gems", "m-1"),
1201
+ Gem::Dependency.new('m','1').to_spec.gem_dir,
1202
+ "Wrong spec selected"
1203
+ end
1204
+
1125
1205
  def with_plugin(path)
1126
1206
  test_plugin_path = File.expand_path("test/rubygems/plugin/#{path}",
1127
1207
  @@project_dir)
@@ -292,6 +292,29 @@ bindir:
292
292
  assert_equal @a2, spec
293
293
  end
294
294
 
295
+ if defined?(Encoding)
296
+ def test_self_load_utf8_with_ascii_encoding
297
+ int_enc = Encoding.default_internal
298
+ silence_warnings { Encoding.default_internal = 'US-ASCII' }
299
+
300
+ spec2 = @a2.dup
301
+ bin = "\u5678"
302
+ spec2.authors = [bin]
303
+ full_path = spec2.spec_file
304
+ write_file full_path do |io|
305
+ io.write spec2.to_ruby_for_cache.force_encoding('BINARY').sub("\\u{5678}", bin.force_encoding('BINARY'))
306
+ end
307
+
308
+ spec = Gem::Specification.load full_path
309
+
310
+ spec2.files.clear
311
+
312
+ assert_equal spec2, spec
313
+ ensure
314
+ silence_warnings { Encoding.default_internal = int_enc }
315
+ end
316
+ end
317
+
295
318
  def test_self_load_legacy_ruby
296
319
  spec = Gem::Deprecate.skip_during do
297
320
  eval LEGACY_RUBY_SPEC
@@ -1577,4 +1600,11 @@ end
1577
1600
  # ignore
1578
1601
  end
1579
1602
  end
1603
+
1604
+ def silence_warnings
1605
+ old_verbose, $VERBOSE = $VERBOSE, false
1606
+ yield
1607
+ ensure
1608
+ $VERBOSE = old_verbose
1609
+ end
1580
1610
  end
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: 41
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 8
9
- - 15
10
- version: 1.8.15
9
+ - 16
10
+ version: 1.8.16
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jim Weirich
@@ -17,7 +17,7 @@ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2012-01-06 00:00:00 Z
20
+ date: 2012-02-10 00:00:00 Z
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
23
23
  name: minitest
@@ -399,7 +399,7 @@ post_install_message:
399
399
  rdoc_options:
400
400
  - --main
401
401
  - README.rdoc
402
- - --title=RubyGems 1.8.15 Documentation
402
+ - --title=RubyGems 1.8.16 Documentation
403
403
  require_paths:
404
404
  - hide_lib_for_update
405
405
  required_ruby_version: !ruby/object:Gem::Requirement