rubygems-update 3.6.9 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +853 -790
  3. data/CONTRIBUTING.md +9 -0
  4. data/Manifest.txt +4 -21
  5. data/README.md +1 -1
  6. data/SECURITY.md +7 -0
  7. data/bundler/CHANGELOG.md +1093 -1033
  8. data/bundler/README.md +7 -7
  9. data/bundler/bundler.gemspec +2 -2
  10. data/bundler/lib/bundler/build_metadata.rb +10 -11
  11. data/bundler/lib/bundler/cli/common.rb +1 -1
  12. data/bundler/lib/bundler/cli/config.rb +2 -2
  13. data/bundler/lib/bundler/cli/gem.rb +62 -30
  14. data/bundler/lib/bundler/cli/install.rb +4 -4
  15. data/bundler/lib/bundler/cli/outdated.rb +1 -1
  16. data/bundler/lib/bundler/cli/update.rb +2 -2
  17. data/bundler/lib/bundler/cli.rb +10 -14
  18. data/bundler/lib/bundler/compact_index_client.rb +1 -5
  19. data/bundler/lib/bundler/current_ruby.rb +27 -3
  20. data/bundler/lib/bundler/definition.rb +21 -22
  21. data/bundler/lib/bundler/dependency.rb +1 -1
  22. data/bundler/lib/bundler/dsl.rb +33 -23
  23. data/bundler/lib/bundler/feature_flag.rb +15 -12
  24. data/bundler/lib/bundler/fetcher/dependency.rb +2 -1
  25. data/bundler/lib/bundler/fetcher/downloader.rb +33 -7
  26. data/bundler/lib/bundler/fetcher.rb +49 -19
  27. data/bundler/lib/bundler/friendly_errors.rb +2 -1
  28. data/bundler/lib/bundler/index.rb +7 -2
  29. data/bundler/lib/bundler/installer.rb +5 -4
  30. data/bundler/lib/bundler/lazy_specification.rb +9 -7
  31. data/bundler/lib/bundler/lockfile_parser.rb +21 -5
  32. data/bundler/lib/bundler/man/bundle-add.1 +1 -1
  33. data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
  34. data/bundler/lib/bundler/man/bundle-cache.1 +1 -1
  35. data/bundler/lib/bundler/man/bundle-check.1 +1 -1
  36. data/bundler/lib/bundler/man/bundle-clean.1 +1 -1
  37. data/bundler/lib/bundler/man/bundle-config.1 +172 -126
  38. data/bundler/lib/bundler/man/bundle-config.1.ronn +91 -91
  39. data/bundler/lib/bundler/man/bundle-console.1 +1 -1
  40. data/bundler/lib/bundler/man/bundle-doctor.1 +43 -4
  41. data/bundler/lib/bundler/man/bundle-doctor.1.ronn +48 -4
  42. data/bundler/lib/bundler/man/bundle-env.1 +1 -1
  43. data/bundler/lib/bundler/man/bundle-exec.1 +1 -1
  44. data/bundler/lib/bundler/man/bundle-fund.1 +1 -1
  45. data/bundler/lib/bundler/man/bundle-gem.1 +67 -44
  46. data/bundler/lib/bundler/man/bundle-gem.1.ronn +8 -4
  47. data/bundler/lib/bundler/man/bundle-help.1 +1 -1
  48. data/bundler/lib/bundler/man/bundle-info.1 +1 -1
  49. data/bundler/lib/bundler/man/bundle-init.1 +1 -1
  50. data/bundler/lib/bundler/man/bundle-inject.1 +2 -2
  51. data/bundler/lib/bundler/man/bundle-inject.1.ronn +1 -1
  52. data/bundler/lib/bundler/man/bundle-install.1 +1 -1
  53. data/bundler/lib/bundler/man/bundle-issue.1 +1 -1
  54. data/bundler/lib/bundler/man/bundle-licenses.1 +1 -1
  55. data/bundler/lib/bundler/man/bundle-list.1 +1 -1
  56. data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
  57. data/bundler/lib/bundler/man/bundle-open.1 +1 -1
  58. data/bundler/lib/bundler/man/bundle-outdated.1 +1 -1
  59. data/bundler/lib/bundler/man/bundle-platform.1 +1 -1
  60. data/bundler/lib/bundler/man/bundle-plugin.1 +1 -1
  61. data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
  62. data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
  63. data/bundler/lib/bundler/man/bundle-show.1 +1 -1
  64. data/bundler/lib/bundler/man/bundle-update.1 +1 -1
  65. data/bundler/lib/bundler/man/bundle-version.1 +1 -1
  66. data/bundler/lib/bundler/man/bundle-viz.1 +1 -1
  67. data/bundler/lib/bundler/man/bundle.1 +1 -1
  68. data/bundler/lib/bundler/man/gemfile.5 +1 -1
  69. data/bundler/lib/bundler/match_platform.rb +31 -12
  70. data/bundler/lib/bundler/materialization.rb +2 -2
  71. data/bundler/lib/bundler/resolver/package.rb +1 -1
  72. data/bundler/lib/bundler/resolver.rb +1 -3
  73. data/bundler/lib/bundler/rubygems_ext.rb +116 -120
  74. data/bundler/lib/bundler/rubygems_integration.rb +11 -6
  75. data/bundler/lib/bundler/runtime.rb +1 -1
  76. data/bundler/lib/bundler/self_manager.rb +32 -42
  77. data/bundler/lib/bundler/settings/validator.rb +0 -23
  78. data/bundler/lib/bundler/settings.rb +4 -6
  79. data/bundler/lib/bundler/shared_helpers.rb +6 -4
  80. data/bundler/lib/bundler/source/git/git_proxy.rb +3 -3
  81. data/bundler/lib/bundler/source/path.rb +7 -0
  82. data/bundler/lib/bundler/source_list.rb +1 -5
  83. data/bundler/lib/bundler/source_map.rb +1 -1
  84. data/bundler/lib/bundler/spec_set.rb +7 -3
  85. data/bundler/lib/bundler/templates/Executable +0 -11
  86. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +2 -0
  87. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +6 -5
  88. data/bundler/lib/bundler/ui/shell.rb +2 -2
  89. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
  90. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +2 -1
  91. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +81 -42
  92. data/bundler/lib/bundler/version.rb +10 -2
  93. data/bundler/lib/bundler/worker.rb +1 -1
  94. data/bundler/lib/bundler.rb +14 -12
  95. data/doc/bundler/UPGRADING.md +137 -127
  96. data/doc/rubygems/CONTRIBUTING.md +1 -1
  97. data/lib/rubygems/basic_specification.rb +7 -0
  98. data/lib/rubygems/commands/pristine_command.rb +9 -12
  99. data/lib/rubygems/commands/setup_command.rb +2 -2
  100. data/lib/rubygems/core_ext/kernel_require.rb +5 -2
  101. data/lib/rubygems/ext/cargo_builder.rb +4 -0
  102. data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +10 -3
  103. data/lib/rubygems/gemcutter_utilities.rb +1 -1
  104. data/lib/rubygems/installer.rb +45 -50
  105. data/lib/rubygems/platform.rb +142 -39
  106. data/lib/rubygems/remote_fetcher.rb +3 -3
  107. data/lib/rubygems/request_set.rb +3 -6
  108. data/lib/rubygems/resolver/best_set.rb +1 -1
  109. data/lib/rubygems/resolver/source_set.rb +1 -1
  110. data/lib/rubygems/resolver.rb +1 -1
  111. data/lib/rubygems/s3_uri_signer.rb +5 -3
  112. data/lib/rubygems/source.rb +28 -22
  113. data/lib/rubygems/specification.rb +2 -2
  114. data/lib/rubygems/uri_formatter.rb +2 -1
  115. data/lib/rubygems/util/licenses.rb +21 -0
  116. data/lib/rubygems/vendor/net-http/lib/net/http.rb +14 -19
  117. data/lib/rubygems/vendor/resolv/lib/resolv.rb +50 -22
  118. data/lib/rubygems.rb +65 -7
  119. data/rubygems-update.gemspec +2 -2
  120. data/setup.rb +1 -1
  121. metadata +7 -24
  122. data/bundler/lib/bundler/gem_helpers.rb +0 -144
  123. data/bundler/lib/bundler/templates/Executable.bundler +0 -109
  124. data/bundler/lib/bundler/vendor/fileutils/.document +0 -1
  125. data/bundler/lib/bundler/vendor/net-http-persistent/.document +0 -1
  126. data/bundler/lib/bundler/vendor/pub_grub/.document +0 -1
  127. data/bundler/lib/bundler/vendor/securerandom/.document +0 -1
  128. data/bundler/lib/bundler/vendor/thor/.document +0 -1
  129. data/bundler/lib/bundler/vendor/tsort/.document +0 -1
  130. data/bundler/lib/bundler/vendor/uri/.document +0 -1
  131. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA.pem +0 -21
  132. data/lib/rubygems/vendor/molinillo/.document +0 -1
  133. data/lib/rubygems/vendor/net-http/.document +0 -1
  134. data/lib/rubygems/vendor/net-protocol/.document +0 -1
  135. data/lib/rubygems/vendor/optparse/.document +0 -1
  136. data/lib/rubygems/vendor/resolv/.document +0 -1
  137. data/lib/rubygems/vendor/securerandom/.document +0 -1
  138. data/lib/rubygems/vendor/timeout/.document +0 -1
  139. data/lib/rubygems/vendor/tsort/.document +0 -1
  140. data/lib/rubygems/vendor/uri/.document +0 -1
  141. /data/lib/rubygems/ssl_certs/rubygems.org/{GlobalSignRootCA_R3.pem → GlobalSign.pem} +0 -0
  142. /data/{bundler/lib/bundler/vendor/connection_pool → lib/rubygems/vendor}/.document +0 -0
