rubygems-update 2.0.3 → 2.0.4

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 (47) 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 +42 -1
  5. data/Manifest.txt +0 -2
  6. data/Rakefile +0 -1
  7. data/lib/rubygems.rb +7 -2
  8. data/lib/rubygems/commands/help_command.rb +9 -1
  9. data/lib/rubygems/commands/list_command.rb +4 -6
  10. data/lib/rubygems/commands/owner_command.rb +1 -1
  11. data/lib/rubygems/commands/pristine_command.rb +5 -4
  12. data/lib/rubygems/commands/push_command.rb +2 -1
  13. data/lib/rubygems/commands/search_command.rb +17 -3
  14. data/lib/rubygems/commands/setup_command.rb +35 -23
  15. data/lib/rubygems/commands/specification_command.rb +1 -1
  16. data/lib/rubygems/commands/update_command.rb +1 -1
  17. data/lib/rubygems/core_ext/kernel_require.rb +8 -0
  18. data/lib/rubygems/defaults.rb +3 -1
  19. data/lib/rubygems/dependency_installer.rb +0 -1
  20. data/lib/rubygems/dependency_resolver.rb +1 -1
  21. data/lib/rubygems/errors.rb +2 -2
  22. data/lib/rubygems/ext/builder.rb +8 -3
  23. data/lib/rubygems/ext/ext_conf_builder.rb +1 -0
  24. data/lib/rubygems/gemcutter_utilities.rb +14 -4
  25. data/lib/rubygems/installer.rb +9 -2
  26. data/lib/rubygems/package.rb +0 -1
  27. data/lib/rubygems/platform.rb +2 -0
  28. data/lib/rubygems/psych_tree.rb +4 -0
  29. data/lib/rubygems/specification.rb +24 -26
  30. data/lib/rubygems/test_case.rb +58 -0
  31. data/test/rubygems/test_gem.rb +4 -2
  32. data/test/rubygems/test_gem_commands_help_command.rb +5 -0
  33. data/test/rubygems/test_gem_commands_owner_command.rb +12 -0
  34. data/test/rubygems/test_gem_commands_push_command.rb +16 -0
  35. data/test/rubygems/test_gem_commands_setup_command.rb +52 -0
  36. data/test/rubygems/test_gem_ext_cmake_builder.rb +4 -4
  37. data/test/rubygems/test_gem_ext_configure_builder.rb +4 -4
  38. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +8 -13
  39. data/test/rubygems/test_gem_gemcutter_utilities.rb +23 -0
  40. data/test/rubygems/test_gem_installer.rb +15 -0
  41. data/test/rubygems/test_gem_package.rb +3 -1
  42. data/test/rubygems/test_gem_spec_fetcher.rb +3 -1
  43. data/test/rubygems/test_gem_specification.rb +25 -1
  44. metadata +6 -23
  45. metadata.gz.sig +0 -0
  46. data/test/rubygems/insure_session.rb +0 -43
  47. data/test/rubygems/test_gem_commands_search_command.rb +0 -25
@@ -331,8 +331,9 @@ class Gem::Installer
331
331
  # specifications directory.
332
332
 
333
333
  def write_spec
334
- File.open(spec_file, "w") do |file|
334
+ open spec_file, 'w' do |file|
335
335
  file.puts spec.to_ruby_for_cache
336
+ file.fsync rescue nil # for filesystems without fsync(2)
336
337
  end
337
338
  end
338
339
 
@@ -773,7 +774,13 @@ EOF
773
774
  def write_build_info_file
774
775
  return if @build_args.empty?
775
776
 
776
- open spec.build_info_file, 'w' do |io|
777
+ build_info_dir = File.join gem_home, 'build_info'
778
+
779
+ FileUtils.mkdir_p build_info_dir
780
+
781
+ build_info_file = File.join build_info_dir, "#{spec.full_name}.info"
782
+
783
+ open build_info_file, 'w' do |io|
777
784
  @build_args.each do |arg|
778
785
  io.puts arg
779
786
  end
@@ -336,7 +336,6 @@ EOM
336
336
 
337
337
  open destination, 'wb', entry.header.mode do |out|
338
338
  out.write entry.read
339
- out.fsync rescue nil # for filesystems without fsync(2)
340
339
  end
341
340
 
342
341
  say destination if Gem.configuration.really_verbose
@@ -74,6 +74,7 @@ class Gem::Platform
74
74
  when /hpux(\d+)?/ then [ 'hpux', $1 ]
