rubygems-update 0.8.10 → 0.8.11

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 (51) hide show
  1. data/ChangeLog +66 -0
  2. data/README +17 -3
  3. data/Rakefile +29 -11
  4. data/bin/gem_mirror +67 -0
  5. data/examples/application/an-app.gemspec +2 -0
  6. data/lib/rubygems.rb +18 -3
  7. data/lib/rubygems/builder.rb +14 -1
  8. data/lib/rubygems/cmd_manager.rb +2 -0
  9. data/lib/rubygems/command.rb +26 -2
  10. data/lib/rubygems/custom_require.rb +30 -21
  11. data/lib/rubygems/format.rb +4 -4
  12. data/lib/rubygems/gem_commands.rb +161 -9
  13. data/lib/rubygems/gem_openssl.rb +34 -0
  14. data/lib/rubygems/gem_runner.rb +5 -1
  15. data/lib/rubygems/installer.rb +117 -38
  16. data/lib/rubygems/package.rb +135 -25
  17. data/lib/rubygems/remote_installer.rb +59 -29
  18. data/lib/rubygems/rubygems_version.rb +1 -1
  19. data/lib/rubygems/security.rb +478 -0
  20. data/lib/rubygems/specification.rb +48 -28
  21. data/post-install.rb +2 -1
  22. data/scripts/gemdoc.rb +2 -2
  23. data/scripts/specdoc.rb +25 -24
  24. data/scripts/upload_gemdoc.rb +134 -0
  25. data/setup.rb +1 -1
  26. data/test/data/a-0.0.1.gem +0 -0
  27. data/test/data/a-0.0.2.gem +0 -0
  28. data/test/data/b-0.0.2.gem +0 -0
  29. data/test/data/c-1.2.gem +0 -0
  30. data/test/data/gemhome/cache/a-0.0.1.gem +0 -0
  31. data/test/data/gemhome/cache/a-0.0.2.gem +0 -0
  32. data/test/data/gemhome/cache/b-0.0.2.gem +0 -0
  33. data/test/data/gemhome/cache/c-1.2.gem +0 -0
  34. data/test/data/gemhome/specifications/a-0.0.1.gemspec +1 -1
  35. data/test/data/gemhome/specifications/a-0.0.2.gemspec +1 -1
  36. data/test/data/gemhome/specifications/b-0.0.2.gemspec +1 -1
  37. data/test/data/gemhome/specifications/c-1.2.gemspec +1 -1
  38. data/test/data/one/one-0.0.1.gem +0 -0
  39. data/test/fake_certlib/openssl.rb +1 -0
  40. data/test/functional.rb +49 -14
  41. data/test/gemutilities.rb +69 -5
  42. data/test/test_cached_fetcher.rb +5 -7
  43. data/test/test_file_list.rb +96 -0
  44. data/test/test_gempaths.rb +36 -34
  45. data/test/test_installer.rb +214 -0
  46. data/test/test_local_cache.rb +45 -102
  47. data/test/test_parse_commands.rb +3 -1
  48. data/test/test_remote_installer.rb +24 -5
  49. data/test/test_specific_extras.rb +40 -0
  50. data/test/test_specification.rb +106 -16
  51. metadata +14 -3
