rubygems-update 2.7.3 → 2.7.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (179) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +6 -30
  3. data/History.txt +146 -0
  4. data/Manifest.txt +5 -4
  5. data/Rakefile +19 -2
  6. data/bundler/CHANGELOG.md +143 -0
  7. data/bundler/README.md +5 -1
  8. data/bundler/bundler.gemspec +4 -1
  9. data/bundler/lib/bundler.rb +12 -8
  10. data/bundler/lib/bundler/build_metadata.rb +19 -2
  11. data/bundler/lib/bundler/cli.rb +3 -1
  12. data/bundler/lib/bundler/cli/check.rb +1 -1
  13. data/bundler/lib/bundler/cli/exec.rb +4 -4
  14. data/bundler/lib/bundler/cli/gem.rb +6 -3
  15. data/bundler/lib/bundler/cli/init.rb +6 -5
  16. data/bundler/lib/bundler/cli/install.rb +2 -2
  17. data/bundler/lib/bundler/cli/outdated.rb +1 -1
  18. data/bundler/lib/bundler/cli/update.rb +6 -4
  19. data/bundler/lib/bundler/compact_index_client/updater.rb +10 -1
  20. data/bundler/lib/bundler/current_ruby.rb +8 -1
  21. data/bundler/lib/bundler/definition.rb +34 -24
  22. data/bundler/lib/bundler/dep_proxy.rb +2 -2
  23. data/bundler/lib/bundler/dependency.rb +1 -0
  24. data/bundler/lib/bundler/deprecate.rb +2 -1
  25. data/bundler/lib/bundler/endpoint_specification.rb +1 -1
  26. data/bundler/lib/bundler/env.rb +10 -8
  27. data/bundler/lib/bundler/fetcher.rb +3 -3
  28. data/bundler/lib/bundler/fetcher/downloader.rb +10 -5
  29. data/bundler/lib/bundler/fetcher/index.rb +2 -2
  30. data/bundler/lib/bundler/friendly_errors.rb +2 -0
  31. data/bundler/lib/bundler/gem_helper.rb +1 -1
  32. data/bundler/lib/bundler/gem_version_promoter.rb +12 -0
  33. data/bundler/lib/bundler/injector.rb +5 -5
  34. data/bundler/lib/bundler/installer.rb +12 -4
  35. data/bundler/lib/bundler/installer/gem_installer.rb +9 -2
  36. data/bundler/lib/bundler/installer/parallel_installer.rb +1 -1
  37. data/bundler/lib/bundler/lazy_specification.rb +1 -1
  38. data/bundler/lib/bundler/mirror.rb +2 -2
  39. data/bundler/lib/bundler/plugin.rb +2 -2
  40. data/bundler/lib/bundler/plugin/index.rb +7 -2
  41. data/bundler/lib/bundler/process_lock.rb +1 -1
  42. data/bundler/lib/bundler/resolver.rb +14 -10
  43. data/bundler/lib/bundler/resolver/spec_group.rb +0 -5
  44. data/bundler/lib/bundler/ruby_version.rb +1 -1
  45. data/bundler/lib/bundler/rubygems_integration.rb +9 -3
  46. data/bundler/lib/bundler/runtime.rb +2 -2
  47. data/bundler/lib/bundler/shared_helpers.rb +15 -3
  48. data/bundler/lib/bundler/source/git.rb +2 -1
  49. data/bundler/lib/bundler/source/git/git_proxy.rb +6 -1
  50. data/bundler/lib/bundler/source/metadata.rb +1 -1
  51. data/bundler/lib/bundler/source/rubygems.rb +13 -6
  52. data/bundler/lib/bundler/source/rubygems/remote.rb +4 -1
  53. data/bundler/lib/bundler/spec_set.rb +4 -1
  54. data/bundler/lib/bundler/templates/.document +1 -0
  55. data/bundler/lib/bundler/templates/Executable +11 -3
  56. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +8 -2
  57. data/bundler/lib/bundler/templates/newgem/{.travis.yml.tt → travis.yml.tt} +2 -0
  58. data/bundler/lib/bundler/ui/shell.rb +3 -1
  59. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +11 -1
  60. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +7 -2
  61. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  62. data/bundler/lib/bundler/version.rb +1 -1
  63. data/bundler/man/bundle-binstubs.ronn +3 -3
  64. data/bundler/man/bundle-check.ronn +3 -3
  65. data/bundler/man/bundle-config.ronn +13 -9
  66. data/bundler/man/bundle-doctor.ronn +33 -0
  67. data/bundler/man/bundle-exec.ronn +3 -3
  68. data/bundler/man/bundle-gem.ronn +1 -1
  69. data/bundler/man/bundle-init.ronn +15 -4
  70. data/bundler/man/bundle-inject.ronn +3 -3
  71. data/bundler/man/bundle-install.ronn +12 -3
  72. data/bundler/man/bundle-lock.ronn +1 -1
  73. data/bundler/man/bundle-outdated.ronn +1 -1
  74. data/bundler/man/bundle-package.ronn +3 -3
  75. data/bundler/man/bundle-show.ronn +3 -2
  76. data/bundler/man/bundle-update.ronn +18 -14
  77. data/bundler/man/bundle-viz.ronn +1 -1
  78. data/bundler/man/bundle.ronn +27 -27
  79. data/bundler/man/gemfile.5.ronn +24 -9
  80. data/lib/rubygems.rb +30 -17
  81. data/lib/rubygems/bundler_version_finder.rb +9 -22
  82. data/lib/rubygems/command.rb +9 -1
  83. data/lib/rubygems/command_manager.rb +6 -4
  84. data/lib/rubygems/commands/generate_index_command.rb +1 -1
  85. data/lib/rubygems/commands/install_command.rb +7 -0
  86. data/lib/rubygems/commands/owner_command.rb +4 -1
  87. data/lib/rubygems/commands/push_command.rb +37 -4
  88. data/lib/rubygems/commands/setup_command.rb +22 -7
  89. data/lib/rubygems/commands/uninstall_command.rb +1 -1
  90. data/lib/rubygems/commands/unpack_command.rb +3 -3
  91. data/lib/rubygems/config_file.rb +1 -1
  92. data/lib/rubygems/core_ext/kernel_require.rb +2 -7
  93. data/lib/rubygems/dependency.rb +1 -0
  94. data/lib/rubygems/dependency_installer.rb +4 -2
  95. data/lib/rubygems/exceptions.rb +5 -1
  96. data/lib/rubygems/ext/builder.rb +1 -1
  97. data/lib/rubygems/gemcutter_utilities.rb +5 -2
  98. data/lib/rubygems/indexer.rb +6 -5
  99. data/lib/rubygems/install_update_options.rb +1 -1
  100. data/lib/rubygems/installer.rb +38 -10
  101. data/lib/rubygems/package.rb +54 -7
  102. data/lib/rubygems/package/file_source.rb +2 -2
  103. data/lib/rubygems/package/old.rb +1 -1
  104. data/lib/rubygems/package/tar_header.rb +17 -10
  105. data/lib/rubygems/package/tar_writer.rb +4 -3
  106. data/lib/rubygems/remote_fetcher.rb +1 -1
  107. data/lib/rubygems/request_set.rb +28 -17
  108. data/lib/rubygems/request_set/lockfile.rb +1 -1
  109. data/lib/rubygems/requirement.rb +14 -3
  110. data/lib/rubygems/resolver/api_specification.rb +5 -0
  111. data/lib/rubygems/security.rb +7 -2
  112. data/lib/rubygems/security/trust_dir.rb +1 -1
  113. data/lib/rubygems/server.rb +16 -4
  114. data/lib/rubygems/source.rb +2 -2
  115. data/lib/rubygems/specification.rb +22 -14
  116. data/lib/rubygems/ssl_certs/{index.rubygems.org → rubygems.org}/GlobalSignRootCA.pem +0 -0
  117. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  118. data/lib/rubygems/stub_specification.rb +2 -0
  119. data/lib/rubygems/test_case.rb +36 -12
  120. data/lib/rubygems/test_utilities.rb +2 -2
  121. data/lib/rubygems/user_interaction.rb +9 -2
  122. data/lib/rubygems/util.rb +2 -1
  123. data/lib/rubygems/util/licenses.rb +35 -4
  124. data/lib/rubygems/validator.rb +3 -3
  125. data/lib/rubygems/version.rb +7 -1
  126. data/lib/ubygems.rb +3 -0
  127. data/test/rubygems/test_bundled_ca.rb +7 -4
  128. data/test/rubygems/test_gem.rb +62 -24
  129. data/test/rubygems/test_gem_bundler_version_finder.rb +8 -7
  130. data/test/rubygems/test_gem_command_manager.rb +2 -2
  131. data/test/rubygems/test_gem_commands_build_command.rb +2 -0
  132. data/test/rubygems/test_gem_commands_cleanup_command.rb +1 -1
  133. data/test/rubygems/test_gem_commands_install_command.rb +38 -0
  134. data/test/rubygems/test_gem_commands_owner_command.rb +25 -0
  135. data/test/rubygems/test_gem_commands_push_command.rb +25 -5
  136. data/test/rubygems/test_gem_commands_setup_command.rb +46 -21
  137. data/test/rubygems/test_gem_commands_signin_command.rb +1 -1
  138. data/test/rubygems/test_gem_commands_uninstall_command.rb +3 -3
  139. data/test/rubygems/test_gem_dependency.rb +1 -1
  140. data/test/rubygems/test_gem_dependency_installer.rb +1 -1
  141. data/test/rubygems/test_gem_doctor.rb +2 -2
  142. data/test/rubygems/test_gem_ext_builder.rb +6 -6
  143. data/test/rubygems/test_gem_ext_rake_builder.rb +0 -4
  144. data/test/rubygems/test_gem_gemcutter_utilities.rb +4 -4
  145. data/test/rubygems/test_gem_indexer.rb +1 -2
  146. data/test/rubygems/test_gem_install_update_options.rb +4 -0
  147. data/test/rubygems/test_gem_installer.rb +114 -4
  148. data/test/rubygems/test_gem_package.rb +178 -21
  149. data/test/rubygems/test_gem_package_old.rb +1 -1
  150. data/test/rubygems/test_gem_package_tar_header.rb +21 -0
  151. data/test/rubygems/test_gem_rdoc.rb +2 -0
  152. data/test/rubygems/test_gem_remote_fetcher.rb +7 -3
  153. data/test/rubygems/test_gem_request.rb +5 -2
  154. data/test/rubygems/test_gem_request_connection_pools.rb +6 -7
  155. data/test/rubygems/test_gem_request_set.rb +7 -7
  156. data/test/rubygems/test_gem_request_set_lockfile.rb +4 -4
  157. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +1 -1
  158. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +1 -1
  159. data/test/rubygems/test_gem_requirement.rb +6 -0
  160. data/test/rubygems/test_gem_resolver_api_specification.rb +24 -0
  161. data/test/rubygems/test_gem_resolver_git_specification.rb +1 -1
  162. data/test/rubygems/test_gem_resolver_installer_set.rb +1 -1
  163. data/test/rubygems/test_gem_security_policy.rb +3 -3
  164. data/test/rubygems/test_gem_server.rb +177 -12
  165. data/test/rubygems/test_gem_source.rb +3 -3
  166. data/test/rubygems/test_gem_source_git.rb +1 -1
  167. data/test/rubygems/test_gem_specification.rb +64 -31
  168. data/test/rubygems/test_gem_stream_ui.rb +2 -2
  169. data/test/rubygems/test_gem_stub_specification.rb +7 -7
  170. data/test/rubygems/test_gem_text.rb +5 -0
  171. data/test/rubygems/test_gem_util.rb +25 -0
  172. data/test/rubygems/test_gem_version.rb +40 -2
  173. data/test/rubygems/test_require.rb +15 -21
  174. data/util/ci +1 -0
  175. data/util/generate_spdx_license_list.rb +15 -6
  176. data/util/update_bundled_ca_certificates.rb +1 -3
  177. metadata +14 -13
  178. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  179. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
