rubygems-update 2.3.0 → 2.4.0

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 (71) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/CONTRIBUTING +14 -2
  5. data/History.txt +63 -0
  6. data/Rakefile +68 -91
  7. data/lib/rubygems.rb +5 -3
  8. data/lib/rubygems/command_manager.rb +1 -0
  9. data/lib/rubygems/commands/contents_command.rb +23 -2
  10. data/lib/rubygems/commands/install_command.rb +8 -0
  11. data/lib/rubygems/commands/open_command.rb +1 -8
  12. data/lib/rubygems/commands/uninstall_command.rb +9 -1
  13. data/lib/rubygems/commands/update_command.rb +1 -1
  14. data/lib/rubygems/core_ext/kernel_gem.rb +8 -1
  15. data/lib/rubygems/core_ext/kernel_require.rb +12 -22
  16. data/lib/rubygems/defaults.rb +17 -5
  17. data/lib/rubygems/dependency.rb +7 -1
  18. data/lib/rubygems/dependency_installer.rb +3 -0
  19. data/lib/rubygems/ext/ext_conf_builder.rb +13 -11
  20. data/lib/rubygems/install_update_options.rb +13 -0
  21. data/lib/rubygems/installer.rb +36 -20
  22. data/lib/rubygems/installer_test_case.rb +2 -0
  23. data/lib/rubygems/local_remote_options.rb +1 -1
  24. data/lib/rubygems/name_tuple.rb +1 -1
  25. data/lib/rubygems/request_set.rb +14 -3
  26. data/lib/rubygems/request_set/gem_dependency_api.rb +12 -0
  27. data/lib/rubygems/request_set/lockfile.rb +3 -1
  28. data/lib/rubygems/resolver.rb +15 -0
  29. data/lib/rubygems/resolver/best_set.rb +28 -0
  30. data/lib/rubygems/resolver/conflict.rb +45 -7
  31. data/lib/rubygems/resolver/git_specification.rb +24 -0
  32. data/lib/rubygems/resolver/lock_specification.rb +22 -0
  33. data/lib/rubygems/source.rb +2 -0
  34. data/lib/rubygems/source/git.rb +1 -1
  35. data/lib/rubygems/source/installed.rb +2 -1
  36. data/lib/rubygems/specification.rb +16 -15
  37. data/lib/rubygems/test_case.rb +9 -5
  38. data/test/rubygems/test_gem.rb +72 -2
  39. data/test/rubygems/test_gem_commands_contents_command.rb +46 -3
  40. data/test/rubygems/test_gem_commands_install_command.rb +32 -0
  41. data/test/rubygems/test_gem_commands_uninstall_command.rb +18 -0
  42. data/test/rubygems/test_gem_dependency.rb +23 -0
  43. data/test/rubygems/test_gem_dependency_installer.rb +17 -0
  44. data/test/rubygems/test_gem_ext_builder.rb +12 -1
  45. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +2 -2
  46. data/test/rubygems/test_gem_impossible_dependencies_error.rb +24 -8
  47. data/test/rubygems/test_gem_install_update_options.rb +16 -0
  48. data/test/rubygems/test_gem_installer.rb +52 -0
  49. data/test/rubygems/test_gem_local_remote_options.rb +13 -0
  50. data/test/rubygems/test_gem_package.rb +3 -1
  51. data/test/rubygems/test_gem_package_tar_header.rb +2 -0
  52. data/test/rubygems/test_gem_package_tar_reader.rb +11 -1
  53. data/test/rubygems/test_gem_package_tar_reader_entry.rb +17 -2
  54. data/test/rubygems/test_gem_package_tar_writer.rb +1 -0
  55. data/test/rubygems/test_gem_remote_fetcher.rb +24 -0
  56. data/test/rubygems/test_gem_request_set.rb +74 -4
  57. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +9 -1
  58. data/test/rubygems/test_gem_request_set_lockfile.rb +3 -1
  59. data/test/rubygems/test_gem_requirement.rb +8 -0
  60. data/test/rubygems/test_gem_resolver.rb +39 -0
  61. data/test/rubygems/test_gem_resolver_best_set.rb +57 -0
  62. data/test/rubygems/test_gem_resolver_conflict.rb +22 -10
  63. data/test/rubygems/test_gem_resolver_git_specification.rb +12 -0
  64. data/test/rubygems/test_gem_source_git.rb +6 -2
  65. data/test/rubygems/test_gem_source_installed.rb +8 -0
  66. data/test/rubygems/test_gem_source_lock.rb +2 -2
  67. data/test/rubygems/test_gem_source_vendor.rb +4 -0
  68. data/test/rubygems/test_kernel.rb +6 -0
  69. data/test/rubygems/test_require.rb +60 -0
  70. metadata +5 -5
  71. metadata.gz.sig +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c8accd7d64c97aa50aa3253effdfbf4e1e924420