@@ -0,0 +1,214 @@
1
+ $TESTING = true
2
+ require 'fileutils'
3
+ require 'tmpdir'
4
+ require 'test/unit'
5
+ require 'rubygems'
6
+ require 'test/gemutilities'
7
+ Gem::manage_gems
8
+
9
+ class Gem::Installer
10
+ attr_accessor :options, :directory
11
+ end
12
+
13
+ class TestInstaller < RubyGemTestCase
14
+
15
+ def setup
16
+ super
17
+ @spec = quick_gem("a")
18
+ @installer = Gem::Installer.new false, {}
19
+ end
20
+
21
+ def util_gem_dir(version = '0.0.2')
22
+ File.join "gems", "a-#{version}" # HACK
23
+ end
24
+
25
+ def util_gem_bindir(version = '0.0.2')
26
+ File.join util_gem_dir(version), "bin"
27
+ end
28
+
29
+ def util_inst_bindir
30
+ File.join @gemhome, "bin"
31
+ end
32
+
33
+ def util_make_exec(version = '0.0.2')
34
+ @spec.executables = ["my_exec"]
35
+ write_file(File.join(util_gem_bindir(version), "my_exec")) do |f|
36
+ f.puts "#!/bin/ruby"
37
+ end
38
+ end
39
+
40
+ def test_generate_bin_scripts
41
+ @installer.options[:wrappers] = true
42
+ util_make_exec
43
+
44
+ @installer.generate_bin @spec, @gemhome
45
+ assert_equal true, File.directory?(util_inst_bindir)
46
+ installed_exec = File.join(util_inst_bindir, "my_exec")
47
+ assert_equal true, File.exist?(installed_exec)
48
+ assert_equal 0100755, File.stat(installed_exec).mode
49
+
50
+ wrapper = File.read installed_exec
51
+ assert_match(/generated by RubyGems/, wrapper)
52
+ end
53
+
54
+ def test_generate_bin_scripts_no_execs
55
+ @installer.options[:wrappers] = true
56
+ @installer.generate_bin @spec, @gemhome
57
+ assert_equal false, File.exist?(util_inst_bindir)
58
+ end
59
+
60
+ def test_generate_bin_scripts_no_perms
61
+ @installer.options[:wrappers] = true
62
+ util_make_exec
63
+
64
+ Dir.mkdir util_inst_bindir
65
+ File.chmod 0000, util_inst_bindir
66
+
67
+ assert_raises Gem::FilePermissionError do
68
+ @installer.generate_bin @spec, @gemhome
69
+ end
70
+
71
+ ensure
72
+ File.chmod 0700, util_inst_bindir unless $DEBUG
73
+ end
74
+
75
+ def test_generate_bin_symlinks
76
+ @installer.options[:wrappers] = false
77
+ util_make_exec
78
+ @installer.directory = util_gem_dir
79
+
80
+ @installer.generate_bin @spec, @gemhome
81
+ assert_equal true, File.directory?(util_inst_bindir)
82
+ installed_exec = File.join(util_inst_bindir, "my_exec")
83
+ assert_equal true, File.symlink?(installed_exec)
84
+ assert_equal(File.join(util_gem_dir, "bin", "my_exec"),
85
+ File.readlink(installed_exec))
86
+ end
87
+
88
+ def test_generate_bin_symlinks_no_execs
89
+ @installer.options[:wrappers] = false
90
+ @installer.generate_bin @spec, @gemhome
91
+ assert_equal false, File.exist?(util_inst_bindir)
92
+ end
93
+
94
+ def test_generate_bin_symlinks_no_perms
95
+ @installer.options[:wrappers] = false
96
+ util_make_exec
97
+ @installer.directory = util_gem_dir
98
+
99
+ Dir.mkdir util_inst_bindir
100
+ File.chmod 0000, util_inst_bindir
101
+
102
+ assert_raises Gem::FilePermissionError do
103
+ @installer.generate_bin @spec, @gemhome
104
+ end
105
+
106
+ ensure
107
+ File.chmod 0700, util_inst_bindir unless $DEBUG
108
+ end
109
+
110
+ def test_generate_bin_symlinks_update_newer
111
+ @installer.options[:wrappers] = false
112
+ util_make_exec
113
+ @installer.directory = File.join @gemhome, util_gem_dir
114
+
115
+ @installer.generate_bin @spec, @gemhome
116
+ installed_exec = File.join(util_inst_bindir, "my_exec")
117
+ assert_equal(File.join(@gemhome, util_gem_dir, "bin", "my_exec"),
118
+ File.readlink(installed_exec))
119
+
120
+ @spec = Gem::Specification.new do |s|
121
+ s.files = ['lib/code.rb']
122
+ s.name = "a"
123
+ s.version = "0.0.3"
124
+ s.summary = "summary"
125
+ s.description = "desc"
126
+ s.require_path = 'lib'
127
+ end
128
+
129
+ util_make_exec '0.0.3'
130
+ @installer.directory = File.join @gemhome, util_gem_dir('0.0.3')
131
+ @installer.generate_bin @spec, @gemhome
132
+ installed_exec = File.join(util_inst_bindir, "my_exec")
133
+ assert_equal(File.join(@gemhome, util_gem_dir('0.0.3'), "bin", "my_exec"),
134
+ File.readlink(installed_exec),
135
+ "Ensure symlink moved to latest version")
136
+ end
137
+
138
+ def test_generate_bin_symlinks_update_older
139
+ @installer.options[:wrappers] = false
140
+ util_make_exec
141
+ @installer.directory = File.join @gemhome, util_gem_dir
142
+
143
+ @installer.generate_bin @spec, @gemhome
144
+ installed_exec = File.join(util_inst_bindir, "my_exec")
145
+ assert_equal(File.join(@gemhome, util_gem_dir, "bin", "my_exec"),
146
+ File.readlink(installed_exec))
147
+
148
+ @spec = Gem::Specification.new do |s|
149
+ s.files = ['lib/code.rb']
150
+ s.name = "a"
151
+ s.version = "0.0.1"
152
+ s.summary = "summary"
153
+ s.description = "desc"
154
+ s.require_path = 'lib'
155
+ end
156
+
157
+ util_make_exec '0.0.1'
158
+ @installer.directory = File.join @gemhome, util_gem_dir('0.0.1')
159
+ @installer.generate_bin @spec, @gemhome
160
+ installed_exec = File.join(util_inst_bindir, "my_exec")
161
+ assert_equal(File.join(@gemhome, util_gem_dir('0.0.2'), "bin", "my_exec"),
162
+ File.readlink(installed_exec),
163
+ "Ensure symlink not moved")
164
+ end
165
+
166
+ def test_generate_bin_symlinks_update_remove_wrapper
167
+ @installer.options[:wrappers] = true
168
+ util_make_exec
169
+ @installer.directory = util_gem_dir
170
+
171
+ @installer.generate_bin @spec, @gemhome
172
+ installed_exec = File.join(util_inst_bindir, "my_exec")
173
+ assert_equal true, File.exists?(installed_exec)
174
+
175
+ @spec = Gem::Specification.new do |s|
176
+ s.files = ['lib/code.rb']
177
+ s.name = "a"
178
+ s.version = "0.0.3"
179
+ s.summary = "summary"
180
+ s.description = "desc"
181
+ s.require_path = 'lib'
182
+ end
183
+
184
+ @installer.options[:wrappers] = false
185
+ util_make_exec '0.0.3'
186
+ @installer.directory = util_gem_dir '0.0.3'
187
+ @installer.generate_bin @spec, @gemhome
188
+ installed_exec = File.join(util_inst_bindir, "my_exec")
189
+ assert_equal(File.join(util_gem_dir('0.0.3'), "bin", "my_exec"),
190
+ File.readlink(installed_exec),
191
+ "Ensure symlink moved to latest version")
192
+ end
193
+
194
+ def test_generate_bin_symlinks_win32
195
+ old_arch = Config::CONFIG["arch"]
196
+ Config::CONFIG["arch"] = "win32"
197
+ @installer.options[:wrappers] = false
198
+ util_make_exec
199
+ @installer.directory = util_gem_dir
200
+
201
+ @installer.generate_bin @spec, @gemhome
202
+ assert_equal true, File.directory?(util_inst_bindir)
203
+ installed_exec = File.join(util_inst_bindir, "my_exec")
204
+ assert_equal true, File.exist?(installed_exec)
205
+ assert_equal 0100755, File.stat(installed_exec).mode
206
+
207
+ wrapper = File.read installed_exec
208
+ assert_match(/generated by RubyGems/, wrapper)
209
+ ensure
210
+ Config::CONFIG["arch"] = old_arch
211
+ end
212
+
213
+ end
214
+
@@ -1,157 +1,100 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'test/unit'
4
- require 'rubygems/remote_installer'
5
3
  require 'test/gemutilities'