@@ -10,11 +10,11 @@ module Bundler
10
10
  end
11
11
 
12
12
  def hash
13
- @hash ||= dep.hash
13
+ @hash ||= [dep, __platform].hash
14
14
  end
15
15
 
16
16
  def ==(other)
17
- return if other.nil?
17
+ return false if other.class != self.class
18
18
  dep == other.dep && __platform == other.__platform
19
19
  end
20
20
 
@@ -30,6 +30,7 @@ module Bundler
30
30
  :mri_24 => Gem::Platform::RUBY,
31
31
  :mri_25 => Gem::Platform::RUBY,
32
32
  :rbx => Gem::Platform::RUBY,
33
+ :truffleruby => Gem::Platform::RUBY,
33
34
  :jruby => Gem::Platform::JAVA,
34
35
  :jruby_18 => Gem::Platform::JAVA,
35
36
  :jruby_19 => Gem::Platform::JAVA,
@@ -8,7 +8,8 @@ rescue LoadError
8
8
  end
9
9
 
10
10
  module Bundler
11
- if defined? Bundler::Deprecate
11
+ # If Bundler::Deprecate is an autoload constant, we need to define it
12
+ if defined?(Bundler::Deprecate) && !autoload?(:Deprecate)
12
13
  # nothing to do!