4
- data.tar.gz: 5ca2df4735051087a01115efd57dc61559d95b83
3
+ metadata.gz: d252b22411a732dda23b05c5127a9748c60875e1
4
+ data.tar.gz: a97c4c16f3c1501d40dca2649eed2f84f4e81b02
5
5
  SHA512:
6
- metadata.gz: 3c0a14022146e9a2cc3fc93f7ae88d02d1637015ee8f55d50a8729b388b27945a7589e96a958f45f9a1dc343b339038dea611e38fa2bcb03753248f454261f0f
7
- data.tar.gz: 131314e79378e98650097f46024c2da655abf63dbffccc6ab6d932dce1e6e49ab690f2021e6f2cd53ba87276ca0ba17234881fe6fa6f1f27158036f4d656620b
6
+ metadata.gz: 0050121aa08473845edf6930f719201d3d9fca03c206c5d22f48c900c2e13d260f7c06d8853de17365357e6b2bef0d8360b71bd96df11cb592b7de12ec17cf8a
7
+ data.tar.gz: 538dcbc95cb5f02f70dcd6b8b3907f60cf1f813969ca84ccd38d331e41240eb86d4ac0ef471f78639ac90f01c1a5cf388816e876a130766eec5634dcd5aceebe
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -8,8 +8,10 @@ contributors to follow to reduce the time it takes to get changes merged in.
8
8
 
9
9
  1. New features should be coupled with tests.
10
10
 
11
- 2. Ensure that your code blends well with ours (eg, no trailing whitespace,
12
- match indentation and coding style).
11
+ 2. Ensure that your code blends well with ours:
12
+ * No trailing whitespace
13
+ * Match indentation (two spaces)
14
+ * Match coding style (`if`, `elsif`, `when` need trailing `then`)
13
15
 
14
16
  3. Don't modify the history file or version number.
15
17
 
@@ -18,3 +20,13 @@ contributors to follow to reduce the time it takes to get changes merged in.
18
20
 
19
21
  For more information and ideas on how to contribute to RubyGems ecosystem, see
20
22
  here: http://guides.rubygems.org/contributing/
23
+
24
+ == Getting Started
25
+
26
+ Run:
27
+
28
+ $ gem install hoe
29
+ $ rake newb
30
+
31
+ After `rake newb` finishes you can run `rake` to run the tests.
32
+
@@ -1,5 +1,68 @@
1
1
  # coding: UTF-8
2
2
 