@@ -167,6 +167,13 @@ module Bundler
167
167
  next unless spec = load_gemspec(file)
168
168
  spec.source = self
169
169
 
170
+ # The ignore attribute is for ignoring installed gems that don't
171
+ # have extensions correctly compiled for activation. In the case of
172
+ # path sources, there's a single version of each gem in the path
173
+ # source available to Bundler, so we always certainly want to
174
+ # consider that for activation and never makes sense to ignore it.
175
+ spec.ignored = false
176
+
170
177
  # Validation causes extension_dir to be calculated, which depends
171
178
  # on #source, so we validate here instead of load_gemspec
172
179
  validate_spec(spec)
@@ -103,7 +103,7 @@ module Bundler
103
103
  end
104
104
 
105
105
  def get(source)
106
- source_list_for(source).find {|s| equivalent_source?(source, s) }
106
+ source_list_for(source).find {|s| s.include?(source) }
107
107
  end
108
108
 
109
109
  def lock_sources
@@ -265,9 +265,5 @@ module Bundler
265
265
  def equivalent_sources?(lock_sources, replacement_sources)
266
266
  lock_sources.sort_by(&:identifier) == replacement_sources.sort_by(&:identifier)
267
267
  end
268
-
269
- def equivalent_source?(source, other_source)
270
- source == other_source
271
- end
272
268
  end
