rubygems-update 3.3.2 → 3.3.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +68 -0
  3. data/bundler/CHANGELOG.md +44 -0
  4. data/bundler/lib/bundler/build_metadata.rb +2 -2
  5. data/bundler/lib/bundler/cli/doctor.rb +9 -1
  6. data/bundler/lib/bundler/cli/gem.rb +11 -1
  7. data/bundler/lib/bundler/cli/install.rb +0 -3
  8. data/bundler/lib/bundler/cli/platform.rb +1 -1
  9. data/bundler/lib/bundler/cli/update.rb +6 -2
  10. data/bundler/lib/bundler/cli.rb +3 -10
  11. data/bundler/lib/bundler/compact_index_client/cache.rb +0 -9
  12. data/bundler/lib/bundler/compact_index_client.rb +0 -6
  13. data/bundler/lib/bundler/definition.rb +2 -9
  14. data/bundler/lib/bundler/endpoint_specification.rb +21 -3
  15. data/bundler/lib/bundler/env.rb +1 -1
  16. data/bundler/lib/bundler/fetcher/compact_index.rb +0 -10
  17. data/bundler/lib/bundler/fetcher/index.rb +0 -26
  18. data/bundler/lib/bundler/fetcher.rb +4 -9
  19. data/bundler/lib/bundler/gem_helper.rb +2 -2
  20. data/bundler/lib/bundler/lazy_specification.rb +2 -2
  21. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  22. data/bundler/lib/bundler/remote_specification.rb +7 -0
  23. data/bundler/lib/bundler/resolver/spec_group.rb +1 -1
  24. data/bundler/lib/bundler/resolver.rb +7 -12
  25. data/bundler/lib/bundler/ruby_version.rb +1 -1
  26. data/bundler/lib/bundler/self_manager.rb +106 -14
  27. data/bundler/lib/bundler/settings.rb +1 -0
  28. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +1 -1
  29. data/bundler/lib/bundler/templates/newgem/standard.yml.tt +1 -0
  30. data/bundler/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.tt +1 -1
  31. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +1 -4
  32. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  33. data/bundler/lib/bundler/version.rb +1 -1
  34. data/lib/rubygems/basic_specification.rb +8 -8
  35. data/lib/rubygems/bundler_version_finder.rb +3 -3
  36. data/lib/rubygems/command.rb +4 -4
  37. data/lib/rubygems/commands/cleanup_command.rb +6 -6
  38. data/lib/rubygems/commands/dependency_command.rb +20 -30
  39. data/lib/rubygems/commands/fetch_command.rb +27 -8
  40. data/lib/rubygems/commands/list_command.rb +1 -1
  41. data/lib/rubygems/commands/pristine_command.rb +12 -12
  42. data/lib/rubygems/commands/push_command.rb +8 -8
  43. data/lib/rubygems/commands/query_command.rb +1 -1
  44. data/lib/rubygems/commands/rdoc_command.rb +6 -6
  45. data/lib/rubygems/commands/search_command.rb +1 -1
  46. data/lib/rubygems/commands/setup_command.rb +8 -8
  47. data/lib/rubygems/commands/specification_command.rb +4 -4
  48. data/lib/rubygems/commands/update_command.rb +11 -8
  49. data/lib/rubygems/config_file.rb +4 -4
  50. data/lib/rubygems/doctor.rb +5 -5
  51. data/lib/rubygems/gem_runner.rb +5 -5
  52. data/lib/rubygems/install_update_options.rb +4 -4
  53. data/lib/rubygems/installer.rb +51 -12
  54. data/lib/rubygems/package/old.rb +1 -1
  55. data/lib/rubygems/package.rb +11 -11
  56. data/lib/rubygems/platform.rb +42 -42
  57. data/lib/rubygems/psych_additions.rb +1 -1
  58. data/lib/rubygems/query_utils.rb +16 -18
  59. data/lib/rubygems/remote_fetcher.rb +4 -4
  60. data/lib/rubygems/request_set/lockfile.rb +4 -4
  61. data/lib/rubygems/resolver/installer_set.rb +9 -9
  62. data/lib/rubygems/safe_yaml.rb +8 -8
  63. data/lib/rubygems/security.rb +1 -1
  64. data/lib/rubygems/source.rb +6 -6
  65. data/lib/rubygems/source_list.rb +7 -7
  66. data/lib/rubygems/spec_fetcher.rb +25 -25
  67. data/lib/rubygems/specification.rb +50 -51
  68. data/lib/rubygems/specification_policy.rb +16 -16
  69. data/lib/rubygems/stub_specification.rb +16 -19
  70. data/lib/rubygems/uninstaller.rb +7 -7
  71. data/lib/rubygems/user_interaction.rb +12 -12
  72. data/lib/rubygems/version.rb +9 -7
  73. data/lib/rubygems.rb +18 -17
  74. data/rubygems-update.gemspec +1 -1
  75. data/test/rubygems/helper.rb +10 -10
  76. data/test/rubygems/test_gem.rb +2 -0
  77. data/test/rubygems/test_gem_command_manager.rb +1 -1
  78. data/test/rubygems/test_gem_commands_fetch_command.rb +97 -0
  79. data/test/rubygems/test_gem_commands_install_command.rb +16 -0
  80. data/test/rubygems/test_gem_commands_update_command.rb +59 -0
  81. data/test/rubygems/test_gem_installer.rb +170 -58
  82. data/test/rubygems/test_gem_package.rb +2 -2
  83. data/test/rubygems/test_gem_stream_ui.rb +1 -1
  84. data/test/rubygems/test_gem_stub_specification.rb +0 -16
  85. data/test/rubygems/test_gem_version.rb +4 -0
  86. data/test/rubygems/utilities.rb +4 -4
  87. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 032d5c25431f07d56614be5feb4310775b0beca1cd1150d477655a46999c25e4