3
+ === 2.4.0 / 2014-07-16
4
+
5
+ Minor enhancements:
6
+
7
+ * The contents command now supports a --show-install-dir option that shows
8
+ only the directory the gem is installed in. Feature request #966 by Akinori
9
+ MUSHA.
10
+ * Added a --build-root option to the install command for packagers. Pull
11
+ request #965 by Marcus Rückert.
12
+ * Added vendor gem support to RubyGems. Package managers may now install gems
13
+ in Gem.vendor_dir with the --vendor option to gem install. Issue #943 by
14
+ Marcus Rückert.
15
+
16
+ Bug fixes:
17
+
18
+ * Kernel#gem now respects the prerelease flag when activating gems.
19
+ Previously this behavior was undefined which could lead to bugs when a
20
+ prerelease version was unintentionally activated. Bug #938 by Joe Ferris.
21
+ * RubyGems now prefers gems from git over installed gems. This allows gems
22
+ from git to override an installed gem with the same name and version. Bug
23
+ #944 by Thomas Kriechbaumer.
24
+ * Fixed handling of git gems in a lockfile with unversioned dependencies. Bug
25
+ #940 by Michael Kaiser-Nyman.
26
+ * The ruby directive in a gem dependencies file is ignored when installing.
27
+ Bug #941 by Michael Kaiser-Nyman.
28
+ * Added open to list of builtin commands (`gem open` now works). Reported by
29
+ Espen Antonsen.
30
+ * `gem open` now works with command-line editors. Pull request #962 by Tim
31
+ Pope.
32
+ * `gem install -g` now respects `--conservative`. Pull request #950 by Jeremy
33
+ Evans.
34
+ * RubyGems releases announcements now now include checksums. Bug #939 by
35
+ Alexander E. Fischer.
36
+ * RubyGems now expands ~ in $PATH when checking if installed executables will
37
+ be runnable. Pull request #945 by Alex Talker.
38
+ * Fixed `gem install -g --explain`. Issue #947 by Luis Lavena. Patch by
39
+ Hsing-Hui Hsu.
40
+ * RubyGems locks less during gem activation. Pull request #951 by Aaron
41
+ Patterson and Justin Searls, #969 by Jeremy Tryba.
42
+ * Kernel#gem is now thread-safe. Pull request #967 by Aaron Patterson.
43
+ * RubyGems now handles spaces in directory names for some parts of extension
44
+ building. Pull request #949 by Tristan Hill.
45
+ * RubyGems no longer defines an empty Date class. Pull Request #948 by Benoit
46
+ Daloze.
47
+ * RubyGems respects --document options for `gem update` again. Bug 946 by
48
+ jonforums. Patch by Hsing-Hui Hsu.
49
+ * RubyGems generates documentation again with --ignore-dependencies. Bug #961
50
+ by Pulfer.
51
+ * RubyGems can install extensions across partitions now. Pull request #970 by
52
+ Michael Scherer.
53
+ * `-s` is now short for `--source` which resolves an ambiguity with
54
+ --no-suggestions. Pull request #955 by Alexander Kahn.
55
+ * Added extra test for ~> for 0.0.X versions. Pull request #958 by Mark
56
+ Lorenz.
57
+ * Fixed typo in gem updated help. Pull request #952 by Per Modin.
58
+ * Clarified that the gem description should not be excessively long. Part of
59
+ bug #956 by Renier Morales.
60
+ * Hid documentation of outdated test_files related methods in Specification.
61
+ Guides issue #90 by Emil Soman.
62
+ * RubyGems now falls back to the old index if the rubygems.org API fails
63
+ during gem resolution.
64
+
65
+
3
66
  === 2.3.0 / 2014-06-10
4
67
 
5
68
  Minor enhancements:
data/Rakefile CHANGED
@@ -67,6 +67,8 @@ hoe = Hoe.spec 'rubygems-update' do
67
67
  spec_extras['require_paths'] = %w[hide_lib_for_update]
68
68
  end
69
69
 
70
+ v = hoe.version
71
+
70
72
  hoe.test_prelude = 'gem "minitest", "~> 4.0"'
71
73
 
72
74
  Rake::Task['docs'].clear
@@ -77,7 +79,7 @@ begin
77
79
 
78
80
  RDoc::Task.new :rdoc => 'docs', :clobber_rdoc => 'clobber_docs' do |doc|
79
81
  doc.main = hoe.readme_file
80
- doc.title = "RubyGems #{hoe.version} API Documentation"
82
+ doc.title = "RubyGems #{v} API Documentation"
81
83
 
82
84
  rdoc_files = Rake::FileList.new %w[lib History.txt LICENSE.txt MIT.txt]
83
85
  rdoc_files.add hoe.extra_rdoc_files
@@ -104,18 +106,49 @@ task :prerelease => [:clobber, :check_manifest, :test]
104
106
 
105
107
  task :postrelease => %w[upload guides:publish blog:publish publish_docs]
106
108
 