273
269
  end
@@ -23,7 +23,7 @@ module Bundler
23
23
  if previous_source.nil?
24
24
  requirements[indirect_dependency_name] = source
25
25
  else
26
- no_ambiguous_sources = Bundler.feature_flag.bundler_3_mode?
26
+ no_ambiguous_sources = Bundler.feature_flag.bundler_4_mode?
27
27
 
28
28
  msg = ["The gem '#{indirect_dependency_name}' was found in multiple relevant sources."]
29
29
  msg.concat [previous_source, source].map {|s| " * #{s}" }.sort
@@ -76,7 +76,7 @@ module Bundler
76
76
 
77
77
  new_platforms = all_platforms.select do |platform|
78
78
  next if platforms.include?(platform)
79
- next unless GemHelpers.generic(platform) == Gem::Platform::RUBY
79
+ next unless Gem::Platform.generic(platform) == Gem::Platform::RUBY
80
80
 
81
81
  complete_platform(platform)
82
82
  end
@@ -179,11 +179,13 @@ module Bundler
179
179
  end
180
180
 
181
181
  def -(other)
182
+ SharedHelpers.major_deprecation 2, "SpecSet#- has been removed with no replacement"
183
+
182
184
  SpecSet.new(to_a - other.to_a)
183
185
  end