4
+ require 'rubygems/remote_installer'
5
+ require 'test/unit'
6
6
 
7
- class TestLocalCache < Test::Unit::TestCase
8
- GEMHOME = "test/temp/gemhome"
9
- GEMCACHE = File.join(GEMHOME, "source_cache")
10
- USRCACHE = "test/temp/.gem/user_cache"
7
+ class TestLocalCache < RubyGemTestCase
11
8
 
12
9
  def setup
13
- ENV['GEMCACHE'] = USRCACHE
14
- Gem.use_paths("test/temp/gemhome")
15
- end
16
-
17
- def teardown
18
- FileUtils.chmod(0644, GEMCACHE) if File.exist? GEMCACHE
19
- FileUtils.chmod(0644, USRCACHE) if File.exist? USRCACHE
20
- ENV['GEMCACHE'] = nil
21
- Gem.clear_paths
10
+ super
11
+ @lc = Gem::LocalSourceInfoCache.new
12
+ prep_cache_files(@lc)
22
13
  end
23
14
 
24
15
  def test_file_names
25
- lc = Gem::LocalSourceInfoCache.new
26
- assert_equal File.join(Gem.dir, "source_cache"), lc.system_cache_file
27
- assert_equal USRCACHE, lc.user_cache_file
16
+ assert_equal File.join(Gem.dir, "source_cache"), @lc.system_cache_file
17
+ assert_equal @usrcache, @lc.user_cache_file
28
18
  end