13
14
  elsif defined? ::Deprecate
14
15
  Deprecate = ::Deprecate
@@ -123,7 +123,7 @@ module Bundler
123
123
  @required_ruby_version = Gem::Requirement.new(v)
124
124
  end
125
125
  end
126
- rescue => e
126
+ rescue StandardError => e
127
127
  raise GemspecError, "There was an error parsing the metadata for the gem #{name} (#{version}): #{e.class}\n#{e}\nThe metadata was #{data.inspect}"
128
128
  end
129
129
 
@@ -61,10 +61,10 @@ module Bundler
61
61
  end
62
62
 
63
63
  def self.read_file(filename)
64
- File.read(filename.to_s).strip
64
+ Bundler.read_file(filename.to_s).strip
65
65
  rescue Errno::ENOENT
66
66
  "<No #{filename} found>"
67
- rescue => e
67
+ rescue RuntimeError => e
68
68
  "#{e.class}: #{e.message}"
69
69
  end
70
70
 
@@ -88,7 +88,7 @@ module Bundler
88
88
 
89
89
  def self.version_of(script)
90
90
  return "not installed" unless Bundler.which(script)
91
- `#{script} --version`
91
+ `#{script} --version`.chomp
92
92
  end
93
93
 
94
94
  def self.chruby_version