184
186
 
185
187
  def find_by_name_and_platform(name, platform)
186
- @specs.detect {|spec| spec.name == name && spec.match_platform(platform) }
188
+ @specs.detect {|spec| spec.name == name && spec.installable_on_platform?(platform) }
187
189
  end
188
190
 
189
191
  def specs_with_additional_variants_from(other)
@@ -210,6 +212,8 @@ module Bundler
210
212
  end
211
213
 
212
214
  def <<(spec)
215
+ SharedHelpers.major_deprecation 2, "SpecSet#<< has been removed with no replacement"
216
+
213
217
  @specs << spec
214
218
  end
215
219
 
@@ -280,7 +284,7 @@ module Bundler
280
284
  valid_platform = lookup.all? do |_, specs|
281
285
  spec = specs.first
282
286
  matching_specs = spec.source.specs.search([spec.name, spec.version])
283
- platform_spec = GemHelpers.select_best_platform_match(matching_specs, platform).find do |s|
287
+ platform_spec = MatchPlatform.select_best_platform_match(matching_specs, platform).find do |s|
284
288
  valid?(s)
285
289
  end
286
290
 
@@ -10,17 +10,6 @@
10
10
 
11
11
  ENV["BUNDLE_GEMFILE"] ||= File.expand_path("<%= relative_gemfile_path %>", __dir__)
12
12
 
13
- bundle_binstub = File.expand_path("bundle", __dir__)
14
-
15
- if File.file?(bundle_binstub)
16
- if File.read(bundle_binstub, 300).include?("This file was generated by Bundler")
17
- load(bundle_binstub)
18
- else
19
- abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
20
- Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
21
- end
22
- end
23
-
24
13
  require "rubygems"
25
14
  require "bundler/setup"
26
15
 
@@ -18,6 +18,8 @@ jobs:
18
18
 
19
19
  steps:
20
20
  - uses: actions/checkout@v4
21
+ with:
22
+ persist-credentials: false
21
23
  <%- if config[:ext] == 'rust' -%>
22
24
  - name: Set up Ruby & Rust
23
25
  uses: oxidize-rb/actions/setup-ruby-and-rust@v1
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
 
11
11
  spec.summary = "TODO: Write a short summary, because RubyGems requires one."
12
12
  spec.description = "TODO: Write a longer description or delete this line."
13
- spec.homepage = "TODO: Put your gem's website or public repo URL here."
13
+ spec.homepage = "<%= config[:homepage_uri] %>"
14
14
  <%- if config[:mit] -%>
15
15
  spec.license = "MIT"
16
16
  <%- end -%>
@@ -20,10 +20,11 @@ Gem::Specification.new do |spec|
20
20
  <%- end -%>
21
21
 
22
22
  spec.metadata["allowed_push_host"] = "TODO: Set to your gem server 'https://example.com'"
23
-
24
23
  spec.metadata["homepage_uri"] = spec.homepage
25
- spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
26
- spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
24
+ spec.metadata["source_code_uri"] = "<%= config[:source_code_uri] %>"
25
+ <%- if config[:changelog] -%>
26
+ spec.metadata["changelog_uri"] = "<%= config[:changelog_uri] %>"
27
+ <%- end -%>
27
28
 
28
29
  # Specify which files should be added to the gem when it is released.
29
30
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
@@ -31,7 +32,7 @@ Gem::Specification.new do |spec|
31
32
  spec.files = IO.popen(%w[git ls-files -z], chdir: __dir__, err: IO::NULL) do |ls|