29
19
 
30
20
  def test_gem_cache_env_variable
31
- lc = Gem::LocalSourceInfoCache.new
32
- assert_equal USRCACHE, lc.user_cache_file
21
+ assert_equal @usrcache, @lc.user_cache_file
33
22
  end
34
23
 
35
24
  def test_use_system_by_default
36
- lc = Gem::LocalSourceInfoCache.new
37
- prep_cache_files(lc)
38
- assert_equal "sys", lc.cache_data['key']
25
+ assert_equal "sys", @lc.cache_data['key']
39
26
  end
40
27
 
41
28
  def test_use_user_cache_when_sys_no_writable
42
- lc = Gem::LocalSourceInfoCache.new
43
- prep_cache_files(lc)
44
- FileUtils.chmod 0544, lc.system_cache_file
29
+ FileUtils.chmod 0544, @lc.system_cache_file
45
30
 
46
- lc = Gem::LocalSourceInfoCache.new
47
- assert_equal "usr", lc.cache_data['key']
31
+ @lc = Gem::LocalSourceInfoCache.new
32
+ assert_equal "usr", @lc.cache_data['key']
48
33
  end
49
34
 
50
35
  def test_write_system_cache
51
- lc = Gem::LocalSourceInfoCache.new
52
- prep_cache_files(lc)
53
-
54
- lc.cache_data['key'] = 'new'
55
- lc.write_cache
36
+ @lc.cache_data['key'] = 'new'
37
+ @lc.write_cache
56
38
 
57
- assert_equal [['key', 'new']].sort, read_cache(lc.system_cache_file).to_a.sort
58
- assert_equal [['key', 'usr']].sort, read_cache(lc.user_cache_file).to_a.sort
39
+ assert_equal [['key', 'new']].sort, read_cache(@lc.system_cache_file).to_a.sort
40
+ assert_equal [['key', 'usr']].sort, read_cache(@lc.user_cache_file).to_a.sort
59
41
  end
60
42
 
61
43
  def test_flush
62
- lc = Gem::LocalSourceInfoCache.new
63
- prep_cache_files(lc)
44
+ @lc.cache_data['key'] = 'new'
45
+ @lc.update
46
+ @lc.flush
64
47
 
65
- lc.cache_data['key'] = 'new'
66
- lc.update
67
- lc.flush
68
-
69
- assert_equal [['key','new']].sort, read_cache(lc.system_cache_file).to_a.sort
48
+ assert_equal [['key','new']].sort, read_cache(@lc.system_cache_file).to_a.sort
70
49
  end
71
50
 
72
51
  def test_write_user_cache