@@ -110,11 +110,13 @@ module Bundler
110
110
  out << [" Gem Path", ENV.fetch("GEM_PATH") { Gem.path.join(File::PATH_SEPARATOR) }]
111
111
  out << [" User Path", Gem.user_dir]
112
112
  out << [" Bin Dir", Gem.bindir]
113
- out << ["OpenSSL"] if defined?(OpenSSL)
114
- out << [" Compiled", OpenSSL::OPENSSL_VERSION] if defined?(OpenSSL::OPENSSL_VERSION)
115
- out << [" Loaded", OpenSSL::OPENSSL_LIBRARY_VERSION] if defined?(OpenSSL::OPENSSL_LIBRARY_VERSION)
116
- out << [" Cert File", OpenSSL::X509::DEFAULT_CERT_FILE] if defined?(OpenSSL::X509::DEFAULT_CERT_FILE)
117
- out << [" Cert Dir", OpenSSL::X509::DEFAULT_CERT_DIR] if defined?(OpenSSL::X509::DEFAULT_CERT_DIR)
113
+ if defined?(OpenSSL)
114
+ out << ["OpenSSL"]
115
+ out << [" Compiled", OpenSSL::OPENSSL_VERSION] if defined?(OpenSSL::OPENSSL_VERSION)
116
+ out << [" Loaded", OpenSSL::OPENSSL_LIBRARY_VERSION] if defined?(OpenSSL::OPENSSL_LIBRARY_VERSION)
117
+ out << [" Cert File", OpenSSL::X509::DEFAULT_CERT_FILE] if defined?(OpenSSL::X509::DEFAULT_CERT_FILE)
118
+ out << [" Cert Dir", OpenSSL::X509::DEFAULT_CERT_DIR] if defined?(OpenSSL::X509::DEFAULT_CERT_DIR)
119
+ end
118
120
  out << ["Tools"]
119
121
  out << [" Git", git_version]
120
122
  out << [" RVM", ENV.fetch("rvm_version") { version_of("rvm") }]
@@ -96,11 +96,11 @@ module Bundler
96
96
 
97
97
  uri = URI.parse("#{remote_uri}#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}.rz")
98
98
  if uri.scheme == "file"
99
- Bundler.load_marshal Gem.inflate(Gem.read_binary(uri.path))
99
+ Bundler.load_marshal Bundler.rubygems.inflate(Gem.read_binary(uri.path))
100
100
  elsif cached_spec_path = gemspec_cached_path(spec_file_name)