107
- pkg_dir_path = "pkg/rubygems-update-#{hoe.version}"
108
- task :package do
109
- mv pkg_dir_path, "pkg/rubygems-#{hoe.version}"
110
- Dir.chdir 'pkg' do
111
- sh "tar -czf rubygems-#{hoe.version}.tgz rubygems-#{hoe.version}"
112
- sh "zip -q -r rubygems-#{hoe.version}.zip rubygems-#{hoe.version}"
109
+ file "pkg/rubygems-#{v}" => "pkg/rubygems-update-#{v}" do |t|
110
+ require 'find'
111
+
112
+ dest_root = File.expand_path t.name
113
+
114
+ cd t.source do
115
+ Find.find '.' do |file|
116
+ dest = File.expand_path file, dest_root
117
+
118
+ if File.directory? file then
119
+ mkdir_p dest
120
+ else
121
+ rm_f dest
122
+ safe_ln file, dest
123
+ end
124
+ end
125
+ end
126
+ end
127
+
128
+ source_pkg_dir = "pkg/rubygems-#{v}"
129
+
130
+ file "pkg/rubygems-#{v}.tgz" => source_pkg_dir do
131
+ cd 'pkg' do
132
+ sh "tar -czf rubygems-#{v}.tgz rubygems-#{v}"
113
133
  end
114
134
  end
115
135
 
136
+ file "pkg/rubygems-#{v}.zip" => source_pkg_dir do
137
+ cd 'pkg' do
138
+ sh "zip -q -r rubygems-#{v}.zip rubygems-#{v}"
139
+ end
140
+ end
141
+
142
+ file "pkg/rubygems-update-#{v}.gem"
143
+
144
+ task :package => %W[
145
+ pkg/rubygems-update-#{v}.gem
146
+ pkg/rubygems-#{v}.tgz
147
+ pkg/rubygems-#{v}.zip
148
+ ]
149
+
116
150
  desc "Upload release to gemcutter S3"
117
151
  task :upload_to_gemcutter do
118
- v = hoe.version
119
152
  sh "s3cmd put -P pkg/rubygems-update-#{v}.gem pkg/rubygems-#{v}.zip pkg/rubygems-#{v}.tgz s3://production.s3.rubygems.org/rubygems/"
120
153
  end
121
154
 
@@ -155,7 +188,7 @@ namespace 'guides' do
155
188
  sh 'git', 'diff', '--quiet'
156
189
  rescue
157
190
  sh 'git', 'commit', 'command-reference.md', 'specification-reference.md',
158
- '-m', "Rebuild for RubyGems #{hoe.version}"
191
+ '-m', "Rebuild for RubyGems #{v}"
159
192
  end
160
193
  end
161
194
  end
@@ -185,7 +218,24 @@ end
185
218
 
186
219
  namespace 'blog' do
187
220
  date = Time.now.strftime '%Y-%m-%d'
188
- post_page = "_posts/#{date}-#{hoe.version}-released.md"
221
+ post_page = "_posts/#{date}-#{v}-released.md"
222
+ checksums = ''
223
+
224
+ task 'checksums' => 'package' do
225
+ require 'digest'
226
+ Dir['pkg/*{tgz,zip,gem}'].map do |file|
227
+ digest = Digest::SHA256.new
228
+
229
+ open file, 'rb' do |io|
230
+ while chunk = io.read(65536) do
231
+ digest.update chunk
232
+ end
233
+ end
234
+
235
+ checksums << "* #{File.basename(file)} \n"
236
+ checksums << " #{digest.hexdigest}\n"
237
+ end
238
+ end
189
239
 
190
240
  task 'pull' => %w[../blog.rubygems.org] do
191
241
  chdir '../blog.rubygems.org' do
@@ -197,7 +247,7 @@ namespace 'blog' do
197
247
 
198
248
  task 'update' => [path]
199
249
 
200
- file path do
250
+ file path => 'checksums' do
201
251
  name = `git config --get user.name`.strip
202
252
  email = `git config --get user.email`.strip
203
253
 
@@ -251,13 +301,13 @@ namespace 'blog' do
251
301
  Tempfile.open 'blog_post' do |io|