32
33
  ls.readlines("\x0", chomp: true).reject do |f|
33
34
  (f == gemspec) ||
34
- f.start_with?(*%w[bin/ test/ spec/ features/ .git <%= config[:ci_config_path] %>appveyor Gemfile])
35
+ f.start_with?(*%w[<%= config[:ignore_paths].join(" ") %>])
35
36
  end
36
37
  end
37
38
  spec.bindir = "exe"
@@ -80,11 +80,11 @@ module Bundler
80
80
  end
81
81
 
82
82
  def ask(msg)
83
- @shell.ask(msg)
83
+ @shell.ask(msg, :green)
84
84
  end
85
85
 
86
86
  def yes?(msg)
87
- @shell.yes?(msg)
87
+ @shell.yes?(msg, :green)
88
88
  end
89
89
 
90
90
  def no?(msg)
@@ -1,7 +1,7 @@
1
1
  = net-http-persistent
2
2
 
3
3
  home :: https://github.com/drbrain/net-http-persistent
4
- rdoc :: https://rdoc.info/gems/net-http-persistent
4
+ rdoc :: https://rubydoc.info/gems/net-http-persistent
5
5
 
6
6
  == DESCRIPTION:
7
7
 
@@ -63,7 +63,8 @@ class Gem::Net::HTTP::Persistent::TimedStackMulti < Bundler::ConnectionPool::Tim
63
63
  if @created >= @max && @enqueued >= 1
64
64
  oldest, = @lru.first
65
65
  @lru.delete oldest
66
- @ques[oldest].pop
66
+ connection = @ques[oldest].pop
67
+ connection.close if connection.respond_to?(:close)
67
68
 
68
69
  @created -= 1
69
70
  end
@@ -1,6 +1,7 @@
1
1
  require_relative '../../../../../vendored_net_http'
2
2
  require_relative '../../../../../vendored_uri'
3
- require 'cgi' # for escaping
3
+ require 'cgi/escape'
4
+ require 'cgi/util' unless defined?(CGI::EscapeExt)
4
5
  require_relative '../../../../connection_pool/lib/connection_pool'
5
6
 
6
7
  autoload :OpenSSL, 'openssl'
@@ -42,9 +43,8 @@ autoload :OpenSSL, 'openssl'
42
43
  # # perform the POST, the Gem::URI is always required
43
44
  # response http.request post_uri, post
44
45
  #
45
- # Note that for GET, HEAD and other requests that do not have a body you want
46
- # to use Gem::URI#request_uri not Gem::URI#path. The request_uri contains the query
47
- # params which are sent in the body for other requests.
46
+ # Note that for GET, HEAD and other requests that do not have a body,
47
+ # it uses Gem::URI#request_uri as default to send query params
48
48
  #
49
49
  # == TLS/SSL
50
50
  #
@@ -60,6 +60,7 @@ autoload :OpenSSL, 'openssl'
60
60
  # #ca_path :: Directory with certificate-authorities
61
61
  # #cert_store :: An SSL certificate store
62
62
  # #ciphers :: List of SSl ciphers allowed
63
+ # #extra_chain_cert :: Extra certificates to be added to the certificate chain
63
64
  # #private_key :: The client's SSL private key
64
65
  # #reuse_ssl_sessions :: Reuse a previously opened SSL session for a new
65
66
  # connection
@@ -176,7 +177,7 @@ class Gem::Net::HTTP::Persistent
176
177
  ##
177
178
  # The version of Gem::Net::HTTP::Persistent you are using
178
179
 
179
- VERSION = '4.0.4'
180
+ VERSION = '4.0.6'
180
181
 
181
182
  ##
182
183
  # Error class for errors raised by Gem::Net::HTTP::Persistent. Various
@@ -267,6 +268,11 @@ class Gem::Net::HTTP::Persistent
267
268
 
268
269
  attr_reader :ciphers
269
270
 
271
+ ##
272
+ # Extra certificates to be added to the certificate chain
273
+
274
+ attr_reader :extra_chain_cert
275
+
270
276
  ##