101
101
  Bundler.load_gemspec(cached_spec_path)
102
102
  else
103
- Bundler.load_marshal Gem.inflate(downloader.fetch(uri).body)
103
+ Bundler.load_marshal Bundler.rubygems.inflate(downloader.fetch(uri).body)
104
104
  end
105
105
  rescue MarshalError
106
106
  raise HTTPError, "Gemspec #{spec} contained invalid data.\n" \
@@ -178,7 +178,7 @@ module Bundler
178
178
  # engine_version raises on unknown engines
179
179
  engine_version = begin
180
180
  ruby.engine_versions
181
- rescue
181
+ rescue RuntimeError
182
182
  "???"
183
183
  end
184
184
  agent << " #{ruby.engine}/#{ruby.versions_string(engine_version)}"
@@ -11,10 +11,10 @@ module Bundler
11
11
  @redirect_limit = redirect_limit
12
12
  end
13
13
 
14
- def fetch(uri, options = {}, counter = 0)
14
+ def fetch(uri, headers = {}, counter = 0)
15
15
  raise HTTPError, "Too many redirects" if counter >= redirect_limit
16
16
 
17
- response = request(uri, options)
17
+ response = request(uri, headers)
18
18
  Bundler.ui.debug("HTTP #{response.code} #{response.message} #{uri}")
19
19
 
20
20
  case response
@@ -26,7 +26,12 @@ module Bundler
26
26
  new_uri.user = uri.user
27
27
  new_uri.password = uri.password
28
28
  end
29
- fetch(new_uri, options, counter + 1)
29
+ fetch(new_uri, headers, counter + 1)
30
+ when Net::HTTPRequestedRangeNotSatisfiable
31
+ new_headers = headers.dup
32
+ new_headers.delete("Range")
33
+ new_headers["Accept-Encoding"] = "gzip"
34
+ fetch(uri, new_headers)
30
35
  when Net::HTTPRequestEntityTooLarge
31
36
  raise FallbackError, response.body
32
37
  when Net::HTTPUnauthorized
@@ -38,11 +43,11 @@ module Bundler
38
43
  end
39
44
  end
40
45
 
41
- def request(uri, options)
46
+ def request(uri, headers)
42
47
  validate_uri_scheme!(uri)
43
48
 
44
49
  Bundler.ui.debug "HTTP GET #{uri}"
45
- req = Net::HTTP::Get.new uri.request_uri, options
50
+ req = Net::HTTP::Get.new uri.request_uri, headers
46
51
  if uri.user
47
52
  user = CGI.unescape(uri.user)
48
53
  password = uri.password ? CGI.unescape(uri.password) : nil
@@ -29,11 +29,11 @@ module Bundler
29
29
 
30
30
  uri = URI.parse("#{remote_uri}#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}.rz")
31
31
  if uri.scheme == "file"
32
- Bundler.load_marshal Gem.inflate(Gem.read_binary(uri.path))
32
+ Bundler.load_marshal Bundler.rubygems.inflate(Gem.read_binary(uri.path))
33
33
  elsif cached_spec_path = gemspec_cached_path(spec_file_name)
34
34
  Bundler.load_gemspec(cached_spec_path)
35
35
  else
36
- Bundler.load_marshal Gem.inflate(downloader.fetch(uri).body)
36
+ Bundler.load_marshal Bundler.rubygems.inflate(downloader.fetch(uri).body)
37
37
  end
38
38
  rescue MarshalError
39
39
  raise HTTPError, "Gemspec #{spec} contained invalid data.\n" \
@@ -45,6 +45,8 @@ module Bundler
45
45
  "Alternatively, you can increase the amount of memory the JVM is able to use by running Bundler with jruby -J-Xmx1024m -S bundle (JRuby defaults to 500MB)."
46
46
  else request_issue_report_for(error)
47
47
  end
48
+ rescue
49
+ raise error
48
50
  end
49
51
 
50
52
  def exit_status(error)
@@ -153,7 +153,7 @@ module Bundler
153
153
  sh "git tag -m \"Version #{version}\" #{version_tag}"
154
154
  Bundler.ui.confirm "Tagged #{version_tag}."
155
155
  yield if block_given?
156
- rescue
156
+ rescue RuntimeError
157
157
  Bundler.ui.error "Untagging #{version_tag} due to error."
