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

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.

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