271
277
  # Sends debug_output to this IO via Gem::Net::HTTP#set_debug_output.
272
278
  #
@@ -587,6 +593,21 @@ class Gem::Net::HTTP::Persistent
587
593
  reconnect_ssl
588
594
  end
589
595
 
596
+ if Gem::Net::HTTP.method_defined?(:extra_chain_cert=)
597
+ ##
598
+ # Extra certificates to be added to the certificate chain.
599
+ # It is only supported starting from Gem::Net::HTTP version 0.1.1
600
+ def extra_chain_cert= extra_chain_cert
601
+ @extra_chain_cert = extra_chain_cert
602
+
603
+ reconnect_ssl
604
+ end
605
+ else
606
+ def extra_chain_cert= _extra_chain_cert
607
+ raise "extra_chain_cert= is not supported by this version of Gem::Net::HTTP"
608
+ end
609
+ end
610
+
590
611
  ##
591
612
  # Creates a new connection for +uri+
592
613
 
@@ -605,47 +626,49 @@ class Gem::Net::HTTP::Persistent
605
626
 
606
627
  connection = @pool.checkout net_http_args
607
628
 
608
- http = connection.http
629
+ begin
630
+ http = connection.http
609
631
 
610
- connection.ressl @ssl_generation if
611
- connection.ssl_generation != @ssl_generation
632
+ connection.ressl @ssl_generation if
633
+ connection.ssl_generation != @ssl_generation
612
634
 
613
- if not http.started? then
614
- ssl http if use_ssl
615
- start http
616
- elsif expired? connection then
617
- reset connection
618
- end
635
+ if not http.started? then
636
+ ssl http if use_ssl
637
+ start http
638
+ elsif expired? connection then
639
+ reset connection
640
+ end
619
641
 
620
- http.keep_alive_timeout = @idle_timeout if @idle_timeout
621
- http.max_retries = @max_retries if http.respond_to?(:max_retries=)
622
- http.read_timeout = @read_timeout if @read_timeout
623
- http.write_timeout = @write_timeout if
624
- @write_timeout && http.respond_to?(:write_timeout=)
642
+ http.keep_alive_timeout = @idle_timeout if @idle_timeout
643
+ http.max_retries = @max_retries if http.respond_to?(:max_retries=)
644
+ http.read_timeout = @read_timeout if @read_timeout
645
+ http.write_timeout = @write_timeout if
646
+ @write_timeout && http.respond_to?(:write_timeout=)
647
+
648
+ return yield connection
649
+ rescue Errno::ECONNREFUSED
650
+ if http.proxy?
651
+ address = http.proxy_address
652
+ port = http.proxy_port
653
+ else
654
+ address = http.address
655
+ port = http.port
656
+ end
625
657
 
626
- return yield connection
627
- rescue Errno::ECONNREFUSED
628
- if http.proxy?
629
- address = http.proxy_address
630
- port = http.proxy_port
631
- else
632
- address = http.address
633
- port = http.port
634
- end
658
+ raise Error, "connection refused: #{address}:#{port}"
659
+ rescue Errno::EHOSTDOWN
660
+ if http.proxy?
661
+ address = http.proxy_address
662
+ port = http.proxy_port
663
+ else
664
+ address = http.address
665
+ port = http.port
666
+ end
635
667
 
636
- raise Error, "connection refused: #{address}:#{port}"
637
- rescue Errno::EHOSTDOWN
638
- if http.proxy?
639
- address = http.proxy_address
640
- port = http.proxy_port
641
- else
642
- address = http.address
643
- port = http.port
668
+ raise Error, "host down: #{address}:#{port}"
669
+ ensure
670
+ @pool.checkin net_http_args
644
671
  end
645
-
646
- raise Error, "host down: #{address}:#{port}"
647
- ensure
648
- @pool.checkin net_http_args
649
672
  end
650
673
 
651
674
  ##
@@ -782,7 +805,7 @@ class Gem::Net::HTTP::Persistent
782
805
  @proxy_connection_id = [nil, *@proxy_args].join ':'
783
806
 