158
158
  sh_with_code "git tag -d #{version_tag}"
159
159
  raise
@@ -22,6 +22,8 @@ module Bundler
22
22
  # existing in the referenced source.
23
23
  attr_accessor :strict
24
24
 
25
+ attr_accessor :prerelease_specified
26
+
25
27
  # Given a list of locked_specs and a list of gems to unlock creates a
26
28
  # GemVersionPromoter instance.
27
29
  #
@@ -37,6 +39,7 @@ module Bundler
37
39
  @locked_specs = locked_specs
38
40
  @unlock_gems = unlock_gems
39
41
  @sort_versions = {}
42
+ @prerelease_specified = {}
40
43
  end
41
44
 
42
45
  # @param value [Symbol] One of three Symbols: :major, :minor or :patch.
@@ -121,6 +124,15 @@ module Bundler
121
124
  result = spec_groups.sort do |a, b|
122
125
  @a_ver = a.version
123
126
  @b_ver = b.version
127
+
128
+ unless @prerelease_specified[@gem_name]
129
+ a_pre = @a_ver.prerelease?
130
+ b_pre = @b_ver.prerelease?
131
+
132
+ next -1 if a_pre && !b_pre
133
+ next 1 if b_pre && !a_pre
134
+ end
135
+
124
136
  if major?
125
137
  @a_ver <=> @b_ver
126
138
  elsif either_version_older_than_locked
@@ -12,8 +12,11 @@ module Bundler
12
12
  @options = options
13
13
  end
14
14
 
15
+ # @param [Pathname] gemfile_path The Gemfile in which to inject the new dependency.
16
+ # @param [Pathname] lockfile_path The lockfile in which to inject the new dependency.
17
+ # @return [Array]
15
18
  def inject(gemfile_path, lockfile_path)
16
- if Bundler.frozen?
19
+ if Bundler.frozen_bundle?
17
20
  # ensure the lock and Gemfile are synced
18
21
  Bundler.definition.ensure_equivalent_gemfile_and_lockfile(true)
19
22
  end
@@ -72,7 +75,7 @@ module Bundler
72
75
  end
73
76
 
74
77
  if d.groups != Array(:default)
75
- group = d.groups.size == 1 ? ", :group => #{d.groups.inspect}" : ", :groups => #{d.groups.inspect}"
78
+ group = d.groups.size == 1 ? ", :group => #{d.groups.first.inspect}" : ", :groups => #{d.groups.inspect}"
76
79
  end
77
80
 
78
81
  source = ", :source => \"#{d.source}\"" unless d.source.nil?
@@ -84,9 +87,6 @@ module Bundler
84
87
  def append_to(gemfile_path, new_gem_lines)
85
88
  gemfile_path.open("a") do |f|
86
89
  f.puts
87
- if @options["timestamp"] || @options["timestamp"].nil?
88
- f.puts "# Added at #{Time.now} by #{`whoami`.chomp}:"
89
- end
90
90
  f.puts new_gem_lines
91
91
  end
92
92
  end
@@ -70,7 +70,7 @@ module Bundler
70
70
  create_bundle_path
71
71
 
72
72
  ProcessLock.lock do
73
- if Bundler.frozen?
73
+ if Bundler.frozen_bundle?
74
74
  @definition.ensure_equivalent_gemfile_and_lockfile(options[:deployment])
75
75
  end
76
76
 
@@ -90,7 +90,7 @@ module Bundler
90
90
  end
91
91
  install(options)
92
92
 
93
- lock unless Bundler.frozen?
93
+ lock unless Bundler.frozen_bundle?
94
94
  Standalone.new(options[:standalone], @definition).generate if options[:standalone]
95
95
  end
96
96
  end
@@ -135,7 +135,11 @@ module Bundler
135
135
  end
136
136
 
137
137
  File.open(binstub_path, "w", 0o777 & ~File.umask) do |f|
138
- f.puts ERB.new(template, nil, "-").result(binding)
138
+ if RUBY_VERSION >= "2.6"
139
+ f.puts ERB.new(template, :trim_mode => "-").result(binding)
140
+ else
141
+ f.puts ERB.new(template, nil, "-").result(binding)
142
+ end
139
143
  end
140
144
  end
141
145
 
