rubygems-update 2.1.0.rc.1 → 2.1.0.rc.2

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 (63) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/History.txt +11 -3
  5. data/Manifest.txt +1 -0
  6. data/Rakefile +22 -18
  7. data/lib/rubygems.rb +8 -10
  8. data/lib/rubygems/basic_specification.rb +112 -108
  9. data/lib/rubygems/commands/build_command.rb +19 -0
  10. data/lib/rubygems/commands/check_command.rb +7 -0
  11. data/lib/rubygems/commands/cleanup_command.rb +5 -5
  12. data/lib/rubygems/commands/contents_command.rb +8 -0
  13. data/lib/rubygems/commands/dependency_command.rb +11 -0
  14. data/lib/rubygems/commands/environment_command.rb +3 -0
  15. data/lib/rubygems/commands/fetch_command.rb +10 -0
  16. data/lib/rubygems/commands/list_command.rb +12 -1
  17. data/lib/rubygems/commands/mirror_command.rb +6 -0
  18. data/lib/rubygems/commands/outdated_command.rb +9 -0
  19. data/lib/rubygems/commands/owner_command.rb +9 -2
  20. data/lib/rubygems/commands/pristine_command.rb +12 -11
  21. data/lib/rubygems/commands/push_command.rb +8 -2
  22. data/lib/rubygems/commands/query_command.rb +9 -0
  23. data/lib/rubygems/commands/rdoc_command.rb +6 -2
  24. data/lib/rubygems/commands/search_command.rb +14 -1
  25. data/lib/rubygems/commands/sources_command.rb +47 -0
  26. data/lib/rubygems/commands/specification_command.rb +16 -0
  27. data/lib/rubygems/commands/stale_command.rb +10 -0
  28. data/lib/rubygems/commands/uninstall_command.rb +19 -6
  29. data/lib/rubygems/commands/unpack_command.rb +18 -0
  30. data/lib/rubygems/commands/update_command.rb +9 -0
  31. data/lib/rubygems/commands/which_command.rb +11 -0
  32. data/lib/rubygems/commands/yank_command.rb +16 -2
  33. data/lib/rubygems/core_ext/kernel_require.rb +4 -4
  34. data/lib/rubygems/defaults.rb +7 -0
  35. data/lib/rubygems/dependency_installer.rb +1 -4
  36. data/lib/rubygems/ext/builder.rb +118 -0
  37. data/lib/rubygems/installer.rb +7 -60
  38. data/lib/rubygems/package_task.rb +5 -2
  39. data/lib/rubygems/remote_fetcher.rb +1 -1
  40. data/lib/rubygems/security/policy.rb +5 -0
  41. data/lib/rubygems/security/signer.rb +19 -1
  42. data/lib/rubygems/source.rb +7 -3
  43. data/lib/rubygems/source/local.rb +5 -4
  44. data/lib/rubygems/source/specific_file.rb +28 -0
  45. data/lib/rubygems/specification.rb +55 -44
  46. data/lib/rubygems/stub_specification.rb +93 -92
  47. data/lib/rubygems/test_case.rb +10 -9
  48. data/test/rubygems/test_gem.rb +27 -0
  49. data/test/rubygems/test_gem_commands_install_command.rb +1 -0
  50. data/test/rubygems/test_gem_commands_uninstall_command.rb +17 -8
  51. data/test/rubygems/test_gem_ext_builder.rb +97 -2
  52. data/test/rubygems/test_gem_installer.rb +0 -89
  53. data/test/rubygems/test_gem_package.rb +6 -8
  54. data/test/rubygems/test_gem_package_task.rb +23 -2
  55. data/test/rubygems/test_gem_security_policy.rb +11 -0
  56. data/test/rubygems/test_gem_security_signer.rb +6 -0
  57. data/test/rubygems/test_gem_source.rb +23 -0
  58. data/test/rubygems/test_gem_source_installed.rb +28 -0
  59. data/test/rubygems/test_gem_source_local.rb +29 -6
  60. data/test/rubygems/test_gem_source_specific_file.rb +38 -0
  61. data/test/rubygems/test_gem_specification.rb +10 -2
  62. metadata +7 -5
  63. metadata.gz.sig +0 -0
@@ -785,7 +785,7 @@ Also, a list:
785
785
  @a_evil9 = quick_gem('a_evil', '9', &init)
786
786
  @b2 = quick_gem('b', '2', &init)
787
787
  @c1_2 = quick_gem('c', '1.2', &init)
