bundler 2.1.4 → 2.2.0.rc.1
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.
Potentially problematic release.
This version of bundler might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +806 -741
- data/README.md +6 -8
- data/bundler.gemspec +3 -3
- data/exe/bundle +3 -0
- data/lib/bundler.rb +15 -4
- data/lib/bundler/build_metadata.rb +2 -2
- data/lib/bundler/cli.rb +32 -11
- data/lib/bundler/cli/console.rb +1 -1
- data/lib/bundler/cli/gem.rb +83 -10
- data/lib/bundler/cli/info.rb +13 -3
- data/lib/bundler/cli/init.rb +1 -1
- data/lib/bundler/cli/install.rb +5 -14
- data/lib/bundler/cli/issue.rb +2 -2
- data/lib/bundler/cli/list.rb +11 -9
- data/lib/bundler/cli/outdated.rb +88 -65
- data/lib/bundler/cli/plugin.rb +10 -0
- data/lib/bundler/cli/pristine.rb +5 -0
- data/lib/bundler/definition.rb +32 -32
- data/lib/bundler/dependency.rb +0 -9
- data/lib/bundler/dsl.rb +1 -5
- data/lib/bundler/environment_preserver.rb +26 -2
- data/lib/bundler/errors.rb +1 -0
- data/lib/bundler/feature_flag.rb +0 -2
- data/lib/bundler/fetcher.rb +1 -0
- data/lib/bundler/friendly_errors.rb +4 -10
- data/lib/bundler/gem_helper.rb +17 -10
- data/lib/bundler/gem_version_promoter.rb +1 -1
- data/lib/bundler/injector.rb +14 -3
- data/lib/bundler/inline.rb +1 -1
- data/lib/bundler/installer.rb +29 -28
- data/lib/bundler/installer/gem_installer.rb +2 -2
- data/lib/bundler/installer/parallel_installer.rb +9 -9
- data/lib/bundler/lazy_specification.rb +16 -3
- data/lib/bundler/plugin.rb +26 -0
- data/lib/bundler/plugin/index.rb +9 -0
- data/lib/bundler/psyched_yaml.rb +0 -15
- data/lib/bundler/remote_specification.rb +4 -1
- data/lib/bundler/resolver.rb +31 -8
- data/lib/bundler/resolver/spec_group.rb +26 -5
- data/lib/bundler/rubygems_ext.rb +7 -8
- data/lib/bundler/rubygems_gem_installer.rb +1 -7
- data/lib/bundler/rubygems_integration.rb +3 -48
- data/lib/bundler/runtime.rb +2 -12
- data/lib/bundler/settings.rb +0 -3
- data/lib/bundler/shared_helpers.rb +1 -1
- data/lib/bundler/source/git.rb +4 -4
- data/lib/bundler/source/git/git_proxy.rb +53 -58
- data/lib/bundler/source/path.rb +5 -1
- data/lib/bundler/source/path/installer.rb +7 -9
- data/lib/bundler/source/rubygems.rb +11 -14
- data/lib/bundler/stub_specification.rb +16 -4
- data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
- data/lib/bundler/templates/newgem/Gemfile.tt +9 -1
- data/lib/bundler/templates/newgem/Rakefile.tt +19 -5
- data/lib/bundler/templates/newgem/bin/console.tt +2 -0
- data/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
- data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
- data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
- data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
- data/lib/bundler/templates/newgem/lib/newgem.rb.tt +2 -0
- data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +6 -4
- data/lib/bundler/templates/newgem/rubocop.yml.tt +10 -0
- data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
- data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -0
- data/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
- data/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -0
- data/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
- data/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +75 -189
- data/lib/bundler/vendor/thor/lib/thor.rb +0 -7
- data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
- data/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
- data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/lib/bundler/version.rb +1 -1
- data/man/bundle-add.1 +1 -1
- data/man/bundle-add.1.txt +15 -15
- data/man/bundle-binstubs.1 +1 -1
- data/man/bundle-binstubs.1.txt +10 -10
- data/man/bundle-cache.1 +1 -1
- data/man/bundle-cache.1.txt +15 -15
- data/man/bundle-check.1 +1 -1
- data/man/bundle-check.1.txt +8 -8
- data/man/bundle-clean.1 +1 -1
- data/man/bundle-clean.1.txt +6 -6
- data/man/bundle-config.1 +3 -9
- data/man/bundle-config.1.txt +271 -272
- data/man/bundle-config.ronn +5 -9
- data/man/bundle-doctor.1 +1 -1
- data/man/bundle-doctor.1.txt +9 -9
- data/man/bundle-exec.1 +1 -1
- data/man/bundle-exec.1.txt +84 -81
- data/man/bundle-gem.1 +25 -3
- data/man/bundle-gem.1.txt +65 -39
- data/man/bundle-gem.ronn +30 -7
- data/man/bundle-info.1 +1 -1
- data/man/bundle-info.1.txt +2 -2
- data/man/bundle-init.1 +1 -1
- data/man/bundle-init.1.txt +9 -9
- data/man/bundle-inject.1 +1 -1
- data/man/bundle-inject.1.txt +4 -4
- data/man/bundle-install.1 +1 -1
- data/man/bundle-install.1.txt +169 -169
- data/man/bundle-list.1 +7 -7
- data/man/bundle-list.1.txt +12 -11
- data/man/bundle-list.ronn +6 -6
- data/man/bundle-lock.1 +1 -1
- data/man/bundle-lock.1.txt +28 -28
- data/man/bundle-open.1 +1 -1
- data/man/bundle-open.1.txt +3 -3
- data/man/bundle-outdated.1 +1 -1
- data/man/bundle-outdated.1.txt +34 -34
- data/man/bundle-platform.1 +1 -1
- data/man/bundle-platform.1.txt +16 -16
- data/man/bundle-pristine.1 +1 -1
- data/man/bundle-pristine.1.txt +8 -8
- data/man/bundle-remove.1 +1 -1
- data/man/bundle-remove.1.txt +9 -9
- data/man/bundle-show.1 +1 -1
- data/man/bundle-show.1.txt +8 -8
- data/man/bundle-update.1 +1 -1
- data/man/bundle-update.1.txt +149 -148
- data/man/bundle-viz.1 +1 -1
- data/man/bundle-viz.1.txt +11 -11
- data/man/bundle.1 +1 -1
- data/man/bundle.1.txt +31 -31
- data/man/gemfile.5 +1 -1
- data/man/gemfile.5.txt +218 -216
- metadata +14 -8
@@ -1,12 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
source "https://rubygems.org"
|
2
4
|
|
3
5
|
# Specify your gem's dependencies in <%= config[:name] %>.gemspec
|
4
6
|
gemspec
|
5
7
|
|
6
|
-
gem "rake", "~>
|
8
|
+
gem "rake", "~> 13.0"
|
7
9
|
<%- if config[:ext] -%>
|
10
|
+
|
8
11
|
gem "rake-compiler"
|
9
12
|
<%- end -%>
|
10
13
|
<%- if config[:test] -%>
|
14
|
+
|
11
15
|
gem "<%= config[:test] %>", "~> <%= config[:test_framework_version] %>"
|
12
16
|
<%- end -%>
|
17
|
+
<%- if config[:rubocop] -%>
|
18
|
+
|
19
|
+
gem "rubocop", "~> 0.80"
|
20
|
+
<%- end -%>
|
@@ -1,5 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "bundler/gem_tasks"
|
2
|
-
<%
|
4
|
+
<% default_task_names = [config[:test_task]].compact -%>
|
5
|
+
<% case config[:test] -%>
|
6
|
+
<% when "minitest", "test-unit" -%>
|
3
7
|
require "rake/testtask"
|
4
8
|
|
5
9
|
Rake::TestTask.new(:test) do |t|
|
@@ -8,22 +12,32 @@ Rake::TestTask.new(:test) do |t|
|
|
8
12
|
t.test_files = FileList["test/**/*_test.rb"]
|
9
13
|
end
|
10
14
|
|
11
|
-
<%
|
15
|
+
<% when "rspec" -%>
|
12
16
|
require "rspec/core/rake_task"
|
13
17
|
|
14
18
|
RSpec::Core::RakeTask.new(:spec)
|
15
19
|
|
20
|
+
<% end -%>
|
21
|
+
<% if config[:rubocop] -%>
|
22
|
+
<% default_task_names << :rubocop -%>
|
23
|
+
require "rubocop/rake_task"
|
24
|
+
|
25
|
+
RuboCop::RakeTask.new
|
26
|
+
|
16
27
|
<% end -%>
|
17
28
|
<% if config[:ext] -%>
|
29
|
+
<% default_task_names.unshift(:clobber, :compile) -%>
|
18
30
|
require "rake/extensiontask"
|
19
31
|
|
20
|
-
task :
|
32
|
+
task build: :compile
|
21
33
|
|
22
34
|
Rake::ExtensionTask.new("<%= config[:underscored_name] %>") do |ext|
|
23
35
|
ext.lib_dir = "lib/<%= config[:namespaced_path] %>"
|
24
36
|
end
|
25
37
|
|
26
|
-
|
38
|
+
<% end -%>
|
39
|
+
<% if default_task_names.size == 1 -%>
|
40
|
+
task default: <%= default_task_names.first.inspect %>
|
27
41
|
<% else -%>
|
28
|
-
task :
|
42
|
+
task default: %i[<%= default_task_names.join(" ") %>]
|
29
43
|
<% end -%>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
name: Ruby
|
2
|
+
|
3
|
+
on: [push,pull_request]
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
build:
|
7
|
+
runs-on: ubuntu-latest
|
8
|
+
steps:
|
9
|
+
- uses: actions/checkout@v2
|
10
|
+
- name: Set up Ruby
|
11
|
+
uses: ruby/setup-ruby@v1
|
12
|
+
with:
|
13
|
+
ruby-version: <%= RUBY_VERSION %>
|
14
|
+
- name: Run the default task
|
15
|
+
run: |
|
16
|
+
gem install bundler -v <%= Bundler::VERSION %>
|
17
|
+
bundle install
|
18
|
+
bundle exec rake
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "lib/<%=config[:namespaced_path]%>/version"
|
2
4
|
|
3
5
|
Gem::Specification.new do |spec|
|
4
6
|
spec.name = <%= config[:name].inspect %>
|
@@ -6,8 +8,8 @@ Gem::Specification.new do |spec|
|
|
6
8
|
spec.authors = [<%= config[:author].inspect %>]
|
7
9
|
spec.email = [<%= config[:email].inspect %>]
|
8
10
|
|
9
|
-
spec.summary =
|
10
|
-
spec.description =
|
11
|
+
spec.summary = "TODO: Write a short summary, because RubyGems requires one."
|
12
|
+
spec.description = "TODO: Write a longer description or delete this line."
|
11
13
|
spec.homepage = "TODO: Put your gem's website or public repo URL here."
|
12
14
|
<%- if config[:mit] -%>
|
13
15
|
spec.license = "MIT"
|
@@ -22,7 +24,7 @@ Gem::Specification.new do |spec|
|
|
22
24
|
|
23
25
|
# Specify which files should be added to the gem when it is released.
|
24
26
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
25
|
-
spec.files
|
27
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
26
28
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
27
29
|
end
|
28
30
|
spec.bindir = "exe"
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "test_helper"
|
4
|
+
|
5
|
+
class <%= config[:constant_name] %>Test < Test::Unit::TestCase
|
6
|
+
test "VERSION" do
|
7
|
+
assert do
|
8
|
+
::<%= config[:constant_name] %>.const_defined?(:VERSION)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
test "something useful" do
|
13
|
+
assert_equal("expected", "actual")
|
14
|
+
end
|
15
|
+
end
|
@@ -12,15 +12,11 @@ autoload :OpenSSL, 'openssl'
|
|
12
12
|
# servers you wish to talk to. For each host:port you communicate with a
|
13
13
|
# single persistent connection is created.
|
14
14
|
#
|
15
|
-
#
|
16
|
-
# connections.
|
15
|
+
# Connections will be shared across threads through a connection pool to
|
16
|
+
# increase reuse of connections.
|
17
17
|
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
# You can shut down the HTTP connections when done by calling #shutdown. You
|
22
|
-
# should name your Bundler::Persistent::Net::HTTP::Persistent object if you intend to call this
|
23
|
-
# method.
|
18
|
+
# You can shut down any remaining HTTP connections when done by calling
|
19
|
+
# #shutdown.
|
24
20
|
#
|
25
21
|
# Example:
|
26
22
|
#
|
@@ -28,7 +24,7 @@ autoload :OpenSSL, 'openssl'
|
|
28
24
|
#
|
29
25
|
# uri = Bundler::URI 'http://example.com/awesome/web/service'
|
30
26
|
#
|
31
|
-
# http = Bundler::Persistent::Net::HTTP::Persistent.new
|
27
|
+
# http = Bundler::Persistent::Net::HTTP::Persistent.new
|
32
28
|
#
|
33
29
|
# # perform a GET
|
34
30
|
# response = http.request uri
|
@@ -50,14 +46,14 @@ autoload :OpenSSL, 'openssl'
|
|
50
46
|
# to use Bundler::URI#request_uri not Bundler::URI#path. The request_uri contains the query
|
51
47
|
# params which are sent in the body for other requests.
|
52
48
|
#
|
53
|
-
# == SSL
|
49
|
+
# == TLS/SSL
|
54
50
|
#
|
55
|
-
#
|
56
|
-
# Bundler::URI.
|
51
|
+
# TLS connections are automatically created depending upon the scheme of the
|
52
|
+
# Bundler::URI. TLS connections are automatically verified against the default
|
57
53
|
# certificate store for your computer. You can override this by changing
|
58
54
|
# verify_mode or by specifying an alternate cert_store.
|
59
55
|
#
|
60
|
-
# Here are the
|
56
|
+
# Here are the TLS settings, see the individual methods for documentation:
|
61
57
|
#
|
62
58
|
# #certificate :: This client's certificate
|
63
59
|
# #ca_file :: The certificate-authorities
|
@@ -67,7 +63,7 @@ autoload :OpenSSL, 'openssl'
|
|
67
63
|
# #private_key :: The client's SSL private key
|
68
64
|
# #reuse_ssl_sessions :: Reuse a previously opened SSL session for a new
|
69
65
|
# connection
|
70
|
-
# #ssl_timeout ::
|
66
|
+
# #ssl_timeout :: Session lifetime
|
71
67
|
# #ssl_version :: Which specific SSL version to use
|
72
68
|
# #verify_callback :: For server certificate verification
|
73
69
|
# #verify_depth :: Depth of certificate verification
|
@@ -96,14 +92,15 @@ autoload :OpenSSL, 'openssl'
|
|
96
92
|
#
|
97
93
|
# === Segregation
|
98
94
|
#
|
99
|
-
#
|
100
|
-
#
|
95
|
+
# Each Bundler::Persistent::Net::HTTP::Persistent instance has its own pool of connections. There
|
96
|
+
# is no sharing with other instances (as was true in earlier versions).
|
101
97
|
#
|
102
98
|
# === Idle Timeout
|
103
99
|
#
|
104
|
-
# If a connection hasn't been used for this number of seconds it will
|
105
|
-
# reset upon the next use to avoid attempting to send to a
|
106
|
-
# The default value is 5 seconds. nil means no timeout.
|
100
|
+
# If a connection hasn't been used for this number of seconds it will
|
101
|
+
# automatically be reset upon the next use to avoid attempting to send to a
|
102
|
+
# closed connection. The default value is 5 seconds. nil means no timeout.
|
103
|
+
# Set through #idle_timeout.
|
107
104
|
#
|
108
105
|
# Reducing this value may help avoid the "too many connection resets" error
|
109
106
|
# when sending non-idempotent requests while increasing this value will cause
|
@@ -118,8 +115,9 @@ autoload :OpenSSL, 'openssl'
|
|
118
115
|
#
|
119
116
|
# The number of requests that should be made before opening a new connection.
|
120
117
|
# Typically many keep-alive capable servers tune this to 100 or less, so the
|
121
|
-
# 101st request will fail with ECONNRESET. If unset (default), this value has
|
122
|
-
# effect, if set, connections will be reset on the request after
|
118
|
+
# 101st request will fail with ECONNRESET. If unset (default), this value has
|
119
|
+
# no effect, if set, connections will be reset on the request after
|
120
|
+
# max_requests.
|
123
121
|
#
|
124
122
|
# === Open Timeout
|
125
123
|
#
|
@@ -131,45 +129,6 @@ autoload :OpenSSL, 'openssl'
|
|
131
129
|
# Socket options may be set on newly-created connections. See #socket_options
|
132
130
|
# for details.
|
133
131
|
#
|
134
|
-
# === Non-Idempotent Requests
|
135
|
-
#
|
136
|
-
# By default non-idempotent requests will not be retried per RFC 2616. By
|
137
|
-
# setting retry_change_requests to true requests will automatically be retried
|
138
|
-
# once.
|
139
|
-
#
|
140
|
-
# Only do this when you know that retrying a POST or other non-idempotent
|
141
|
-
# request is safe for your application and will not create duplicate
|
142
|
-
# resources.
|
143
|
-
#
|
144
|
-
# The recommended way to handle non-idempotent requests is the following:
|
145
|
-
#
|
146
|
-
# require 'bundler/vendor/net-http-persistent/lib/net/http/persistent'
|
147
|
-
#
|
148
|
-
# uri = Bundler::URI 'http://example.com/awesome/web/service'
|
149
|
-
# post_uri = uri + 'create'
|
150
|
-
#
|
151
|
-
# http = Bundler::Persistent::Net::HTTP::Persistent.new name: 'my_app_name'
|
152
|
-
#
|
153
|
-
# post = Net::HTTP::Post.new post_uri.path
|
154
|
-
# # ... fill in POST request
|
155
|
-
#
|
156
|
-
# begin
|
157
|
-
# response = http.request post_uri, post
|
158
|
-
# rescue Bundler::Persistent::Net::HTTP::Persistent::Error
|
159
|
-
#
|
160
|
-
# # POST failed, make a new request to verify the server did not process
|
161
|
-
# # the request
|
162
|
-
# exists_uri = uri + '...'
|
163
|
-
# response = http.get exists_uri
|
164
|
-
#
|
165
|
-
# # Retry if it failed
|
166
|
-
# retry if response.code == '404'
|
167
|
-
# end
|
168
|
-
#
|
169
|
-
# The method of determining if the resource was created or not is unique to
|
170
|
-
# the particular service you are using. Of course, you will want to add
|
171
|
-
# protection from infinite looping.
|
172
|
-
#
|
173
132
|
# === Connection Termination
|
174
133
|
#
|
175
134
|
# If you are done using the Bundler::Persistent::Net::HTTP::Persistent instance you may shut down
|
@@ -195,33 +154,20 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
195
154
|
HAVE_OPENSSL = defined? OpenSSL::SSL # :nodoc:
|
196
155
|
|
197
156
|
##
|
198
|
-
# The default connection pool size is 1/4 the allowed open files
|
157
|
+
# The default connection pool size is 1/4 the allowed open files
|
158
|
+
# (<code>ulimit -n</code>) or 256 if your OS does not support file handle
|
159
|
+
# limits (typically windows).
|
199
160
|
|
200
|
-
if
|
201
|
-
DEFAULT_POOL_SIZE = 256
|
202
|
-
else
|
161
|
+
if Process.const_defined? :RLIMIT_NOFILE
|
203
162
|
DEFAULT_POOL_SIZE = Process.getrlimit(Process::RLIMIT_NOFILE).first / 4
|
163
|
+
else
|
164
|
+
DEFAULT_POOL_SIZE = 256
|
204
165
|
end
|
205
166
|
|
206
167
|
##
|
207
168
|
# The version of Bundler::Persistent::Net::HTTP::Persistent you are using
|
208
169
|
|
209
|
-
VERSION = '
|
210
|
-
|
211
|
-
##
|
212
|
-
# Exceptions rescued for automatic retry on ruby 2.0.0. This overlaps with
|
213
|
-
# the exception list for ruby 1.x.
|
214
|
-
|
215
|
-
RETRIED_EXCEPTIONS = [ # :nodoc:
|
216
|
-
(Net::ReadTimeout if Net.const_defined? :ReadTimeout),
|
217
|
-
IOError,
|
218
|
-
EOFError,
|
219
|
-
Errno::ECONNRESET,
|
220
|
-
Errno::ECONNABORTED,
|
221
|
-
Errno::EPIPE,
|
222
|
-
(OpenSSL::SSL::SSLError if HAVE_OPENSSL),
|
223
|
-
Timeout::Error,
|
224
|
-
].compact
|
170
|
+
VERSION = '4.0.0'
|
225
171
|
|
226
172
|
##
|
227
173
|
# Error class for errors raised by Bundler::Persistent::Net::HTTP::Persistent. Various
|
@@ -348,6 +294,13 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
348
294
|
|
349
295
|
attr_accessor :max_requests
|
350
296
|
|
297
|
+
##
|
298
|
+
# Number of retries to perform if a request fails.
|
299
|
+
#
|
300
|
+
# See also #max_retries=, Net::HTTP#max_retries=.
|
301
|
+
|
302
|
+
attr_reader :max_retries
|
303
|
+
|
351
304
|
##
|
352
305
|
# The value sent in the Keep-Alive header. Defaults to 30. Not needed for
|
353
306
|
# HTTP/1.1 servers.
|
@@ -360,8 +313,7 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
360
313
|
attr_accessor :keep_alive
|
361
314
|
|
362
315
|
##
|
363
|
-
#
|
364
|
-
# from everybody else's.
|
316
|
+
# The name for this collection of persistent connections.
|
365
317
|
|
366
318
|
attr_reader :name
|
367
319
|
|
@@ -490,23 +442,11 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
490
442
|
|
491
443
|
attr_reader :verify_mode
|
492
444
|
|
493
|
-
##
|
494
|
-
# Enable retries of non-idempotent requests that change data (e.g. POST
|
495
|
-
# requests) when the server has disconnected.
|
496
|
-
#
|
497
|
-
# This will in the worst case lead to multiple requests with the same data,
|
498
|
-
# but it may be useful for some applications. Take care when enabling
|
499
|
-
# this option to ensure it is safe to POST or perform other non-idempotent
|
500
|
-
# requests to the server.
|
501
|
-
|
502
|
-
attr_accessor :retry_change_requests
|
503
|
-
|
504
445
|
##
|
505
446
|
# Creates a new Bundler::Persistent::Net::HTTP::Persistent.
|
506
447
|
#
|
507
|
-
# Set +name+
|
508
|
-
#
|
509
|
-
# good enough. This parameter will be required in a future version.
|
448
|
+
# Set a +name+ for fun. Your library name should be good enough, but this
|
449
|
+
# otherwise has no purpose.
|
510
450
|
#
|
511
451
|
# +proxy+ may be set to a Bundler::URI::HTTP or :ENV to pick up proxy options from
|
512
452
|
# the environment. See proxy_from_env for details.
|
@@ -519,8 +459,9 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
519
459
|
# proxy.password = 'hunter2'
|
520
460
|
#
|
521
461
|
# Set +pool_size+ to limit the maximum number of connections allowed.
|
522
|
-
# Defaults to 1/4 the number of allowed file handles
|
523
|
-
#
|
462
|
+
# Defaults to 1/4 the number of allowed file handles or 256 if your OS does
|
463
|
+
# not support a limit on allowed file handles. You can have no more than
|
464
|
+
# this many threads with active HTTP transactions.
|
524
465
|
|
525
466
|
def initialize name: nil, proxy: nil, pool_size: DEFAULT_POOL_SIZE
|
526
467
|
@name = name
|
@@ -537,6 +478,7 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
537
478
|
@write_timeout = nil
|
538
479
|
@idle_timeout = 5
|
539
480
|
@max_requests = nil
|
481
|
+
@max_retries = 1
|
540
482
|
@socket_options = []
|
541
483
|
@ssl_generation = 0 # incremented when SSL session variables change
|
542
484
|
|
@@ -568,8 +510,6 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
568
510
|
@reuse_ssl_sessions = OpenSSL::SSL.const_defined? :Session
|
569
511
|
end
|
570
512
|
|
571
|
-
@retry_change_requests = false
|
572
|
-
|
573
513
|
self.proxy = proxy if proxy
|
574
514
|
end
|
575
515
|
|
@@ -630,7 +570,9 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
630
570
|
|
631
571
|
net_http_args = [uri.hostname, uri.port]
|
632
572
|
|
633
|
-
|
573
|
+
# I'm unsure if uri.host or uri.hostname should be checked against
|
574
|
+
# the proxy bypass list.
|
575
|
+
if @proxy_uri and not proxy_bypass? uri.host, uri.port then
|
634
576
|
net_http_args.concat @proxy_args
|
635
577
|
else
|
636
578
|
net_http_args.concat [nil, nil, nil, nil]
|
@@ -650,9 +592,11 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
650
592
|
reset connection
|
651
593
|
end
|
652
594
|
|
653
|
-
http.
|
654
|
-
http.
|
655
|
-
http.
|
595
|
+
http.keep_alive_timeout = @idle_timeout if @idle_timeout
|
596
|
+
http.max_retries = @max_retries if http.respond_to?(:max_retries=)
|
597
|
+
http.read_timeout = @read_timeout if @read_timeout
|
598
|
+
http.write_timeout = @write_timeout if
|
599
|
+
@write_timeout && http.respond_to?(:write_timeout=)
|
656
600
|
|
657
601
|
return yield connection
|
658
602
|
rescue Errno::ECONNREFUSED
|
@@ -670,27 +614,14 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
670
614
|
end
|
671
615
|
|
672
616
|
##
|
673
|
-
#
|
674
|
-
# this connection
|
675
|
-
|
676
|
-
def error_message connection
|
677
|
-
connection.requests -= 1 # fixup
|
678
|
-
|
679
|
-
age = Time.now - connection.last_use
|
680
|
-
|
681
|
-
"after #{connection.requests} requests on #{connection.http.object_id}, " \
|
682
|
-
"last used #{age} seconds ago"
|
683
|
-
end
|
684
|
-
|
685
|
-
##
|
686
|
-
# Bundler::URI::escape wrapper
|
617
|
+
# CGI::escape wrapper
|
687
618
|
|
688
619
|
def escape str
|
689
620
|
CGI.escape str if str
|
690
621
|
end
|
691
622
|
|
692
623
|
##
|
693
|
-
#
|
624
|
+
# CGI::unescape wrapper
|
694
625
|
|
695
626
|
def unescape str
|
696
627
|
CGI.unescape str if str
|
@@ -733,6 +664,7 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
733
664
|
def finish connection
|
734
665
|
connection.finish
|
735
666
|
|
667
|
+
connection.http.instance_variable_set :@last_communicated, nil
|
736
668
|
connection.http.instance_variable_set :@ssl_session, nil unless
|
737
669
|
@reuse_ssl_sessions
|
738
670
|
end
|
@@ -741,31 +673,31 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
741
673
|
# Returns the HTTP protocol version for +uri+
|
742
674
|
|
743
675
|
def http_version uri
|
744
|
-
@http_versions["#{uri.
|
676
|
+
@http_versions["#{uri.hostname}:#{uri.port}"]
|
745
677
|
end
|
746
678
|
|
747
679
|
##
|
748
|
-
#
|
680
|
+
# Adds "http://" to the String +uri+ if it is missing.
|
749
681
|
|
750
|
-
def
|
751
|
-
|
752
|
-
when 'DELETE', 'GET', 'HEAD', 'OPTIONS', 'PUT', 'TRACE' then
|
753
|
-
true
|
754
|
-
end
|
682
|
+
def normalize_uri uri
|
683
|
+
(uri =~ /^https?:/) ? uri : "http://#{uri}"
|
755
684
|
end
|
756
685
|
|
757
686
|
##
|
758
|
-
#
|
687
|
+
# Set the maximum number of retries for a request.
|
688
|
+
#
|
689
|
+
# Defaults to one retry.
|
690
|
+
#
|
691
|
+
# Set this to 0 to disable retries.
|
759
692
|
|
760
|
-
def
|
761
|
-
|
762
|
-
end
|
693
|
+
def max_retries= retries
|
694
|
+
retries = retries.to_int
|
763
695
|
|
764
|
-
|
765
|
-
# Adds "http://" to the String +uri+ if it is missing.
|
696
|
+
raise ArgumentError, "max_retries must be positive" if retries < 0
|
766
697
|
|
767
|
-
|
768
|
-
|
698
|
+
@max_retries = retries
|
699
|
+
|
700
|
+
reconnect
|
769
701
|
end
|
770
702
|
|
771
703
|
##
|
@@ -806,7 +738,7 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
806
738
|
|
807
739
|
if @proxy_uri then
|
808
740
|
@proxy_args = [
|
809
|
-
@proxy_uri.
|
741
|
+
@proxy_uri.hostname,
|
810
742
|
@proxy_uri.port,
|
811
743
|
unescape(@proxy_uri.user),
|
812
744
|
unescape(@proxy_uri.password),
|
@@ -881,14 +813,15 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
881
813
|
end
|
882
814
|
|
883
815
|
##
|
884
|
-
# Forces reconnection of HTTP connections
|
816
|
+
# Forces reconnection of all HTTP connections, including TLS/SSL
|
817
|
+
# connections.
|
885
818
|
|
886
819
|
def reconnect
|
887
820
|
@generation += 1
|
888
821
|
end
|
889
822
|
|
890
823
|
##
|
891
|
-
# Forces reconnection of SSL connections.
|
824
|
+
# Forces reconnection of only TLS/SSL connections.
|
892
825
|
|
893
826
|
def reconnect_ssl
|
894
827
|
@ssl_generation += 1
|
@@ -921,14 +854,8 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
921
854
|
# the response will not have been read).
|
922
855
|
#
|
923
856
|
# +req+ must be a Net::HTTPGenericRequest subclass (see Net::HTTP for a list).
|
924
|
-
#
|
925
|
-
# If there is an error and the request is idempotent according to RFC 2616
|
926
|
-
# it will be retried automatically.
|
927
857
|
|
928
858
|
def request uri, req = nil, &block
|
929
|
-
retried = false
|
930
|
-
bad_response = false
|
931
|
-
|
932
859
|
uri = Bundler::URI uri
|
933
860
|
req = request_setup req || uri
|
934
861
|
response = nil
|
@@ -942,37 +869,12 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
942
869
|
response = http.request req, &block
|
943
870
|
|
944
871
|
if req.connection_close? or
|
945
|
-
|
872
|
+
(response.http_version <= '1.0' and
|
946
873
|
not response.connection_keep_alive?) or
|
947
|
-
|
874
|
+
response.connection_close? then
|
948
875
|
finish connection
|
949
876
|
end
|
950
|
-
rescue
|
951
|
-
message = error_message connection
|
952
|
-
|
953
|
-
finish connection
|
954
|
-
|
955
|
-
raise Error, "too many bad responses #{message}" if
|
956
|
-
bad_response or not can_retry? req
|
957
|
-
|
958
|
-
bad_response = true
|
959
|
-
retry
|
960
|
-
rescue *RETRIED_EXCEPTIONS => e
|
961
|
-
request_failed e, req, connection if
|
962
|
-
retried or not can_retry? req
|
963
|
-
|
964
|
-
reset connection
|
965
|
-
|
966
|
-
retried = true
|
967
|
-
retry
|
968
|
-
rescue Errno::EINVAL, Errno::ETIMEDOUT => e # not retried on ruby 2
|
969
|
-
request_failed e, req, connection if retried or not can_retry? req
|
970
|
-
|
971
|
-
reset connection
|
972
|
-
|
973
|
-
retried = true
|
974
|
-
retry
|
975
|
-
rescue Exception => e
|
877
|
+
rescue Exception # make sure to close the connection when it was interrupted
|
976
878
|
finish connection
|
977
879
|
|
978
880
|
raise
|
@@ -981,26 +883,11 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
981
883
|
end
|
982
884
|
end
|
983
885
|
|
984
|
-
@http_versions["#{uri.
|
886
|
+
@http_versions["#{uri.hostname}:#{uri.port}"] ||= response.http_version
|
985
887
|
|
986
888
|
response
|
987
889
|
end
|
988
890
|
|
989
|
-
##
|
990
|
-
# Raises an Error for +exception+ which resulted from attempting the request
|
991
|
-
# +req+ on the +connection+.
|
992
|
-
#
|
993
|
-
# Finishes the +connection+.
|
994
|
-
|
995
|
-
def request_failed exception, req, connection # :nodoc:
|
996
|
-
due_to = "(due to #{exception.message} - #{exception.class})"
|
997
|
-
message = "too many connection resets #{due_to} #{error_message connection}"
|
998
|
-
|
999
|
-
finish connection
|
1000
|
-
|
1001
|
-
raise Error, message, exception.backtrace
|
1002
|
-
end
|
1003
|
-
|
1004
891
|
##
|
1005
892
|
# Creates a GET request if +req_or_uri+ is a Bundler::URI and adds headers to the
|
1006
893
|
# request.
|
@@ -1008,7 +895,7 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
1008
895
|
# Returns the request.
|
1009
896
|
|
1010
897
|
def request_setup req_or_uri # :nodoc:
|
1011
|
-
req = if
|
898
|
+
req = if req_or_uri.respond_to? 'request_uri' then
|
1012
899
|
Net::HTTP::Get.new req_or_uri.request_uri
|
1013
900
|
else
|
1014
901
|
req_or_uri
|
@@ -1172,7 +1059,6 @@ application:
|
|
1172
1059
|
|
1173
1060
|
reconnect_ssl
|
1174
1061
|
end
|
1175
|
-
|
1176
1062
|
end
|
1177
1063
|
|
1178
1064
|
require_relative 'persistent/connection'
|