@@ -171,7 +175,11 @@ module Bundler
171
175
  executable_path = Pathname(spec.full_gem_path).join(spec.bindir, executable).relative_path_from(bin_path)
172
176
  executable_path = executable_path
173
177
  File.open "#{bin_path}/#{executable}", "w", 0o755 do |f|
174
- f.puts ERB.new(template, nil, "-").result(binding)
178
+ if RUBY_VERSION >= "2.6"
179
+ f.puts ERB.new(template, :trim_mode => "-").result(binding)
180
+ else
181
+ f.puts ERB.new(template, nil, "-").result(binding)
182
+ end
175
183
  end
176
184
  end
177
185
  end
@@ -21,7 +21,7 @@ module Bundler
21
21
  raise
22
22
  rescue Errno::ENOSPC
23
23
  return false, out_of_space_message
24
- rescue => e
24
+ rescue StandardError => e
25
25
  return false, specific_failure_message(e)
26
26
  end
27
27
 
@@ -44,7 +44,14 @@ module Bundler
44
44
  end
45
45
 
46
46
  def gem_install_message
47
- "Make sure that `gem install #{spec.name} -v '#{spec.version}'` succeeds before bundling."
47
+ source = spec.source
48
+ return unless source.respond_to?(:remotes)
49
+
50
+ if source.remotes.size == 1
51
+ "Make sure that `gem install #{spec.name} -v '#{spec.version}' --source '#{source.remotes.first}'` succeeds before bundling."
52
+ else
53
+ "Make sure that `gem install #{spec.name} -v '#{spec.version}'` succeeds before bundling."
54
+ end
48
55
  end
49
56
 
50
57
  def spec_settings
@@ -160,7 +160,7 @@ module Bundler
160
160
  )
161
161
  success, message = begin
162
162
  gem_installer.install_from_spec
163
- rescue => e
163
+ rescue RuntimeError => e
164
164
  raise e, "#{e}\n\n#{require_tree_for_spec(spec_install.spec)}"
165
165
  end
166
166
  if success
@@ -80,7 +80,7 @@ module Bundler
80
80
  "To use the platform-specific version of the gem, run `bundle config specific_platform true` and install again."
81
81
  search = source.specs.search(self).last
82
82
  end
83
- search.dependencies = dependencies if search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification)
83
+ search.dependencies = dependencies if search && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification))
84
84
  search
85
85
  end
86
86
  end
@@ -152,7 +152,7 @@ module Bundler
152
152
  socket.connect_nonblock(address)
153
153
  rescue Errno::EINPROGRESS
154
154
  wait_for_writtable_socket(socket, address, timeout)
155
- rescue # Connection failed somehow, again
155
+ rescue RuntimeError # Connection failed somehow, again
156
156
  false
157
157
  end
158
158
  end
@@ -172,7 +172,7 @@ module Bundler
172
172
  socket.connect_nonblock(address)
173
173
  rescue Errno::EISCONN
174
174
  true
175
- rescue # Connection failed
175
+ rescue StandardError # Connection failed
176
176
  false
177
177
  end
178
178
  end
@@ -66,7 +66,7 @@ module Bundler
66
66
  installed_specs = Installer.new.install_definition(definition)
67
67
 
68
68
  save_plugins plugins, installed_specs, builder.inferred_plugins
69
- rescue => e
69
+ rescue RuntimeError => e
70
70
  unless e.is_a?(GemfileError)
71
71
  Bundler.ui.error "Failed to install plugin: #{e.message}\n #{e.backtrace[0]}"
72
72
  end
@@ -264,7 +264,7 @@ module Bundler
264
264
  load path.join(PLUGIN_FILE_NAME)
265
265
 
266
266
  @loaded_plugin_names << name
267
- rescue => e
267
+ rescue RuntimeError => e
268
268
  Bundler.ui.error "Failed loading plugin #{name}: #{e.message}"
269
269
  raise
270
270
  end
@@ -29,7 +29,12 @@ module Bundler
29
29
  @hooks = {}
30
30
  @load_paths = {}
31
31
 
32
- load_index(global_index_file, true)
32
+ begin
33
+ load_index(global_index_file, true)
34
+ rescue GenericSystemCallError
35
+ # no need to fail when on a read-only FS, for example
36
+ nil
37
+ end
33
38
  load_index(local_index_file) if SharedHelpers.in_bundle?
34
39
  end
35
40
 