784
807
  if @proxy_uri.query then
785
- @no_proxy = CGI.parse(@proxy_uri.query)['no_proxy'].join(',').downcase.split(',').map { |x| x.strip }.reject { |x| x.empty? }
808
+ @no_proxy = Gem::URI.decode_www_form(@proxy_uri.query).filter_map { |k, v| v if k == 'no_proxy' }.join(',').downcase.split(',').map { |x| x.strip }.reject { |x| x.empty? }
786
809
  end
787
810
  end
788
811
 
@@ -953,7 +976,8 @@ class Gem::Net::HTTP::Persistent
953
976
  end
954
977
 
955
978
  ##
956
- # Shuts down all connections
979
+ # Shuts down all connections. Attempting to checkout a connection after
980
+ # shutdown will raise an error.
957
981
  #
958
982
  # *NOTE*: Calling shutdown for can be dangerous!
959
983
  #
@@ -964,6 +988,17 @@ class Gem::Net::HTTP::Persistent
964
988
  @pool.shutdown { |http| http.finish }
965
989
  end
966
990
 
991
+ ##
992
+ # Discard all existing connections. Subsequent checkouts will create
993
+ # new connections as needed.
994
+ #
995
+ # If any thread is still using a connection it may cause an error! Call
996
+ # #reload when you are completely done making requests!
997
+
998
+ def reload
999
+ @pool.reload { |http| http.finish }
1000
+ end
1001
+
967
1002
  ##
968
1003
  # Enables SSL on +connection+
969
1004
 
@@ -1021,6 +1056,10 @@ application:
1021
1056
  connection.key = @private_key
1022
1057
  end
1023
1058
 
1059
+ if defined?(@extra_chain_cert) and @extra_chain_cert
1060
+ connection.extra_chain_cert = @extra_chain_cert
1061
+ end
1062
+
1024
1063
  connection.cert_store = if @cert_store then
1025
1064
  @cert_store
1026
1065
  else
@@ -1,13 +1,21 @@
1
1
  # frozen_string_literal: false
2
2
 
3
3
  module Bundler
4
- VERSION = "2.6.9".freeze
4
+ VERSION = "2.7.0".freeze
5
5
 
6
6
  def self.bundler_major_version
7
- @bundler_major_version ||= VERSION.split(".").first.to_i
7
+ @bundler_major_version ||= gem_version.segments.first
8
8
  end
9
9
 
10
10
  def self.gem_version
11
11
  @gem_version ||= Gem::Version.create(VERSION)
12
12
  end