75
75
  when /^java$/, /^jruby$/ then [ 'java', nil ]
76
76
  when /^java([\d.]*)/ then [ 'java', $1 ]
77
+ when /^dalvik(\d+)?$/ then [ 'dalvik', $1 ]
77
78
  when /^dotnet$/ then [ 'dotnet', nil ]
78
79
  when /^dotnet([\d.]*)/ then [ 'dotnet', $1 ]
79
80
  when /linux/ then [ 'linux', $1 ]
@@ -155,6 +156,7 @@ class Gem::Platform
155
156
  when /^i686-darwin(\d)/ then ['x86', 'darwin', $1 ]
156
157
  when /^i\d86-linux/ then ['x86', 'linux', nil ]
157
158
  when 'java', 'jruby' then [nil, 'java', nil ]
159
+ when /^dalvik(\d+)?$/ then [nil, 'dalvik', $1 ]
158
160
  when /dotnet(\-(\d+\.\d+))?/ then ['universal','dotnet', $2 ]
159
161
  when /mswin32(\_(\d+))?/ then ['x86', 'mswin32', $2 ]
160
162
  when 'powerpc-darwin' then ['powerpc', 'darwin', nil ]
@@ -1,6 +1,10 @@
1
1
  module Gem
2
2
  if defined? ::Psych::Visitors
3
3
  class NoAliasYAMLTree < Psych::Visitors::YAMLTree
4
+ def self.create
5
+ new({})
6
+ end unless respond_to? :create
7
+
4
8
  def visit_String(str)
5
9
  return super unless str == '=' # or whatever you want
6
10
 
@@ -5,6 +5,17 @@
5
5
  # See LICENSE.txt for permissions.
6
6
  #++
7
7
 
8
+ require 'rubygems/version'
9
+ require 'rubygems/requirement'
10
+ require 'rubygems/platform'
11
+ require 'rubygems/deprecate'
12
+
13
+ # :stopdoc:
14
+ # date.rb can't be loaded for `make install` due to miniruby
15
+ # Date is needed for old gems that stored #date as Date instead of Time.
16
+ class Date; end
17
+ # :startdoc:
18
+
8
19
  ##
9
20
  # The Specification class contains the information for a Gem. Typically
10
21
  # defined in a .gemspec file or a Rakefile, and looks like this:
@@ -20,32 +31,19 @@
20
31
  # s.homepage = 'https://rubygems.org/gems/example'
21
32
  # end
22
33
  #
23
- # Starting in RubyGems 1.9.0, a Specification can hold arbitrary
24
- # metadata. This metadata is accessed via Specification#metadata
25
- # and has the following restrictions:
34
+ # Starting in RubyGems 1.9.0, a Specification can hold arbitrary
35
+ # metadata. This metadata is accessed via Specification#metadata
36
+ # and has the following restrictions:
26
37
  #
27
- # * Must be a Hash object
28
- # * All keys and values must be Strings
29
- # * Keys can be a maximum of 128 bytes and values can be a
30
- # maximum of 1024 bytes
31
- # * All strings must be UTF8, no binary data is allowed
38
+ # * Must be a Hash object
39
+ # * All keys and values must be Strings
40
+ # * Keys can be a maximum of 128 bytes and values can be a
41
+ # maximum of 1024 bytes
42
+ # * All strings must be UTF8, no binary data is allowed
32
43
  #
33
- # For example, to add metadata for the location of a bugtracker:
44
+ # For example, to add metadata for the location of a bugtracker:
34
45
  #
35
46
  # s.metadata = { "bugtracker" => "http://somewhere.com/blah" }
36
- #
37
-
38
-
39
- require 'rubygems/version'
40
- require 'rubygems/requirement'
41
- require 'rubygems/platform'
42
- require 'rubygems/deprecate'
43
-
44
- # :stopdoc:
45
- # date.rb can't be loaded for `make install` due to miniruby
46
- # Date is needed for old gems that stored #date as Date instead of Time.
47
- class Date; end
48
- # :startdoc:
49
47
 
50
48
  class Gem::Specification
51
49
 
@@ -918,7 +916,7 @@ class Gem::Specification
918
916
  result = Hash.new { |h,k| h[k] = {} }
919
917
  native = {}
920
918
 
921
- Gem::Specification._all.reverse_each do |spec|
919
+ Gem::Specification.reverse_each do |spec|
922
920
  next if spec.version.prerelease? unless prerelease