73
- lc = Gem::LocalSourceInfoCache.new
74
- prep_cache_files(lc)
75
- FileUtils.chmod 0544, lc.system_cache_file
76
- lc.cache_data['key'] = 'new'
77
- lc.write_cache
78
-
79
- assert_equal [['key', 'sys']].sort, read_cache(lc.system_cache_file).to_a.sort
80
- assert_equal [['key', 'new']].sort, read_cache(lc.user_cache_file).to_a.sort
52
+ FileUtils.chmod 0544, @lc.system_cache_file
53
+ @lc.cache_data['key'] = 'new'
54
+ @lc.write_cache
55
+
56
+ assert_equal [['key', 'sys']].sort, read_cache(@lc.system_cache_file).to_a.sort
57
+ assert_equal [['key', 'new']].sort, read_cache(@lc.user_cache_file).to_a.sort
81
58
  end
82
59
 
83
60
  def test_write_user_cache_from_scratch
84
- lc = Gem::LocalSourceInfoCache.new
85
- prep_cache_files(lc)
86
- FileUtils.rm_rf lc.user_cache_file
87
- FileUtils.chmod 0544, lc.system_cache_file
61
+ FileUtils.rm_rf @lc.user_cache_file
62
+ FileUtils.chmod 0544, @lc.system_cache_file
88
63
 
89
- lc.cache_data['key'] = 'new'
90
- lc.write_cache
64
+ @lc.cache_data['key'] = 'new'
65
+ @lc.write_cache
91
66
 
92
- assert_equal [['key', 'sys']].sort, read_cache(lc.system_cache_file).to_a.sort
93
- assert_equal [['key', 'new']].sort, read_cache(lc.user_cache_file).to_a.sort
67
+ assert_equal [['key', 'sys']].sort, read_cache(@lc.system_cache_file).to_a.sort
68
+ assert_equal [['key', 'new']].sort, read_cache(@lc.user_cache_file).to_a.sort
94
69
  end
95
70
 
96
71
  def test_write_user_directory_and_cache_from_scratch
97
- lc = Gem::LocalSourceInfoCache.new
98
- prep_cache_files(lc)
99
- FileUtils.rm_rf File.dirname(lc.user_cache_file)
100
- FileUtils.chmod 0544, lc.system_cache_file
72
+ FileUtils.rm_rf File.dirname(@lc.user_cache_file)
73
+ FileUtils.chmod 0544, @lc.system_cache_file
101
74
 
102
- lc.cache_data['key'] = 'new'
103
- lc.write_cache
75
+ @lc.cache_data['key'] = 'new'
76
+ @lc.write_cache
104
77
 
105
- assert_equal [['key','sys']].sort, read_cache(lc.system_cache_file).to_a.sort
106
- assert_equal [['key','new']].sort, read_cache(lc.user_cache_file).to_a.sort
78
+ assert_equal [['key','sys']].sort, read_cache(@lc.system_cache_file).to_a.sort
79
+ assert_equal [['key','new']].sort, read_cache(@lc.user_cache_file).to_a.sort
107
80
  end
108
81
 
109
82
  def test_read_system_cache
110
- lc = Gem::LocalSourceInfoCache.new
111
- prep_cache_files(lc)
112
-
113
- assert_equal [['key','sys']].sort, lc.cache_data.to_a.sort
83
+ assert_equal [['key','sys']].sort, @lc.cache_data.to_a.sort
114
84
  end
115
85
 
116
86
  def test_read_user_cache
117
- lc = Gem::LocalSourceInfoCache.new
118
- prep_cache_files(lc)
119
- FileUtils.chmod 0544, lc.system_cache_file
87
+ FileUtils.chmod 0544, @lc.system_cache_file
120
88
 
121
- assert_equal [['key','usr']].sort, lc.cache_data.to_a.sort
89
+ assert_equal [['key','usr']].sort, @lc.cache_data.to_a.sort
122
90
  end
123
91
 
124
92
  def test_no_writable_cache