@@ -58,7 +63,7 @@ module Bundler
58
63
  @plugin_paths[name] = path
59
64
  @load_paths[name] = load_paths
60
65
  save_index
61
- rescue
66
+ rescue StandardError
62
67
  @commands = old_commands
63
68
  raise
64
69
  end
@@ -12,7 +12,7 @@ module Bundler
12
12
  yield
13
13
  f.flock(File::LOCK_UN)
14
14
  end
15
- rescue Errno::EACCES, Errno::ENOLCK
15
+ rescue Errno::EACCES, Errno::ENOLCK, *[SharedHelpers.const_get_safely(:ENOTSUP, Errno)].compact
16
16
  # In the case the user does not have access to
17
17
  # create the lock file or is using NFS where
18
18
  # locks are not available we skip locking.
@@ -39,10 +39,11 @@ module Bundler
39
39
  @gem_version_promoter = gem_version_promoter
40
40
  @allow_bundler_dependency_conflicts = Bundler.feature_flag.allow_bundler_dependency_conflicts?
41
41
  @lockfile_uses_separate_rubygems_sources = Bundler.feature_flag.lockfile_uses_separate_rubygems_sources?
42
+ @use_gvp = !@gem_version_promoter.major?
42
43
  end
43
44
 
44
45
  def start(requirements)
45
- @prerelease_specified = {}
46
+ @gem_version_promoter.prerelease_specified = @prerelease_specified = {}
46
47
  requirements.each {|dep| @prerelease_specified[dep.name] ||= dep.prerelease? }
47
48
 
48
49
  verify_gemfile_dependencies_are_found!(requirements)
@@ -104,16 +105,17 @@ module Bundler
104
105
  index = index_for(dependency)
105
106
  results = index.search(dependency, @base[dependency.name])
106
107
 
107
- unless @prerelease_specified[dependency.name]
108
+ if vertex = @base_dg.vertex_named(dependency.name)
109
+ locked_requirement = vertex.payload.requirement
110
+ end
111
+
112
+ if !@prerelease_specified[dependency.name] && (!@use_gvp || locked_requirement.nil?)
108
113
  # Move prereleases to the beginning of the list, so they're considered
109
114
  # last during resolution.
110
115
  pre, results = results.partition {|spec| spec.version.prerelease? }
111
116
  results = pre + results
112
117
  end
113
118
 
114
- if vertex = @base_dg.vertex_named(dependency.name)
115
- locked_requirement = vertex.payload.requirement
116
- end
117
119
  spec_groups = if results.any?
118
120
  nested = []
119
121
  results.each do |spec|
@@ -179,10 +181,6 @@ module Bundler
179
181
 
180
182
  def requirement_satisfied_by?(requirement, activated, spec)
181
183
  return false unless requirement.matches_spec?(spec) || spec.source.is_a?(Source::Gemspec)
182
- if spec.version.prerelease? && !requirement.prerelease? && search_for(requirement).any? {|sg| !sg.version.prerelease? }
183
- vertex = activated.vertex_named(spec.name)
184
- return false if vertex.requirements.none?(&:prerelease?)
185
- end
186
184
  spec.activate_platform!(requirement.__platform) if !@platforms || @platforms.include?(requirement.__platform)
187
185
  true
188
186
  end
@@ -245,7 +243,8 @@ module Bundler
245
243
  if all <= 1
246
244
  all - 1_000_000
247
245
  else
248
- search = search_for(dependency).size
246
+ search = search_for(dependency)
247
+ search = @prerelease_specified[dependency.name] ? search.count : search.count {|s| !s.version.prerelease? }
249
248
  search - all
250
249
  end
251
250
  end
@@ -305,6 +304,11 @@ module Bundler
305
304
  :solver_name => "Bundler",
306
305
  :possibility_type => "gem",
307
306
  :reduce_trees => lambda do |trees|
307
+ # called first, because we want to reduce the amount of work required to find maximal empty sets
308
+ trees = trees.uniq {|t| t.flatten.map {|dep| [dep.name, dep.requirement] } }
309
+
310
+ # bail out if tree size is too big for Array#combination to make any sense
311
+ return trees if trees.size > 15
308
312
  maximal = 1.upto(trees.size).map do |size|
309
313
  trees.map(&:last).flatten(1).combination(size).to_a
310
314
  end.flatten(1).select do |deps|