252
302
  io.write <<-ANNOUNCEMENT
253
303
  ---
254
- title: #{hoe.version} Released
304
+ title: #{v} Released
255
305
  layout: post
256
306
  author: #{name}
257
307
  author_email: #{email}
258
308
  ---
259
309
 
260
- RubyGems #{hoe.version} includes #{change_types}.
310
+ RubyGems #{v} includes #{change_types}.
261
311
 
262
312
  To update to the latest RubyGems you can run:
263
313
 
@@ -269,6 +319,10 @@ RubyGems][upgrading] instructions. To install RubyGems by hand see the
269
319
 
270
320
  #{change_log}
271
321
 
322
+ SHA256 Checksums:
323
+
324
+ #{checksums}
325
+
272
326
  [download]: http://rubygems.org/pages/download
273
327
  [upgrading]: http://rubygems.rubyforge.org/rubygems-update/UPGRADING_rdoc.html
274
328
 
@@ -286,7 +340,7 @@ RubyGems][upgrading] instructions. To install RubyGems by hand see the
286
340
  chdir '../blog.rubygems.org' do
287
341
  sh 'git', 'add', post_page
288
342
  sh 'git', 'commit', post_page,
289
- '-m', "Added #{hoe.version} release announcement"
343
+ '-m', "Added #{v} release announcement"
290
344
  end
291
345
  end
292
346
 
@@ -365,83 +419,6 @@ task :diff_rubinius do
365
419
  diff_with rubinius_dir
366
420
  end
367
421
 