4
- data.tar.gz: 1c45327dfd8164fbafc2407a6fe2ba21257a827d25a3040ccc803fd4d8ef2400
3
+ metadata.gz: 498b97d36cfdbe927831044d377e36e6ce8bf07724f1ec5fc1b9dfa39376c7d4
4
+ data.tar.gz: 4afa885b9263b0154b00e0695849c2b795f7870f625c37a368104333ea56309b
5
5
  SHA512:
6
- metadata.gz: 5edd1acdf9e66fe8e5e3b263da1921c30a687b2a83defac7c74a39530e7c63dc6b4eaea4dfec3c0c162123cacbc0d1e20a39e53030566efb7ba56b464ced97cf
7
- data.tar.gz: 0f3c91e64ca5e5c28e8ccd3baf74b44785b8d1c129b2d155b58b5dcef0f68dbb0be67a4ff2b00d2dbfb8dd066827960afde2c11da6a25c2b474e3a086b30bb21
6
+ metadata.gz: 34f91a116d9e346e3fd26ea549d5d6b2c5f959d00612557d1abf133da8d6566b9a186f5d116f878f49ad629215de9604763f84cd32bc14c8d2b7b200c80ae387
7
+ data.tar.gz: 173c8fdd07607bc57c6ba6bc12a5551f5db03f20fabdb25924069e4e067e7dc8314fb343495487735eb16ad2bc410aebd0c21002fffaab873399a017953f7e89
data/CHANGELOG.md CHANGED
@@ -1,3 +1,71 @@
1
+ # 3.3.6 / 2022-01-26
2
+
3
+ ## Enhancements:
4
+
5
+ * Forbid downgrading past the originally shipped version on Ruby 3.1. Pull
6
+ request #5301 by deivid-rodriguez
7
+ * Support `--enable-load-relative` inside binstubs. Pull request #2929 by
8
+ deivid-rodriguez
9
+ * Let `Version#<=>` accept a String. Pull request #5275 by amatsuda
10
+ * Installs bundler 2.3.6 as a default gem.
11
+
12
+ ## Bug fixes:
13
+
14
+ * Avoid `flock` on non Windows systems, since it causing issues on NFS
15
+ file systems. Pull request #5278 by deivid-rodriguez
16
+ * Fix `gem update --system` for already installed version of
17
+ `rubygems-update`. Pull request #5285 by loadkpi
18
+
19
+ # 3.3.5 / 2022-01-12
20
+
21
+ ## Enhancements:
22
+
23
+ * Don't activate `yaml` gem from RubyGems. Pull request #5266 by
24
+ deivid-rodriguez
25
+ * Let `gem fetch` understand `<gem>:<version>` syntax and
26
+ `--[no-]suggestions` flag. Pull request #5242 by ximenasandoval
27
+ * Installs bundler 2.3.5 as a default gem.
28
+
29
+ ## Bug fixes:
30
+
31
+ * Fix `gem install <non-existent-gem> --force` crash. Pull request #5262
32
+ by deivid-rodriguez
33
+ * Fix longstanding `gem install` failure on JRuby. Pull request #5228 by
34
+ deivid-rodriguez
35
+
36
+ ## Documentation:
37
+
38
+ * Markup `Gem::Specification` documentation with RDoc notations. Pull
39
+ request #5268 by nobu
40
+
41
+ # 3.3.4 / 2021-12-29
42
+
43
+ ## Enhancements:
44
+
45
+ * Don't redownload `rubygems-update` package if already there. Pull
46
+ request #5230 by deivid-rodriguez
47
+ * Installs bundler 2.3.4 as a default gem.
48
+
49
+ ## Bug fixes:
50
+
51
+ * Fix `gem update --system` crashing when latest version not supported.
52
+ Pull request #5191 by deivid-rodriguez
53
+
54
+ ## Performance:
55
+
56
+ * Make SpecificationPolicy autoload constant. Pull request #5222 by pocke
57
+
58
+ # 3.3.3 / 2021-12-24
59
+
60
+ ## Enhancements:
61
+
62
+ * Installs bundler 2.3.3 as a default gem.
63
+
64
+ ## Bug fixes:
65
+
66
+ * Fix gem installation failing in Solaris due to bad `IO#flock` usage.
67
+ Pull request #5216 by mame
68
+
1
69
  # 3.3.2 / 2021-12-23