788
- @x = quick_gem('x', '1', &init)
788
+ @x = quick_gem('x', '1', &init)
789
789
  @dep_x = quick_gem('dep_x', '1') do |s|
790
790
  s.files = %w[lib/code.rb]
791
791
  s.require_paths = %w[lib]
@@ -805,14 +805,15 @@ Also, a list:
805
805
  util_build_gem @a2_pre
806
806
  end
807
807
 
808
- write_file File.join(*%W[gems #{@a1.original_name} lib code.rb])
809
- write_file File.join(*%W[gems #{@a2.original_name} lib code.rb])
810
- write_file File.join(*%W[gems #{@a3a.original_name} lib code.rb])
811
- write_file File.join(*%W[gems #{@b2.original_name} lib code.rb])
812
- write_file File.join(*%W[gems #{@c1_2.original_name} lib code.rb])
813
- write_file File.join(*%W[gems #{@pl1.original_name} lib code.rb])
814
- write_file File.join(*%W[gems #{@x.original_name} lib code.rb])
815
- write_file File.join(*%W[gems #{@dep_x.original_name} lib code.rb])
808
+ write_file File.join(*%W[gems #{@a1.original_name} lib code.rb])
809
+ write_file File.join(*%W[gems #{@a2.original_name} lib code.rb])
810
+ write_file File.join(*%W[gems #{@a3a.original_name} lib code.rb])
811
+ write_file File.join(*%W[gems #{@a_evil9.original_name} lib code.rb])
812
+ write_file File.join(*%W[gems #{@b2.original_name} lib code.rb])
813
+ write_file File.join(*%W[gems #{@c1_2.original_name} lib code.rb])
814
+ write_file File.join(*%W[gems #{@pl1.original_name} lib code.rb])
815
+ write_file File.join(*%W[gems #{@x.original_name} lib code.rb])
816
+ write_file File.join(*%W[gems #{@dep_x.original_name} lib code.rb])
816
817
 
817
818
  [@a1, @a2, @a3a, @a_evil9, @b2, @c1_2, @pl1, @x, @dep_x].each do |spec|
818
819
  util_build_gem spec
@@ -1181,6 +1181,33 @@ class TestGem < Gem::TestCase
1181
1181
  assert_equal nil, Gem.find_unresolved_default_spec("README")
1182
1182
  end
1183
1183
 
1184
+ def test_default_gems_use_full_paths
1185
+ begin
1186
+ if defined?(RUBY_ENGINE) then
1187
+ engine = RUBY_ENGINE
1188
+ Object.send :remove_const, :RUBY_ENGINE
1189
+ end
1190
+ Object.const_set :RUBY_ENGINE, 'ruby'
1191
+
1192
+ refute Gem.default_gems_use_full_paths?
1193
+ ensure
1194
+ Object.send :remove_const, :RUBY_ENGINE
1195
+ Object.const_set :RUBY_ENGINE, engine if engine
1196
+ end
1197
+
1198
+ begin
1199
+ if defined?(RUBY_ENGINE) then
1200
+ engine = RUBY_ENGINE
1201
+ Object.send :remove_const, :RUBY_ENGINE
1202
+ end
1203
+ Object.const_set :RUBY_ENGINE, 'jruby'
1204
+ assert Gem.default_gems_use_full_paths?
1205
+ ensure
1206
+ Object.send :remove_const, :RUBY_ENGINE
1207
+ Object.const_set :RUBY_ENGINE, engine if engine
1208
+ end
1209
+ end
1210
+
1184
1211
  def with_plugin(path)
1185
1212
  test_plugin_path = File.expand_path("test/rubygems/plugin/#{path}",
1186
1213
  @@project_dir)
@@ -1,5 +1,6 @@
1
1
  require 'rubygems/test_case'
2
2
  require 'rubygems/commands/install_command'
3
+ require 'rubygems/rdoc'
3
4
 
4
5
  class TestGemCommandsInstallCommand < Gem::TestCase
5
6
 
@@ -26,8 +26,8 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase
26
26
  end
27
27
  end
28
28
 
29
- assert_equal "ERROR: Gem names and --all may not be used together\n",
30
- @ui.error
29
+ assert_match(/\A(?:WARNING: Unable to use symlinks on Windows, installing wrapper\n)?ERROR: Gem names and --all may not be used together\n\z/,
30
+ @ui.error)
31
31
  end
32
32
 
33
33
  def test_execute_dependency_order
@@ -191,21 +191,30 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase
191
191
  end
192
192
 
193
193
  def test_execute_all
194
- ui = Gem::MockGemUi.new "y\n"
195
-
196
194
  util_make_gems
197
- util_setup_gem ui
198
195
 
199
- assert Gem::Specification.find_all_by_name('a').length > 1
196
+ default = new_default_spec 'default', '1'
197
+ install_default_gems default
198
+
199
+ gemhome2 = "#{@gemhome}2"
200
+
201
+ a_4 = quick_spec 'a', 4
202
+ install_gem a_4, :install_dir => gemhome2
203
+
204
+ Gem::Specification.dirs = [@gemhome, gemhome2]
205
+
206
+ assert_includes Gem::Specification.all_names, 'a-1'
207
+ assert_includes Gem::Specification.all_names, 'a-4'
208
+ assert_includes Gem::Specification.all_names, 'default-1'
200
209
 
201
210
  @cmd.options[:all] = true
202
211
  @cmd.options[:args] = []
203
212
 
204
- use_ui ui do
213
+ use_ui @ui do
205
214
  @cmd.execute
206
215
  end
207
216
 
208
- refute_includes Gem::Specification.all_names, 'a'
217
+ assert_equal %w[a-4 default-1], Gem::Specification.all_names.sort
209
218
  end
210
219
 
211
220
  end
@@ -1,5 +1,6 @@
1
1
  require 'rubygems/test_case'
2
2
  require 'rubygems/ext'
3
+ require 'rubygems/installer'
3
4
 
4
5
  class TestGemExtBuilder < Gem::TestCase
5
6
 
@@ -13,6 +14,10 @@ class TestGemExtBuilder < Gem::TestCase
13
14
  FileUtils.mkdir_p @dest_path
14
15
 
15
16
  @orig_DESTDIR = ENV['DESTDIR']
17
+
18
+ @spec = quick_spec 'a'
19
+
20
+ @builder = Gem::Ext::Builder.new @spec, ''
16
21
  end
17
22
 
18
23
  def teardown
@@ -50,8 +55,98 @@ install:
50
55
  refute_match %r%"DESTDIR=#{ENV['DESTDIR']}" install$%, results
51
56
  end
52
57
 
53
- assert_match %r%^all: destination$%, results
54
- assert_match %r%^install: destination$%, results
58
+ if /nmake/ !~ results
59
+ assert_match %r%^all: destination$%, results
60
+ assert_match %r%^install: destination$%, results
61
+ end
62
+ end
63
+
64
+ def test_build_extensions_none
65
+ use_ui @ui do
66
+ @builder.build_extensions
67
+ end
68
+
69
+ assert_equal '', @ui.output
70
+ assert_equal '', @ui.error
71
+
72
+ refute File.exist?('gem_make.out')
73
+ end
74
+
75
+ def test_build_extensions_extconf_bad
76
+ @spec.extensions << 'extconf.rb'
77
+
78
+ e = assert_raises Gem::Installer::ExtensionBuildError do
79
+ use_ui @ui do
80
+ @builder.build_extensions
81
+ end
82
+ end
83
+
84
+ assert_match(/\AERROR: Failed to build gem native extension.$/, e.message)
85
+
86
+ assert_equal "Building native extensions. This could take a while...\n",
87
+ @ui.output
88
+ assert_equal '', @ui.error
89
+
90
+ gem_make_out = File.join @gemhome, 'gems', @spec.full_name, 'gem_make.out'
91
+
92
+ assert_match %r%#{Regexp.escape Gem.ruby} extconf\.rb%,
93
+ File.read(gem_make_out)
94
+ assert_match %r%#{Regexp.escape Gem.ruby}: No such file%,
95
+ File.read(gem_make_out)
96
+ end
97
+
98
+ def test_build_extensions_unsupported
99
+ FileUtils.mkdir_p @spec.gem_dir
100
+ gem_make_out = File.join @spec.gem_dir, 'gem_make.out'
101
+ @spec.extensions << nil
102
+
103
+ e = assert_raises Gem::Installer::ExtensionBuildError do
104
+ use_ui @ui do
105
+ @builder.build_extensions
106
+ end
107
+ end
108
+
109
+ assert_match(/^\s*No builder for extension ''$/, e.message)
110
+
111
+ assert_equal "Building native extensions. This could take a while...\n",
112
+ @ui.output
113
+ assert_equal '', @ui.error
114
+
115
+ assert_equal "No builder for extension ''\n", File.read(gem_make_out)
116
+ ensure
117
+ FileUtils.rm_f gem_make_out
118
+ end
119
+
120
+ def test_build_extensions_with_build_args
121
+ args = ["--aa", "--bb"]
122
+ @builder.build_args = args
123
+ @spec.extensions << 'extconf.rb'
124
+
125
+ FileUtils.mkdir_p @spec.gem_dir
126
+
127
+ open File.join(@spec.gem_dir, "extconf.rb"), "w" do |f|
128
+ f.write <<-'RUBY'
129
+ puts "IN EXTCONF"
130
+ extconf_args = File.join File.dirname(__FILE__), 'extconf_args'
131
+ File.open extconf_args, 'w' do |f|
132
+ f.puts ARGV.inspect
133
+ end
134
+
135
+ File.open 'Makefile', 'w' do |f|
136
+ f.puts "default:\n\techo built"
137
+ f.puts "install:\n\techo installed"
138
+ end
139
+ RUBY
140
+ end
141
+
142
+ use_ui @ui do
143
+ @builder.build_extensions
144
+ end
145
+
146
+ path = File.join @spec.gem_dir, "extconf_args"
147
+
148
+ assert_equal args.inspect, File.read(path).strip
149
+ assert File.directory? File.join(@spec.gem_dir, 'lib')
55
150
  end
56
151
 
57
152
  end
@@ -55,95 +55,6 @@ load Gem.bin_path('a', 'executable', version)
55
55
  assert_equal expected, wrapper
56
56
  end
57
57
 
58
- def test_build_extensions_none
59
- use_ui @ui do
60
- @installer.build_extensions
61
- end
62
-
63
- assert_equal '', @ui.output
64
- assert_equal '', @ui.error
65
-
66
- refute File.exist?('gem_make.out')
67
- end
68
-
69
- def test_build_extensions_extconf_bad
70
- @installer.spec = @spec
71
- @spec.extensions << 'extconf.rb'
72
-
73
- e = assert_raises Gem::Installer::ExtensionBuildError do
74
- use_ui @ui do
75
- @installer.build_extensions
76
- end
77
- end
78
-
79
- assert_match(/\AERROR: Failed to build gem native extension.$/, e.message)
80
-
81
- assert_equal "Building native extensions. This could take a while...\n",
82
- @ui.output
83
- assert_equal '', @ui.error
84
-
85
- gem_make_out = File.join @gemhome, 'gems', @spec.full_name, 'gem_make.out'
86
-
87
- assert_match %r%#{Regexp.escape Gem.ruby} extconf\.rb%,
88
- File.read(gem_make_out)
89
- assert_match %r%#{Regexp.escape Gem.ruby}: No such file%,
90
- File.read(gem_make_out)
91
- end
92
-
93
- def test_build_extensions_unsupported
94
- @installer.spec = @spec
95
- FileUtils.mkdir_p @spec.gem_dir
96
- gem_make_out = File.join @spec.gem_dir, 'gem_make.out'
97
- @spec.extensions << nil
98
-
99
- e = assert_raises Gem::Installer::ExtensionBuildError do
100
- use_ui @ui do
101
- @installer.build_extensions
102
- end
103
- end
104
-
105
- assert_match(/^\s*No builder for extension ''$/, e.message)
106
-
107
- assert_equal "Building native extensions. This could take a while...\n",
108
- @ui.output
109
- assert_equal '', @ui.error
110
-
111
- assert_equal "No builder for extension ''\n", File.read(gem_make_out)
112
- ensure
113
- FileUtils.rm_f gem_make_out
114
- end
115
-
116
- def test_build_extensions_with_build_args
117
- args = ["--aa", "--bb"]
118
- @installer.build_args = args
119
- @installer.spec = @spec
120
- @spec.extensions << 'extconf.rb'
121
-
122
- File.open File.join(@spec.gem_dir, "extconf.rb"), "w" do |f|
123
- f.write <<-'RUBY'
124
- puts "IN EXTCONF"
125
- extconf_args = File.join File.dirname(__FILE__), 'extconf_args'
126
- File.open extconf_args, 'w' do |f|
127
- f.puts ARGV.inspect
128
- end
129
-
130
- File.open 'Makefile', 'w' do |f|
131
- f.puts "default:\n\techo built"
132
- f.puts "install:\n\techo installed"
133
- end
134
- RUBY
135
- end
136
-
137
- use_ui @ui do
138
- @installer.build_extensions
139
- end
140
-
141
- path = File.join @spec.gem_dir, "extconf_args"
142
-
143
- assert_equal args.inspect, File.read(path).strip
144
- assert File.directory? File.join(@spec.gem_dir, 'lib')
145
- end
146
-
147
58
  def test_check_executable_overwrite
148
59
  @installer.generate_bin
149
60
 
@@ -64,13 +64,16 @@ class TestGemPackage < Gem::Package::TarTestCase
64
64
  reader = Gem::Package::TarReader.new gem_io
65
65
 
66
66
  checksums = nil
67
+ tar = nil
67
68
 
68
69
  reader.each_entry do |entry|
69
70
  case entry.full_name
70
- when 'checksums.yaml.gz'
71
+ when 'checksums.yaml.gz' then
71
72
  Zlib::GzipReader.wrap entry do |io|
72
73
  checksums = io.read
73
74
  end
75
+ when 'data.tar.gz' then
76
+ tar = entry.read
74
77
  end
75
78
  end
76
79
 
@@ -83,22 +86,17 @@ class TestGemPackage < Gem::Package::TarTestCase
83
86
  metadata_sha1 = Digest::SHA1.hexdigest s.string
84
87
  metadata_sha512 = Digest::SHA512.hexdigest s.string
85
88
 
86
- data_digests = nil
87
- util_tar do |tar|
88
- data_digests = package.add_contents tar
89
- end
90
-
91
89
  expected = {
92
90
  'SHA512' => {
93
91
  'metadata.gz' => metadata_sha512,
94
- 'data.tar.gz' => data_digests['SHA512'].hexdigest,
92
+ 'data.tar.gz' => Digest::SHA512.hexdigest(tar),
95
93
  }
96
94
  }
97
95
 
98
96
  if defined?(OpenSSL::Digest) then
99
97
  expected['SHA1'] = {
100
98
  'metadata.gz' => metadata_sha1,
101
- 'data.tar.gz' => data_digests['SHA1'].hexdigest,
99
+ 'data.tar.gz' => Digest::SHA1.hexdigest(tar),
102
100
  }
103
101
  end
104
102
 
@@ -4,16 +4,37 @@ require 'rubygems/package_task'
4
4
 
5
5
  class TestGemPackageTask < Gem::TestCase
6
6
 
7
+ def setup
8
+ super
9
+
10
+ Rake.application = Rake::Application.new
11
+ RakeFileUtils.verbose_flag = false
12
+ end
13
+
7
14
  def test_gem_package
8
15
  gem = Gem::Specification.new do |g|
9
16
  g.name = "pkgr"
10
17
  g.version = "1.2.3"
11
- g.files = Rake::FileList["x"].resolve
18
+
19
+ g.authors = %w[author]
20
+ g.files = %w[x]
21
+ g.summary = 'summary'
12
22
  end
23
+
13
24
  pkg = Gem::PackageTask.new(gem) do |p|
14
25
  p.package_files << "y"
15
26
  end
16
- assert_equal ["x", "y"], pkg.package_files
27
+
28
+ assert_equal %w[x y], pkg.package_files
29
+
30
+ Dir.chdir @tempdir do
31
+ FileUtils.touch 'x'
32
+ FileUtils.touch 'y'
33
+
34
+ Rake.application['package'].invoke
35
+
36
+ assert_path_exists 'pkg/pkgr-1.2.3.gem'
37
+ end
17
38
  end
18
39
 
19
40
  def test_gem_package_with_current_platform
@@ -351,6 +351,17 @@ class TestGemSecurityPolicy < Gem::TestCase
351
351
  end
352
352
  end
353
353
 
354
+ def test_verify_no_signatures_no_digests
355
+ Gem::Security.trust_dir.trust_cert PUBLIC_CERT
356
+
357
+ use_ui @ui do
358
+ @no.verify [PUBLIC_CERT], nil, {}, {}, 'some_gem'
359
+ end
360
+
361
+ assert_empty @ui.output
362
+ assert_empty @ui.error
363
+ end
364
+
354
365
  def test_verify_not_enough_signatures
355
366
  Gem::Security.trust_dir.trust_cert PUBLIC_CERT
356
367
 
@@ -84,6 +84,12 @@ class TestGemSecuritySigner < Gem::TestCase
84
84
  assert_equal ENCRYPTED_PRIVATE_KEY.to_s, signer.key.to_s
85
85
  end
86
86
 
87
+ def test_extract_name
88
+ signer = Gem::Security::Signer.new nil, nil
89
+
90
+ assert_equal 'child@example', signer.extract_name(CHILD_CERT)
91
+ end
92
+
87
93
  def test_load_cert_chain
88
94
  Gem::Security.trust_dir.trust_cert PUBLIC_CERT
89
95