13
+
14
+ def self.verbose_version
15
+ @verbose_version ||= "#{VERSION}#{simulated_version ? " (simulating Bundler #{simulated_version})" : ""}"
16
+ end
17
+
18
+ def self.simulated_version
19
+ @simulated_version ||= Bundler.settings[:simulate_version]
20
+ end
13
21
  end
@@ -88,7 +88,7 @@ module Bundler
88
88
 
89
89
  @threads = Array.new(@size) do |i|
90
90
  Thread.start { process_queue(i) }.tap do |thread|
91
- thread.name = "#{name} Worker ##{i}" if thread.respond_to?(:name=)
91
+ thread.name = "#{name} Worker ##{i}"
92
92
  end
93
93
  rescue ThreadError => e
94
94
  creation_errors << e
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative "bundler/rubygems_ext"
3
4
  require_relative "bundler/vendored_fileutils"
4
5
  require "pathname"
5
6
  require "rbconfig"
@@ -7,7 +8,6 @@ require "rbconfig"
7
8
  require_relative "bundler/errors"
8
9
  require_relative "bundler/environment_preserver"
9
10
  require_relative "bundler/plugin"
10
- require_relative "bundler/rubygems_ext"
11
11
  require_relative "bundler/rubygems_integration"
12
12
  require_relative "bundler/version"
13
13
  require_relative "bundler/current_ruby"
@@ -53,7 +53,6 @@ module Bundler
53
53
  autoload :FeatureFlag, File.expand_path("bundler/feature_flag", __dir__)
54
54
  autoload :FREEBSD, File.expand_path("bundler/constants", __dir__)
55
55
  autoload :GemHelper, File.expand_path("bundler/gem_helper", __dir__)
56
- autoload :GemHelpers, File.expand_path("bundler/gem_helpers", __dir__)
57
56
  autoload :GemVersionPromoter, File.expand_path("bundler/gem_version_promoter", __dir__)
58
57
  autoload :Graph, File.expand_path("bundler/graph", __dir__)
59
58
  autoload :Index, File.expand_path("bundler/index", __dir__)
@@ -114,13 +113,13 @@ module Bundler
114
113
  end
115
114
 
116
115
  def configured_bundle_path
117
- @configured_bundle_path ||= settings.path.tap(&:validate!)
116
+ @configured_bundle_path ||= Bundler.settings.path.tap(&:validate!)
118
117
  end
119
118
 
120
119
  # Returns absolute location of where binstubs are installed to.
121
120
  def bin_path
122
121
  @bin_path ||= begin
123
- path = settings[:bin] || "bin"
122
+ path = Bundler.settings[:bin] || "bin"
124
123
  path = Pathname.new(path).expand_path(root).expand_path
125
124
  mkdir_p(path)
126
125
  path
@@ -174,14 +173,14 @@ module Bundler
174
173
  self_manager.restart_with_locked_bundler_if_needed
175
174
  end
176
175
 
177
- # Automatically install dependencies if Bundler.settings[:auto_install] exists.
176
+ # Automatically install dependencies if settings[:auto_install] exists.
178
177
  # This is set through config cmd `bundle config set --global auto_install 1`.
179
178
  #
180
179
  # Note that this method `nil`s out the global Definition object, so it
181
180
  # should be called first, before you instantiate anything like an
182
181
  # `Installer` that'll keep a reference to the old one instead.
183
182
  def auto_install
184
- return unless settings[:auto_install]
183
+ return unless Bundler.settings[:auto_install]
185
184
 
186
185
  begin
187
186
  definition.specs
@@ -239,10 +238,10 @@ module Bundler
239
238
  end
240
239
 
241
240
  def frozen_bundle?
242
- frozen = settings[:frozen]
241
+ frozen = Bundler.settings[:frozen]
243
242
  return frozen unless frozen.nil?
244
243
 
245
- settings[:deployment]
244
+ Bundler.settings[:deployment]
246
245
  end
247
246
 
248
247
  def locked_gems
@@ -343,7 +342,7 @@ module Bundler
343
342
 
344
343
  def app_cache(custom_path = nil)
345
344
  path = custom_path || root
346
- Pathname.new(path).join(settings.app_cache_path)
345
+ Pathname.new(path).join(Bundler.settings.app_cache_path)
347
346
  end
348
347
 
349
348
  def tmp(name = Process.pid.to_s)
@@ -455,10 +454,14 @@ module Bundler
455
454
  end
456
455
 
457
456
  def local_platform
458
- return Gem::Platform::RUBY if settings[:force_ruby_platform]
457
+ return Gem::Platform::RUBY if Bundler.settings[:force_ruby_platform]
459
458
  Gem::Platform.local
460
459
  end
461
460
 
461
+ def generic_local_platform
462
+ Gem::Platform.generic(local_platform)
463
+ end
464
+
462
465
  def default_gemfile
463
466
  SharedHelpers.default_gemfile
464
467
  end
@@ -564,7 +567,7 @@ module Bundler
564
567
  end
565
568
 
566
569
  def feature_flag
567
- @feature_flag ||= FeatureFlag.new(VERSION)
570
+ @feature_flag ||= FeatureFlag.new(Bundler.settings[:simulate_version] || VERSION)
568
571
  end
569
572
 
570
573
  def reset!
@@ -580,7 +583,6 @@ module Bundler
580
583
 
581
584
  def reset_paths!
582
585
  @bin_path = nil
583
- @bundler_major_version = nil
584
586
  @bundle_path = nil
585
587
  @configure = nil
586
588
  @configured_bundle_path = nil