368
- def changelog_section code
369
- name = {
370
- :major => "major enhancement",
371
- :minor => "minor enhancement",
372
- :bug => "bug fix",
373
- :unknown => "unknown",
374
- }[code]
375
-
376
- changes = $changes[code]
377
- count = changes.size
378
- name += "s" if count > 1
379
- name.sub!(/fixs/, 'fixes')
380
-
381
- return if count < 1
382
-
383
- puts "* #{count} #{name}:"
384
- puts
385
- changes.sort.each do |line|
386
- puts " * #{line}"
387
- end
388
- puts
389
- end
390
-
391
- desc "Print the current changelog."
392
- task "git:newchangelog" do
393
- # This must be in here until rubygems depends on the version of hoe that has
394
- # git_tags
395
- # TODO: get this code back into hoe-git
396
- module Hoe::Git
397
- module_function :git_tags, :git_svn?, :git_release_tag_prefix
398
- end
399
-
400
- tags = Hoe::Git.git_tags
401
- tag = ENV["FROM"] || tags.last
402
- range = [tag, "HEAD"].compact.join ".."
403
- cmd = "git log #{range} '--format=tformat:%B|||%aN|||%aE|||'"
404
- now = Time.new.strftime "%Y-%m-%d"
405
-
406
- changes = `#{cmd}`.split(/\|\|\|/).each_slice(3).map do |msg, author, email|
407
- msg.split(/\n/).reject { |s| s.empty? }
408
- end
409
-
410
- changes = changes.flatten
411
-
412
- next if changes.empty?
413
-
414
- $changes = Hash.new { |h,k| h[k] = [] }
415
-
416
- codes = {
417
- "!" => :major,
418
- "+" => :minor,
419
- "*" => :minor,
420
- "-" => :bug,
421
- "?" => :unknown,
422
- }
423
-
424
- codes_re = Regexp.escape codes.keys.join
425
-
426
- changes.each do |change|
427
- if change =~ /^\s*([#{codes_re}])\s*(.*)/ then
428
- code, line = codes[$1], $2
429
- else
430
- code, line = codes["?"], change.chomp
431
- end
432
-
433
- $changes[code] << line
434
- end
435
-
436
- puts "=== #{ENV['VERSION'] || 'NEXT'} / #{now}"
437
- puts
438
- changelog_section :major
439
- changelog_section :minor
440
- changelog_section :bug
441
- changelog_section :unknown
442
- puts
443
- end
444
-
445
422
  desc "Cleanup trailing whitespace"
446
423
  task :whitespace do
447
424
  system 'find . -not \( -name .svn -prune -o -name .git -prune \) -type f -print0 | xargs -0 sed -i "" -E "s/[[:space:]]*$//"'
@@ -6,9 +6,10 @@
6
6
  #++
7
7
 
8
8
  require 'rbconfig'
9
+ require 'thread'
9
10
 
10
11
  module Gem
11
- VERSION = '2.3.0'
12
+ VERSION = '2.4.0'
12
13
  end
13
14
 
14
15
  # Must be first since it unloads the prelude from 1.9.2
@@ -156,6 +157,7 @@ module Gem
156
157
 
157
158
  @configuration = nil
158
159
  @loaded_specs = {}
160
+ LOADED_SPECS_MUTEX = Mutex.new
159
161
  @path_to_default_spec_map = {}
160
162
  @platforms = []
161
163
  @ruby = nil
@@ -544,9 +546,9 @@ module Gem
544
546
  # Fetching: minitest-3.0.1.gem (100%)
545
547
  # => [#<Gem::Specification:0x1013b4528 @name="minitest", ...>]
546
548
 
547
- def self.install name, version = Gem::Requirement.default
549
+ def self.install name, version = Gem::Requirement.default, *options
548
550
  require "rubygems/dependency_installer"
549
- inst = Gem::DependencyInstaller.new
551
+ inst = Gem::DependencyInstaller.new(*options)
550
552
  inst.install name, version
551
553
  inst.installed_gems
552
554
  end
@@ -48,6 +48,7 @@ class Gem::CommandManager
48
48
  :list,
49
49
  :lock,
50
50
  :mirror,
51
+ :open,
51
52
  :outdated,
52
53
  :owner,
53
54
  :pristine,
@@ -8,7 +8,8 @@ class Gem::Commands::ContentsCommand < Gem::Command
8
8
 
9
9
  def initialize
10
10
  super 'contents', 'Display the contents of the installed gems',
11
- :specdirs => [], :lib_only => false, :prefix => true
11
+ :specdirs => [], :lib_only => false, :prefix => true,
12
+ :show_install_dir => false
12
13
 
13
14
  add_version_option
14
15
 
@@ -32,6 +33,11 @@ class Gem::Commands::ContentsCommand < Gem::Command
32
33
  options[:prefix] = prefix
33
34
  end
34
35
 
36
+ add_option( '--[no-]show-install-dir',
37
+ 'Show only the gem install dir') do |show, options|
38
+ options[:show_install_dir] = show
39
+ end
40
+
35
41
  @path_kind = nil
36
42
  @spec_dirs = nil
37
43
  @version = nil
@@ -65,7 +71,12 @@ prefix or only the files that are requireable.
65
71
  names = gem_names
66
72
 
67
73
  names.each do |name|
68
- found = gem_contents name
74
+ found =
75
+ if options[:show_install_dir] then
76
+ gem_install_dir name
77
+ else
78
+ gem_contents name
79
+ end
69
80
 
70
81
  terminate_interaction 1 unless found or names.length > 1
71
82
  end
@@ -115,6 +126,16 @@ prefix or only the files that are requireable.
115
126
  true
116
127
  end
117
128
 
129
+ def gem_install_dir name
130
+ spec = spec_for name
131
+
132
+ return false unless spec
133
+
134
+ say spec.gem_dir
135
+
136
+ true
137
+ end
138
+
118
139
  def gem_names # :nodoc:
119
140
  if options[:all] then
120
141
  Gem::Specification.map(&:name)
@@ -278,6 +278,14 @@ to write the specification by hand. For example:
278
278
  inst = Gem::Installer.new gem, options
279
279
  inst.install
280
280
 
281
+ require 'rubygems/dependency_installer'
282
+ dinst = Gem::DependencyInstaller.new options
283
+ dinst.installed_gems.replace [inst.spec]
284
+
285
+ Gem.done_installing_hooks.each do |hook|
286
+ hook.call dinst, [inst.spec]
287
+ end unless Gem.done_installing_hooks.empty?
288
+
281
289
  @installed_specs.push(inst.spec)
282
290
  end
283
291