923
921
 
924
922
  native[spec.name] = spec.version if spec.platform == Gem::Platform::RUBY
@@ -995,7 +993,7 @@ class Gem::Specification
995
993
  # TODO: maybe we should switch to rubygems' version service?
996
994
  fetcher = Gem::SpecFetcher.fetcher
997
995
 
998
- latest_specs.each do |local|
996
+ latest_specs(true).each do |local|
999
997
  dependency = Gem::Dependency.new local.name, ">= #{local.version}"
1000
998
  remotes, _ = fetcher.search_for_dependency dependency
1001
999
  remotes = remotes.map { |n, _| n.version }
@@ -1236,7 +1234,7 @@ class Gem::Specification
1236
1234
 
1237
1235
  unless dependency.respond_to?(:name) &&
1238
1236
  dependency.respond_to?(:version_requirements)
1239
- dependency = Gem::Dependency.new(dependency, requirements, type)
1237
+ dependency = Gem::Dependency.new(dependency.to_s, requirements, type)
1240
1238
  end
1241
1239
 
1242
1240
  dependencies << dependency
@@ -2270,7 +2268,7 @@ class Gem::Specification
2270
2268
  require 'rubygems/psych_tree'
2271
2269
  end
2272
2270
 
2273
- builder = Gem::NoAliasYAMLTree.new({})
2271
+ builder = Gem::NoAliasYAMLTree.create
2274
2272
  builder << self
2275
2273
  ast = builder.tree
2276
2274
 
@@ -28,6 +28,7 @@ require 'rubygems/test_utilities'
28
28
  require 'pp'
29
29
  require 'zlib'
30
30
  require 'pathname'
31
+ require 'shellwords'
31
32
  Gem.load_yaml
32
33
 
33
34
  require 'rubygems/mock_gem_ui'
@@ -89,6 +90,63 @@ class Gem::TestCase < MiniTest::Unit::TestCase
89
90
  refute File.exist?(path), msg
90
91
  end
91
92
 