2
70
 
3
71
  ## Enhancements:
data/bundler/CHANGELOG.md CHANGED
@@ -1,3 +1,47 @@
1
+ # 2.3.6 (January 26, 2022)
2
+
3
+ ## Enhancements:
4
+
5
+ - Use `Gem::Platform.local` instead of `RUBY_PLATFORM` when displaying local platform [#5306](https://github.com/rubygems/rubygems/pull/5306)
6
+ - Lock standard.yml to the required ruby version [#5284](https://github.com/rubygems/rubygems/pull/5284)
7
+ - Use `Fiddle` in `bundle doctor` to check for dynamic library presence [#5173](https://github.com/rubygems/rubygems/pull/5173)
8
+
9
+ ## Bug fixes:
10
+
11
+ - Fix edge case where gems were incorrectly removed from the lockfile [#5302](https://github.com/rubygems/rubygems/pull/5302)
12
+ - Fix `force_ruby_platform` ignored when lockfile includes current specific platform [#5304](https://github.com/rubygems/rubygems/pull/5304)
13
+ - Create minitest file to underscored path in "bundle gem" command with dashed gem name [#5273](https://github.com/rubygems/rubygems/pull/5273)
14
+ - Fix regression with old marshaled specs having null `required_rubygems_version` [#5291](https://github.com/rubygems/rubygems/pull/5291)
15
+
16
+ # 2.3.5 (January 12, 2022)
17
+
18
+ ## Enhancements:
19
+
20
+ - Make `bundle update --bundler` actually lock to the latest bundler version (even if not yet installed) [#5182](https://github.com/rubygems/rubygems/pull/5182)
21
+ - Use thor-1.2.1 [#5260](https://github.com/rubygems/rubygems/pull/5260)
22
+ - Exclude bin directory for newgem template [#5259](https://github.com/rubygems/rubygems/pull/5259)
23
+
24
+ ## Bug fixes:
25
+
26
+ - Fix metadata requirements being bypassed when custom gem servers are used [#5256](https://github.com/rubygems/rubygems/pull/5256)
27
+ - Fix `rake build:checksum` writing checksum of package path, not package contents [#5250](https://github.com/rubygems/rubygems/pull/5250)
28
+
29
+ # 2.3.4 (December 29, 2021)
30
+
31
+ ## Enhancements:
32
+
33
+ - Improve error message when `BUNDLED WITH` version does not exist [#5205](https://github.com/rubygems/rubygems/pull/5205)
34
+
35
+ ## Bug fixes:
36
+
37
+ - Fix `bundle update --bundler` no longer updating lockfile [#5224](https://github.com/rubygems/rubygems/pull/5224)
38
+
39
+ # 2.3.3 (December 24, 2021)
40
+
41
+ ## Bug fixes:
42
+
43
+ - Fix locked bundler not installed to the right path when `deployment` is set [#5217](https://github.com/rubygems/rubygems/pull/5217)
44
+
1
45
  # 2.3.2 (December 23, 2021)
2
46
 
3
47
  ## Enhancements:
@@ -4,8 +4,8 @@ module Bundler
4
4
  # Represents metadata from when the Bundler gem was built.
5
5
  module BuildMetadata
6
6
  # begin ivars
7
- @built_at = "2021-12-24".freeze
8
- @git_commit_sha = "c3c71e7434".freeze
7
+ @built_at = "2022-01-26".freeze
8
+ @git_commit_sha = "056f64c33a".freeze
9
9
  @release = true
10
10
  # end ivars
11
11
 
@@ -2,6 +2,7 @@
2
2
 
3
3
  require "rbconfig"
4
4
  require "shellwords"
5
+ require "fiddle"
5
6
 
6
7
  module Bundler
7
8
  class CLI::Doctor
@@ -71,7 +72,14 @@ module Bundler
71
72
 
72
73
  definition.specs.each do |spec|
73
74
  bundles_for_gem(spec).each do |bundle|
74
- bad_paths = dylibs(bundle).select {|f| !File.exist?(f) }
75
+ bad_paths = dylibs(bundle).select do |f|
76
+ begin
77
+ Fiddle.dlopen(f)
78
+ false
79
+ rescue Fiddle::DLError
80
+ true
81
+ end
82
+ end
75
83
  if bad_paths.any?
76
84
  broken_links[spec] ||= []
77
85
  broken_links[spec].concat(bad_paths)
@@ -38,6 +38,7 @@ module Bundler
38
38
  namespaced_path = name.tr("-", "/")
39
39
  constant_name = name.gsub(/-[_-]*(?![_-]|$)/) { "::" }.gsub(/([_-]+|(::)|^)(.|$)/) { $2.to_s + $3.upcase }
40
40
  constant_array = constant_name.split("::")
41
+ minitest_constant_name = constant_array.clone.tap {|a| a[-1] = "Test#{a[-1]}" }.join("::") # Foo::Bar => Foo::TestBar
41
42
 
42
43
  use_git = Bundler.git_present? && options[:git]
43
44
 
@@ -69,6 +70,7 @@ module Bundler
69
70
  :git => use_git,
70
71
  :github_username => github_username.empty? ? "[USERNAME]" : github_username,
71
72
  :required_ruby_version => required_ruby_version,
73
+ :minitest_constant_name => minitest_constant_name,
72
74
  }
73
75
  ensure_safe_gem_name(name, constant_array)
74
76
 
@@ -104,9 +106,17 @@ module Bundler
104
106
  )
105
107
  config[:test_task] = :spec
106
108
  when "minitest"
109
+ # Generate path for minitest target file (FileList["test/**/test_*.rb"])
110
+ # foo => test/test_foo.rb
111
+ # foo-bar => test/foo/test_bar.rb
112
+ # foo_bar => test/test_foo_bar.rb
113
+ paths = namespaced_path.rpartition("/")
114
+ paths[2] = "test_#{paths[2]}"
115
+ minitest_namespaced_path = paths.join("")
116
+
107
117
  templates.merge!(
108
118
  "test/minitest/test_helper.rb.tt" => "test/test_helper.rb",
109
- "test/minitest/test_newgem.rb.tt" => "test/test_#{namespaced_path}.rb"
119
+ "test/minitest/test_newgem.rb.tt" => "test/#{minitest_namespaced_path}.rb"
110
120
  )
111
121
  config[:test_task] = :test
112
122
  when "test-unit"
@@ -165,9 +165,6 @@ module Bundler
165
165
 
166
166
  def normalize_settings
167
167
  Bundler.settings.set_command_option :path, nil if options[:system]
168
- Bundler.settings.temporary(:path_relative_to_cwd => false) do
169
- Bundler.settings.set_command_option :path, "vendor/bundle" if Bundler.settings[:deployment] && Bundler.settings[:path].nil?
170
- end
171
168
  Bundler.settings.set_command_option_if_given :path, options[:path]
172
169
  Bundler.settings.temporary(:path_relative_to_cwd => false) do
173
170
  Bundler.settings.set_command_option :path, "bundle" if options["standalone"] && Bundler.settings[:path].nil?
@@ -23,7 +23,7 @@ module Bundler
23
23
  output << "No ruby version specified"
24
24
  end
25
25
  else
26
- output << "Your platform is: #{RUBY_PLATFORM}"
26
+ output << "Your platform is: #{Gem::Platform.local}"
27
27
  output << "Your app has gems that work on these platforms:\n#{platforms.join("\n")}"
28
28
 
29
29
  if ruby_version
@@ -11,12 +11,16 @@ module Bundler
11
11
  def run
12
12
  Bundler.ui.level = "warn" if options[:quiet]
13
13
 
14
+ update_bundler = options[:bundler]
15
+
16
+ Bundler.self_manager.update_bundler_and_restart_with_it_if_needed(update_bundler) if update_bundler
17
+
14
18
  Plugin.gemfile_install(Bundler.default_gemfile) if Bundler.feature_flag.plugins?
15
19
 
16
20
  sources = Array(options[:source])
17
21
  groups = Array(options[:group]).map(&:to_sym)
18
22
 
19
- full_update = gems.empty? && sources.empty? && groups.empty? && !options[:ruby] && !options[:bundler]
23
+ full_update = gems.empty? && sources.empty? && groups.empty? && !options[:ruby] && !update_bundler
20
24
 
21
25
  if full_update && !options[:all]
22
26
  if Bundler.feature_flag.update_requires_all_flag?
@@ -49,7 +53,7 @@ module Bundler
49
53
 
50
54
  Bundler.definition(:gems => gems, :sources => sources, :ruby => options[:ruby],
51
55
  :conservative => conservative,
52
- :bundler => options[:bundler])
56
+ :bundler => update_bundler)
53
57
  end
54
58
 
55
59
  Bundler::CLI::Common.configure_gem_version_promoter(Bundler.definition, options)
@@ -809,17 +809,10 @@ module Bundler
809
809
 
810
810
  current = Gem::Version.new(VERSION)
811
811
  return if current >= latest
812
- latest_installed = Bundler.rubygems.find_name("bundler").map(&:version).max
813
812
 
814
- installation = "To install the latest version, run `gem install bundler#{" --pre" if latest.prerelease?}`"
815
- if latest_installed && latest_installed > current
816
- suggestion = "To update to the most recent installed version (#{latest_installed}), run `bundle update --bundler`"
817
- suggestion = "#{installation}\n#{suggestion}" if latest_installed < latest
818
- else
819
- suggestion = installation
820
- end
821
-
822
- Bundler.ui.warn "The latest bundler is #{latest}, but you are currently running #{current}.\n#{suggestion}"
813
+ Bundler.ui.warn \
814
+ "The latest bundler is #{latest}, but you are currently running #{current}.\n" \
815
+ "To update to the most recent version, run `bundle update --bundler`"
823
816
  rescue RuntimeError
824
817
  nil
825
818
  end
@@ -76,15 +76,6 @@ module Bundler
76
76
  end
77
77
  end
78
78
 
79
- def specific_dependency(name, version, platform)
80
- pattern = [version, platform].compact.join("-")
81
- return nil if pattern.empty?
82
-
83
- gem_lines = info_path(name).read
84
- gem_line = gem_lines[/^#{Regexp.escape(pattern)}\b.*/, 0]
85
- gem_line ? parse_gem(gem_line) : nil
86
- end
87
-
88
79
  private
89
80
 
90
81
  def lines(path)
@@ -73,12 +73,6 @@ module Bundler
73
73
  end.flatten(1)
74
74
  end
75
75
 
76
- def spec(name, version, platform = nil)
77
- Bundler::CompactIndexClient.debug { "spec(name = #{name}, version = #{version}, platform = #{platform})" }
78
- update_info(name)
79
- @cache.specific_dependency(name, version, platform)
80
- end
81
-
82
76
  def update_and_parse_checksums!
83
77
  Bundler::CompactIndexClient.debug { "update_and_parse_checksums!" }
84
78
  return @info_checksums_by_name if @parsed_checksums
@@ -265,7 +265,7 @@ module Bundler
265
265
  else
266
266
  # Run a resolve against the locally available gems
267
267
  Bundler.ui.debug("Found changes from the lockfile, re-resolving dependencies because #{change_reason}")
268
- expanded_dependencies = expand_dependencies(dependencies + metadata_dependencies, @remote)
268
+ expanded_dependencies = expand_dependencies(dependencies + metadata_dependencies, true)
269
269
  Resolver.resolve(expanded_dependencies, source_requirements, last_resolve, gem_version_promoter, additional_base_requirements_for_resolve, platforms)
270
270
  end
271
271
  end
@@ -309,14 +309,6 @@ module Bundler
309
309
  end
310
310
  end
311
311
 
312
- def locked_bundler_version
313
- if @locked_bundler_version && @locked_bundler_version < Gem::Version.new(Bundler::VERSION)
314
- new_version = Bundler::VERSION
315
- end
316
-
317
- new_version || @locked_bundler_version || Bundler::VERSION
318
- end
319
-
320
312
  def locked_ruby_version
321
313
  return unless ruby_version
322
314
  if @unlock[:ruby] || !@locked_ruby_version
@@ -503,6 +495,7 @@ module Bundler
503
495
 
504
496
  def current_ruby_platform_locked?
505
497
  return false unless generic_local_platform == Gem::Platform::RUBY
498
+ return false if Bundler.settings[:force_ruby_platform] && !@platforms.include?(Gem::Platform::RUBY)
506
499
 
507
500
  current_platform_locked?
508
501
  end
@@ -5,14 +5,15 @@ module Bundler
5
5
  class EndpointSpecification < Gem::Specification
6
6
  include MatchPlatform
7
7
 
8
- attr_reader :name, :version, :platform, :required_rubygems_version, :required_ruby_version, :checksum
8
+ attr_reader :name, :version, :platform, :checksum
9
9
  attr_accessor :source, :remote, :dependencies
10
10
 
11
- def initialize(name, version, platform, dependencies, metadata = nil)
11
+ def initialize(name, version, platform, spec_fetcher, dependencies, metadata = nil)
12
12
  super()
13
13
  @name = name
14
14
  @version = Gem::Version.create version
15
15
  @platform = platform
16
+ @spec_fetcher = spec_fetcher
16
17
  @dependencies = dependencies.map {|dep, reqs| build_dependency(dep, reqs) }
17
18
 
18
19
  @loaded_from = nil
@@ -21,6 +22,14 @@ module Bundler
21
22
  parse_metadata(metadata)
22
23
  end
23
24
 
25
+ def required_ruby_version
26
+ @required_ruby_version ||= _remote_specification.required_ruby_version
27
+ end
28
+
29
+ def required_rubygems_version
30
+ @required_rubygems_version ||= _remote_specification.required_rubygems_version
31
+ end
32
+
24
33
  def fetch_platform
25
34
  @platform
26
35
  end
@@ -105,12 +114,21 @@ module Bundler
105
114
 
106
115
  private
107
116
 
117
+ def _remote_specification
118
+ @_remote_specification ||= @spec_fetcher.fetch_spec([@name, @version, @platform])
119
+ end
120
+
108
121
  def local_specification_path
109
122
  "#{base_dir}/specifications/#{full_name}.gemspec"
110
123
  end
111
124
 
112
125
  def parse_metadata(data)
113
- return unless data
126
+ unless data
127
+ @required_ruby_version = nil
128
+ @required_rubygems_version = nil
129
+ return
130
+ end
131
+
114
132
  data.each do |k, v|
115
133
  next unless v
116
134
  case k.to_s
@@ -71,7 +71,7 @@ module Bundler
71
71
  def self.ruby_version
72
72
  str = String.new(RUBY_VERSION)
73
73
  str << "p#{RUBY_PATCHLEVEL}" if defined? RUBY_PATCHLEVEL
74
- str << " (#{RUBY_RELEASE_DATE} revision #{RUBY_REVISION}) [#{RUBY_PLATFORM}]"
74
+ str << " (#{RUBY_RELEASE_DATE} revision #{RUBY_REVISION}) [#{Gem::Platform.local}]"
75
75
  end
76
76
 
77
77
  def self.git_version
@@ -57,16 +57,6 @@ module Bundler
57
57
  gem_info
58
58
  end
59
59
 
60
- def fetch_spec(spec)
61
- spec -= [nil, "ruby", ""]
62
- contents = compact_index_client.spec(*spec)
63
- return nil if contents.nil?
64
- contents.unshift(spec.first)
65
- contents[3].map! {|d| Gem::Dependency.new(*d) }
66
- EndpointSpecification.new(*contents)
67
- end
68
- compact_index_request :fetch_spec
69
-
70
60
  def available?
71
61
  unless SharedHelpers.md5_available?
72
62
  Bundler.ui.debug("FIPS mode is enabled, bundler can't use the CompactIndex API")
@@ -21,32 +21,6 @@ module Bundler
21
21
  raise HTTPError, "Could not fetch specs from #{display_uri} due to underlying error <#{e.message}>"
22
22
  end
23
23
  end
24
-
25
- def fetch_spec(spec)
26
- spec -= [nil, "ruby", ""]
27
- spec_file_name = "#{spec.join "-"}.gemspec"
28
-
29
- uri = Bundler::URI.parse("#{remote_uri}#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}.rz")
30
- if uri.scheme == "file"
31
- path = Bundler.rubygems.correct_for_windows_path(uri.path)
32
- Bundler.load_marshal Bundler.rubygems.inflate(Gem.read_binary(path))
33
- elsif cached_spec_path = gemspec_cached_path(spec_file_name)
34
- Bundler.load_gemspec(cached_spec_path)
35
- else
36
- Bundler.load_marshal Bundler.rubygems.inflate(downloader.fetch(uri).body)
37
- end
38
- rescue MarshalError
39
- raise HTTPError, "Gemspec #{spec} contained invalid data.\n" \
40
- "Your network or your gem server is probably having issues right now."
41
- end
42
-
43
- private
44
-
45
- # cached gem specification path, if one exists
46
- def gemspec_cached_path(spec_file_name)
47
- paths = Bundler.rubygems.spec_cache_dirs.map {|dir| File.join(dir, spec_file_name) }
48
- paths.find {|path| File.file? path }
49
- end
50
24
  end
51
25
  end
52
26
  end
@@ -129,17 +129,15 @@ module Bundler
129
129
  specs = fetchers.last.specs(gem_names)
130
130
  else
131
131
  specs = []
132
- fetchers.shift until fetchers.first.available? || fetchers.empty?
133
- fetchers.dup.each do |f|
134
- break unless f.api_fetcher? && !gem_names || !specs = f.specs(gem_names)
135
- fetchers.delete(f)
132
+ @fetchers = fetchers.drop_while do |f|
133
+ !f.available? || (f.api_fetcher? && !gem_names) || !specs = f.specs(gem_names)
136
134
  end
137
135
  @use_api = false if fetchers.none?(&:api_fetcher?)
138
136
  end
139
137
 
140
138
  specs.each do |name, version, platform, dependencies, metadata|
141
139
  spec = if dependencies
142
- EndpointSpecification.new(name, version, platform, dependencies, metadata)
140
+ EndpointSpecification.new(name, version, platform, self, dependencies, metadata)
143
141
  else
144
142
  RemoteSpecification.new(name, version, platform, self)
145
143
  end
@@ -272,8 +270,7 @@ module Bundler
272
270
  # cached gem specification path, if one exists
273
271
  def gemspec_cached_path(spec_file_name)
274
272
  paths = Bundler.rubygems.spec_cache_dirs.map {|dir| File.join(dir, spec_file_name) }
275
- paths = paths.select {|path| File.file? path }
276
- paths.first
273
+ paths.find {|path| File.file? path }
277
274
  end
278
275
 
279
276
  HTTP_ERRORS = [
@@ -301,8 +298,6 @@ module Bundler
301
298
  store
302
299
  end
303
300
 
304
- private
305
-
306
301
  def remote_uri
307
302
  @remote.uri
308
303
  end
@@ -107,9 +107,9 @@ module Bundler
107
107
  SharedHelpers.filesystem_access(File.join(base, "checksums")) {|p| FileUtils.mkdir_p(p) }
108
108
  file_name = "#{File.basename(built_gem_path)}.sha512"
109
109
  require "digest/sha2"
110
- checksum = ::Digest::SHA512.new.hexdigest(built_gem_path.to_s)
110
+ checksum = ::Digest::SHA512.file(built_gem_path).hexdigest
111
111
  target = File.join(base, "checksums", file_name)
112
- File.write(target, checksum)
112
+ File.write(target, checksum + "\n")
113
113
  Bundler.ui.confirm "#{name} #{version} checksum written to checksums/#{file_name}."
114
114
  end
115
115
 
@@ -90,11 +90,11 @@ module Bundler
90
90
  MatchPlatform.platforms_match?(spec.platform, platform_object)
91
91
  end
92
92
  installable_candidates = same_platform_candidates.select do |spec|
93
- !spec.is_a?(EndpointSpecification) ||
93
+ spec.is_a?(StubSpecification) ||
94
94
  (spec.required_ruby_version.satisfied_by?(Gem.ruby_version) &&
95
95
  spec.required_rubygems_version.satisfied_by?(Gem.rubygems_version))
96
96
  end
97
- search = installable_candidates.last || same_platform_candidates.last
97
+ search = installable_candidates.last
98
98
  search.dependencies = dependencies if search && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification))
99
99
  search
100
100
  end
@@ -71,7 +71,7 @@ module Bundler
71
71
  end
72
72
 
73
73
  def add_bundled_with
74
- add_section("BUNDLED WITH", definition.locked_bundler_version.to_s)
74
+ add_section("BUNDLED WITH", Bundler::VERSION)
75
75
  end
76
76
 
77
77
  def add_section(name, value)
@@ -27,6 +27,13 @@ module Bundler
27
27
  @platform = _remote_specification.platform
28
28
  end
29
29
 
30
+ # A fallback is included because the original version of the specification
31
+ # API didn't include that field, so some marshalled specs in the index have it
32
+ # set to +nil+.
33
+ def required_rubygems_version
34
+ @required_rubygems_version ||= _remote_specification.required_rubygems_version || Gem::Requirement.default
35
+ end
36
+
30
37
  def full_name
31
38
  if platform == Gem::Platform::RUBY || platform.nil?
32
39
  "#{@name}-#{@version}"
@@ -95,7 +95,7 @@ module Bundler
95
95
 
96
96
  def metadata_dependencies(platform)
97
97
  spec = @specs[platform].first
98
- return [] unless spec.is_a?(Gem::Specification)
98
+ return [] if spec.is_a?(LazySpecification)
99
99
  dependencies = []
100
100
  if !spec.required_ruby_version.nil? && !spec.required_ruby_version.none?
101
101
  dependencies << DepProxy.get_proxy(Gem::Dependency.new("Ruby\0", spec.required_ruby_version), platform)
@@ -249,10 +249,11 @@ module Bundler
249
249
  end
250
250
 
251
251
  def verify_gemfile_dependencies_are_found!(requirements)
252
- requirements.each do |requirement|
252
+ requirements.map! do |requirement|
253
253
  name = requirement.name
254
- next if name == "bundler"
255
- next unless search_for(requirement).empty?
254
+ next requirement if name == "bundler"
255
+ next requirement unless search_for(requirement).empty?
256
+ next unless requirement.current_platform?
256
257
 
257
258
  if (base = @base[name]) && !base.empty?
258
259
  version = base.first.version
@@ -266,7 +267,7 @@ module Bundler
266
267
  message = gem_not_found_message(name, requirement, source_for(name))
267
268
  end
268
269
  raise GemNotFound, message
269
- end
270
+ end.compact!
270
271
  end
271
272
 
272
273
  def gem_not_found_message(name, requirement, source, extra_message = "")
@@ -358,24 +359,18 @@ module Bundler
358
359
  o << "\n"
359
360
  o << %(Running `bundle update` will rebuild your snapshot from scratch, using only\n)
360
361
  o << %(the gems in your Gemfile, which may resolve the conflict.\n)
361
- elsif !conflict.existing
362
+ elsif !conflict.existing && !name.end_with?("\0")
362
363
  o << "\n"
363
364
 
364
365
  relevant_source = conflict.requirement.source || source_for(name)
365
366
 
366
- metadata_requirement = name.end_with?("\0")
367
-
368
367
  extra_message = if conflict.requirement_trees.first.size > 1
369
368
  ", which is required by gem '#{SharedHelpers.pretty_dependency(conflict.requirement_trees.first[-2])}',"
370
369
  else
371
370
  ""
372
371
  end
373
372
 
374
- if metadata_requirement
375
- o << "#{SharedHelpers.pretty_dependency(conflict.requirement)}#{extra_message} is not available in #{relevant_source}"
376
- else
377
- o << gem_not_found_message(name, conflict.requirement, relevant_source, extra_message)
378
- end
373
+ o << gem_not_found_message(name, conflict.requirement, relevant_source, extra_message)
379
374
  end
380
375
  end,
381
376
  :version_for_spec => lambda {|spec| spec.version },
@@ -103,7 +103,7 @@ module Bundler
103
103
 
104
104
  def self.system
105
105
  ruby_engine = RUBY_ENGINE.dup
106
- ruby_version = ENV.fetch("BUNDLER_SPEC_RUBY_VERSION") { RUBY_VERSION }.dup
106
+ ruby_version = RUBY_VERSION.dup
107
107
  ruby_engine_version = RUBY_ENGINE_VERSION.dup
108
108
  patchlevel = RUBY_PATCHLEVEL.to_s
109
109