125
- lc = Gem::LocalSourceInfoCache.new
126
- prep_cache_files(lc)
127
- FileUtils.chmod 0544, lc.system_cache_file
128
- FileUtils.chmod 0544, lc.user_cache_file
93
+ FileUtils.chmod 0544, @lc.system_cache_file
94
+ FileUtils.chmod 0544, @lc.user_cache_file
129
95
  assert_raise(RuntimeError) {
130
- lc.cache_data
96
+ @lc.cache_data
131
97
  }
132
98
  end
133
-
134
- private
135
-
136
- def prep_cache_files(lc)
137
- [ [lc.system_cache_file, 'sys'],
138
- [lc.user_cache_file, 'usr'],
139
- ].each do |fn, data|
140
- FileUtils.mkdir_p File.dirname(fn)
141
- open(fn, "w") { |f| f.puts(Marshal.dump({'key' => data})) }
142
- end
143
- end
144
-
145
- def age_file(file_to_age, ref_file)
146
- while File.stat(file_to_age).mtime <= File.stat(ref_file).mtime
147
- sleep 0.2
148
- FileUtils.touch(file_to_age)
149
- end
150
- end
151
-
152
- def read_cache(fn)
153
- open(fn) { |f| Marshal.load(f) }
154
- end
155
-
156
99
  end
157
100
 
@@ -35,17 +35,19 @@ class TestParseCommands < Test::Unit::TestCase
35
35
  assert_equal true, check_options[:generate_rdoc]
36
36
  assert_equal false, check_options[:force]
37
37
  assert_equal :both, check_options[:domain]
38
+ assert_equal true, check_options[:wrappers]
38
39
  assert_equal "> 0", check_options[:version]
39
40
  assert_equal Gem.dir, check_options[:install_dir]
40
41
 
41
42
  #check settings
42
43
  check_options = nil
43
44
  @cmd_manager.process_args(
44
- "install --force --test --local --rdoc --install-dir . --version 3.0")
45
+ "install --force --test --local --rdoc --install-dir . --version 3.0 --no-wrapper")
45
46
  assert_equal true, check_options[:test]
46
47
  assert_equal true, check_options[:generate_rdoc]
47
48
  assert_equal true, check_options[:force]
48
49
  assert_equal :local, check_options[:domain]
50
+ assert_equal false, check_options[:wrappers]
49
51
  assert_equal '3.0', check_options[:version]
50
52
  assert_equal '.', check_options[:install_dir]
51
53
 
@@ -17,14 +17,24 @@ class MockFetcher
17
17
  def source_index
18
18
  if @uri =~ /non.existent.url/
19
19
  fail Gem::RemoteSourceException,
20
- "Error fetching remote gem cache: Mock Socket Exception"
20
+ "Error fetching remote gem cache: Mock Socket Exception"
21
21
  end
22
22
  result = {
23
23
  'foo-1.2.3' => Gem::Specification.new do |s|
24
- s.name = 'foo'
25
- s.version = "1.2.3"
26
- s.summary = "This is a cool package"
27
- end
24
+ s.name = 'foo'
25
+ s.version = "1.2.3"
26
+ s.summary = "This is a cool package"
27
+ end,
28
+ 'foo-tools-2.0.0' => Gem::Specification.new do |s|
29
+ s.name = 'foo-tools'
30
+ s.version = "2.0.0"
31
+ s.summary = "This is an even cooler package"
32
+ end,
33
+ 'foo-2-2.0.0' => Gem::Specification.new do |s|
34
+ s.name = 'foo-2'
35
+ s.version = "2.0.0"
36
+ s.summary = "This is the coolest package evar!~!"
37
+ end,
28
38
  }
29
39
  result
30
40
  end
@@ -72,6 +82,15 @@ class TestRemoteInstaller < Test::Unit::TestCase
72
82
  info = @installer.source_index_hash
73
83
  }
74
84
  end
85
+
86
+ def test_find_gem_to_install
87
+ version = Gem::Version::Requirement.new "> 0.0.0"
88
+ gems = @installer.find_gem_to_install("foo", version,
89
+ @installer.source_index_hash)
90
+
91
+ assert_equal "foo-1.2.3", gems.first.full_name
92
+ end
93
+
75
94
  end
76
95
 
77
96
  # This test suite has a number of TODOs in the test cases. The