93
+ def scan_make_command_lines(output)
94
+ output.scan(/^#{Regexp.escape make_command}(?:[[:blank:]].*)?$/)
95
+ end
96
+
97
+ def parse_make_command_line(line)
98
+ command, *args = line.shellsplit
99
+
100
+ targets = []
101
+ macros = {}
102
+
103
+ args.each do |arg|
104
+ case arg
105
+ when /\A(\w+)=/
106
+ macros[$1] = $'
107
+ else
108
+ targets << arg
109
+ end
110
+ end
111
+
112
+ targets << '' if targets.empty?
113
+
114
+ {
115
+ :command => command,
116
+ :targets => targets,
117
+ :macros => macros,
118
+ }
119
+ end
120
+
121
+ def assert_contains_make_command(target, output, msg = nil)
122
+ if output.match(/\n/)
123
+ msg = message(msg) {
124
+ 'Expected output containing make command "%s": %s' % [
125
+ ('%s %s' % [make_command, target]).rstrip,
126
+ output.inspect
127
+ ]
128
+ }
129
+ else
130
+ msg = message(msg) {
131
+ 'Expected make command "%s": %s' % [
132
+ ('%s %s' % [make_command, target]).rstrip,
133
+ output.inspect
134
+ ]
135
+ }
136
+ end
137
+
138
+ assert scan_make_command_lines(output).any? { |line|
139
+ make = parse_make_command_line(line)
140
+
141
+ if make[:targets].include?(target)
142
+ yield make, line if block_given?
143
+ true
144
+ else
145
+ false
146
+ end
147
+ }, msg
148
+ end
149
+
92
150
  include Gem::DefaultUserInteraction
93
151
 
94
152
  undef_method :default_test if instance_methods.include? 'default_test' or
@@ -1198,8 +1198,10 @@ class TestGem < Gem::TestCase
1198
1198
  end
1199
1199
 
1200
1200
  def test_self_user_dir
1201
- assert_equal File.join(@userhome, '.gem', Gem.ruby_engine,
1202
- Gem::ConfigMap[:ruby_version]), Gem.user_dir
1201
+ parts = [@userhome, '.gem', Gem.ruby_engine]
1202
+ parts << Gem::ConfigMap[:ruby_version] unless Gem::ConfigMap[:ruby_version].empty?
1203
+
1204
+ assert_equal File.join(parts), Gem.user_dir
1203
1205
  end
1204
1206
 
1205
1207
  def test_self_user_home
@@ -10,6 +10,9 @@ class TestGemCommandsHelpCommand < Gem::TestCase
10
10
  super
11
11
 
12
12
  @cmd = Gem::Commands::HelpCommand.new
13
+
14
+ load File.expand_path('../rubygems_plugin.rb', __FILE__) unless
15
+ Gem::Commands.const_defined? :InterruptCommand
13
16
  end
14
17
 
15
18
  def test_gem_help_bad
@@ -34,6 +37,8 @@ class TestGemCommandsHelpCommand < Gem::TestCase
34
37
  assert_match(/\s+#{cmd}\s+\S+/, out)
35
38
  end
36
39
  assert_equal '', err
40
+
41
+ refute_match 'No command found for ', out
37
42
  end
38
43
  end
39
44
 
@@ -140,4 +140,16 @@ EOF
140
140
 
141
141
  assert_equal '701229f217cdf23b1344c7b4b54ca97', @fetcher.last_request['Authorization']
142
142
  end
143
+
144
+ def test_remove_owners_missing
145
+ response = 'Owner could not be found.'
146
+ @fetcher.data["#{Gem.host}/api/v1/gems/freewill/owners"] = [response, 404, 'Not Found']
147
+
148
+ use_ui @ui do
149
+ @cmd.remove_owners("freewill", ["missing@example"])
150
+ end
151
+
152
+ assert_equal "Removing missing@example: #{response}\n", @ui.output
153
+ end
154
+
143
155
  end
@@ -61,6 +61,22 @@ class TestGemCommandsPushCommand < Gem::TestCase
61
61
  assert_match @response, @ui.output
62
62
  end
63
63
 
64
+ def test_execute
65
+ open 'example', 'w' do |io| io.write 'hello' end
66
+
67
+ @response = "Successfully registered gem: freewill (1.0.0)"
68
+ @fetcher.data["#{Gem.host}/api/v1/gems"] = [@response, 200, 'OK']
69
+
70
+ @cmd.options[:args] = %w[example]
71
+
72
+ @cmd.execute
73
+
74
+ assert_equal Net::HTTP::Post, @fetcher.last_request.class
75
+ assert_equal 'hello', @fetcher.last_request.body
76
+ assert_equal "application/octet-stream",
77
+ @fetcher.last_request["Content-Type"]
78
+ end
79
+
64
80
  def test_execute_host
65
81
  host = 'https://other.example'
66
82
 
@@ -1,3 +1,5 @@
1
+ # coding: UTF-8
2
+
1
3
  require 'rubygems/test_case'
2
4
  require 'rubygems/commands/setup_command'
3
5
 
@@ -73,5 +75,55 @@ class TestGemCommandsSetupCommand < Gem::TestCase
73
75
  assert_path_exists os_defaults_rb
74
76
  end
75
77
 
78
+ def test_show_release_notes
79
+ @default_external = nil
80
+ capture_io do
81
+ @default_external, Encoding.default_external =
82
+ Encoding.default_external, Encoding::US_ASCII
83
+ end if Object.const_defined? :Encoding
84
+
85
+ @cmd.options[:previous_version] = Gem::Version.new '2.0.2'
86
+
87
+ open 'History.txt', 'w' do |io|
88
+ io.puts <<-History_txt
89
+ # coding: UTF-8
90
+
91
+ === #{Gem::VERSION} / 2013-03-26
92
+
93
+ * Bug fixes:
94
+ * Fixed release note display for LANG=C when installing rubygems
95
+ * π is tasty
96
+
97
+ === 2.0.2 / 2013-03-06
98
+
99
+ * Bug fixes:
100
+ * Other bugs fixed
101
+
102
+ === 2.0.1 / 2013-03-05
103
+
104
+ * Bug fixes:
105
+ * Yet more bugs fixed
106
+ History_txt
107
+ end
108
+
109
+ use_ui @ui do
110
+ @cmd.show_release_notes
111
+ end
112
+
113
+ expected = <<-EXPECTED
114
+ === 2.0.2 / 2013-03-06
115
+
116
+ * Bug fixes:
117
+ * Other bugs fixed
118
+
119
+ EXPECTED
120
+
121
+ assert_equal expected, @ui.output
122
+ ensure
123
+ capture_io do
124
+ Encoding.default_external = @default_external
125
+ end if @default_external
126
+ end
127
+
76
128
  end
77
129
 
@@ -38,8 +38,8 @@ install (FILES test.txt DESTINATION bin)
38
38
  assert_match \
39
39
  %r%^cmake \. -DCMAKE_INSTALL_PREFIX=#{Regexp.escape @dest_path}%, output
40
40
  assert_match %r%#{Regexp.escape @ext}%, output
41
- assert_match %r%^#{Regexp.escape make_command}$%, output
42
- assert_match %r%^#{Regexp.escape make_command} install$%, output
41
+ assert_contains_make_command '', output
42
+ assert_contains_make_command 'install', output
43
43
  assert_match %r%test\.txt%, output
44
44
  end
45
45
 
@@ -82,8 +82,8 @@ install (FILES test.txt DESTINATION bin)
82
82
 
83
83
  output = output.join "\n"
84
84
 
85
- assert_match %r%^#{make_command}%, output
86
- assert_match %r%^#{make_command} install%, output
85
+ assert_contains_make_command '', output
86
+ assert_contains_make_command 'install', output
87
87
  end
88
88
 
89
89
  end
@@ -30,9 +30,9 @@ class TestGemExtConfigureBuilder < Gem::TestCase
30
30
 
31
31
  assert_equal "sh ./configure --prefix=#{@dest_path}", output.shift
32
32
  assert_equal "", output.shift
33
- assert_equal make_command, output.shift
33
+ assert_contains_make_command '', output.shift
34
34
  assert_match(/^ok$/m, output.shift)
35
- assert_equal make_command + " install", output.shift
35
+ assert_contains_make_command 'install', output.shift
36
36
  assert_match(/^ok$/m, output.shift)
37
37
  end
38
38
 
@@ -76,8 +76,8 @@ class TestGemExtConfigureBuilder < Gem::TestCase
76
76
  Gem::Ext::ConfigureBuilder.build nil, nil, @dest_path, output
77
77
  end
78
78
 
79
- assert_equal make_command, output[0]
80
- assert_equal "#{make_command} install", output[2]
79
+ assert_contains_make_command '', output[0]
80
+ assert_contains_make_command 'install', output[2]
81
81
  end
82
82
 
83
83
  end
@@ -32,14 +32,9 @@ class TestGemExtExtConfBuilder < Gem::TestCase
32
32
 
33
33
  assert_match(/^#{Gem.ruby} extconf.rb/, output[0])
34
34
  assert_equal "creating Makefile\n", output[1]
35
- case RUBY_PLATFORM
36
- when /mswin/ then
37
- assert_equal "nmake", output[2]
38
- assert_equal "nmake install", output[4]
39
- else
40
- assert_equal "make", output[2]
41
- assert_equal "make install", output[4]
42
- end
35
+ assert_contains_make_command '', output[2]
36
+ assert_contains_make_command 'install', output[4]
37
+ assert_empty Dir.glob(File.join(@ext, 'siteconf*.rb'))
43
38
  end
44
39
 
45
40
  def test_class_build_rbconfig_make_prog
@@ -56,8 +51,8 @@ class TestGemExtExtConfBuilder < Gem::TestCase
56
51
  end
57
52
 
58
53
  assert_equal "creating Makefile\n", output[1]
59
- assert_equal make_command, output[2]
60
- assert_equal "#{make_command} install", output[4]
54
+ assert_contains_make_command '', output[2]
55
+ assert_contains_make_command 'install', output[4]
61
56
  ensure
62
57
  RbConfig::CONFIG['configure_args'] = configure_args
63
58
  end
@@ -80,7 +75,7 @@ class TestGemExtExtConfBuilder < Gem::TestCase
80
75
  end
81
76
 
82
77
  assert_equal "creating Makefile\n", output[1]
83
- assert_equal "anothermake", output[2]
78
+ assert_contains_make_command '', output[2]
84
79
  ensure
85
80
  RbConfig::CONFIG['configure_args'] = configure_args
86
81
  ENV['make'] = env_make
@@ -132,8 +127,8 @@ checking for main\(\) in .*?nonexistent/m, error.message)
132
127
  Gem::Ext::ExtConfBuilder.make @ext, output
133
128
  end
134
129
 
135
- assert_equal make_command, output[0]
136
- assert_equal "#{make_command} install", output[2]
130
+ assert_contains_make_command '', output[0]
131
+ assert_contains_make_command 'install', output[2]
137
132
  end
138
133
 
139
134
  def test_class_make_no_Makefile