bundler 2.1.4 → 2.2.18
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of bundler might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +1790 -1430
- data/README.md +6 -8
- data/bundler.gemspec +5 -6
- data/exe/bundle +3 -0
- data/lib/bundler/build_metadata.rb +3 -11
- data/lib/bundler/cli/add.rb +1 -1
- data/lib/bundler/cli/binstubs.rb +6 -2
- data/lib/bundler/cli/cache.rb +2 -7
- data/lib/bundler/cli/clean.rb +1 -1
- data/lib/bundler/cli/common.rb +29 -2
- data/lib/bundler/cli/console.rb +1 -1
- data/lib/bundler/cli/doctor.rb +1 -1
- data/lib/bundler/cli/exec.rb +4 -4
- data/lib/bundler/cli/fund.rb +36 -0
- data/lib/bundler/cli/gem.rb +129 -28
- data/lib/bundler/cli/info.rb +15 -4
- data/lib/bundler/cli/init.rb +2 -2
- data/lib/bundler/cli/inject.rb +1 -1
- data/lib/bundler/cli/install.rb +13 -11
- data/lib/bundler/cli/issue.rb +2 -2
- data/lib/bundler/cli/list.rb +12 -10
- data/lib/bundler/cli/outdated.rb +94 -76
- data/lib/bundler/cli/plugin.rb +10 -0
- data/lib/bundler/cli/pristine.rb +5 -0
- data/lib/bundler/cli/show.rb +1 -1
- data/lib/bundler/cli/update.rb +3 -1
- data/lib/bundler/cli.rb +72 -56
- data/lib/bundler/compact_index_client/cache.rb +6 -14
- data/lib/bundler/compact_index_client/gem_parser.rb +28 -0
- data/lib/bundler/compact_index_client/updater.rb +13 -17
- data/lib/bundler/compact_index_client.rb +1 -1
- data/lib/bundler/current_ruby.rb +1 -0
- data/lib/bundler/definition.rb +117 -188
- data/lib/bundler/dep_proxy.rb +16 -9
- data/lib/bundler/dependency.rb +3 -10
- data/lib/bundler/dsl.rb +40 -33
- data/lib/bundler/endpoint_specification.rb +1 -1
- data/lib/bundler/env.rb +1 -1
- data/lib/bundler/environment_preserver.rb +26 -2
- data/lib/bundler/errors.rb +1 -0
- data/lib/bundler/feature_flag.rb +0 -6
- data/lib/bundler/fetcher/base.rb +1 -1
- data/lib/bundler/fetcher/compact_index.rb +1 -1
- data/lib/bundler/fetcher/downloader.rb +9 -5
- data/lib/bundler/fetcher/index.rb +3 -4
- data/lib/bundler/fetcher.rb +5 -4
- data/lib/bundler/friendly_errors.rb +22 -13
- data/lib/bundler/gem_helper.rb +51 -18
- data/lib/bundler/gem_helpers.rb +36 -25
- data/lib/bundler/gem_version_promoter.rb +4 -4
- data/lib/bundler/graph.rb +1 -1
- data/lib/bundler/index.rb +13 -9
- data/lib/bundler/injector.rb +23 -5
- data/lib/bundler/inline.rb +3 -2
- data/lib/bundler/installer/gem_installer.rb +3 -3
- data/lib/bundler/installer/parallel_installer.rb +46 -25
- data/lib/bundler/installer/standalone.rb +17 -2
- data/lib/bundler/installer.rb +37 -49
- data/lib/bundler/lazy_specification.rb +45 -25
- data/lib/bundler/lockfile_generator.rb +1 -1
- data/lib/bundler/lockfile_parser.rb +4 -14
- data/lib/bundler/man/.document +1 -0
- data/{man → lib/bundler/man}/bundle-add.1 +1 -1
- data/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-binstubs.1 +5 -3
- data/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +2 -4
- data/{man → lib/bundler/man}/bundle-cache.1 +1 -1
- data/{man/bundle-cache.ronn → lib/bundler/man/bundle-cache.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-check.1 +1 -1
- data/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-clean.1 +1 -1
- data/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-config.1 +40 -38
- data/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +50 -50
- data/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
- data/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-exec.1 +1 -1
- data/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-gem.1 +25 -3
- data/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +30 -7
- data/{man → lib/bundler/man}/bundle-info.1 +1 -1
- data/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-init.1 +1 -1
- data/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-inject.1 +1 -1
- data/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-install.1 +30 -3
- data/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +25 -3
- data/{man → lib/bundler/man}/bundle-list.1 +7 -7
- data/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
- data/{man → lib/bundler/man}/bundle-lock.1 +1 -1
- data/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-open.1 +1 -1
- data/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-outdated.1 +1 -1
- data/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-platform.1 +1 -1
- data/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
- data/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-remove.1 +1 -1
- data/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-show.1 +1 -1
- data/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-update.1 +1 -1
- data/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-viz.1 +1 -1
- data/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle.1 +1 -1
- data/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +0 -0
- data/{man → lib/bundler/man}/gemfile.5 +4 -4
- data/{man → lib/bundler/man}/gemfile.5.ronn +4 -4
- data/{man → lib/bundler/man}/index.txt +0 -0
- data/lib/bundler/mirror.rb +2 -2
- data/lib/bundler/plugin/api/source.rb +22 -1
- data/lib/bundler/plugin/dsl.rb +1 -1
- data/lib/bundler/plugin/index.rb +10 -1
- data/lib/bundler/plugin/installer/rubygems.rb +1 -1
- data/lib/bundler/plugin/installer.rb +9 -11
- data/lib/bundler/plugin/source_list.rb +5 -1
- data/lib/bundler/plugin.rb +33 -7
- data/lib/bundler/psyched_yaml.rb +0 -15
- data/lib/bundler/remote_specification.rb +5 -2
- data/lib/bundler/resolver/spec_group.rb +56 -53
- data/lib/bundler/resolver.rb +88 -115
- data/lib/bundler/retry.rb +2 -2
- data/lib/bundler/ruby_version.rb +1 -1
- data/lib/bundler/rubygems_ext.rb +71 -11
- data/lib/bundler/rubygems_gem_installer.rb +50 -9
- data/lib/bundler/rubygems_integration.rb +25 -60
- data/lib/bundler/runtime.rb +4 -14
- data/lib/bundler/settings.rb +107 -55
- data/lib/bundler/shared_helpers.rb +3 -3
- data/lib/bundler/similarity_detector.rb +1 -1
- data/lib/bundler/source/git/git_proxy.rb +82 -80
- data/lib/bundler/source/git.rb +24 -22
- data/lib/bundler/source/metadata.rb +0 -4
- data/lib/bundler/source/path/installer.rb +10 -10
- data/lib/bundler/source/path.rb +10 -4
- data/lib/bundler/source/rubygems/remote.rb +1 -1
- data/lib/bundler/source/rubygems.rb +60 -28
- data/lib/bundler/source/rubygems_aggregate.rb +64 -0
- data/lib/bundler/source.rb +16 -1
- data/lib/bundler/source_list.rb +52 -28
- data/lib/bundler/source_map.rb +58 -0
- data/lib/bundler/spec_set.rb +29 -17
- data/lib/bundler/stub_specification.rb +25 -7
- data/lib/bundler/templates/Gemfile +1 -1
- data/lib/bundler/templates/gems.rb +1 -1
- data/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
- 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/README.md.tt +6 -5
- data/lib/bundler/templates/newgem/Rakefile.tt +19 -5
- data/lib/bundler/templates/newgem/bin/console.tt +1 -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 +16 -0
- data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
- data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
- data/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +15 -7
- data/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
- data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
- data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
- 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/ui/shell.rb +5 -5
- data/lib/bundler/uri_credentials_filter.rb +3 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +7 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +11 -5
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +34 -2
- data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +3 -3
- data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +12 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +49 -47
- data/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -1
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +82 -189
- data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +4 -2
- data/lib/bundler/vendor/thor/lib/thor/actions.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
- data/lib/bundler/vendor/thor/lib/thor/error.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +5 -1
- data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +9 -8
- data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +5 -2
- data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +5 -1
- data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor.rb +5 -13
- data/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
- data/lib/bundler/vendored_persistent.rb +0 -7
- data/lib/bundler/vendored_tmpdir.rb +4 -0
- data/lib/bundler/version.rb +1 -1
- data/lib/bundler/worker.rb +1 -1
- data/lib/bundler/yaml_serializer.rb +1 -1
- data/lib/bundler.rb +34 -9
- metadata +77 -86
- data/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
- data/man/bundle-add.1.txt +0 -58
- data/man/bundle-binstubs.1.txt +0 -48
- data/man/bundle-cache.1.txt +0 -78
- data/man/bundle-check.1.txt +0 -33
- data/man/bundle-clean.1.txt +0 -26
- data/man/bundle-config.1.txt +0 -528
- data/man/bundle-doctor.1.txt +0 -44
- data/man/bundle-exec.1.txt +0 -178
- data/man/bundle-gem.1.txt +0 -91
- data/man/bundle-info.1.txt +0 -21
- data/man/bundle-init.1.txt +0 -34
- data/man/bundle-inject.1.txt +0 -32
- data/man/bundle-install.1.txt +0 -401
- data/man/bundle-list.1.txt +0 -43
- data/man/bundle-lock.1.txt +0 -93
- data/man/bundle-open.1.txt +0 -29
- data/man/bundle-outdated.1.txt +0 -131
- data/man/bundle-platform.1.txt +0 -57
- data/man/bundle-pristine.1.txt +0 -44
- data/man/bundle-remove.1.txt +0 -34
- data/man/bundle-show.1.txt +0 -27
- data/man/bundle-update.1.txt +0 -390
- data/man/bundle-viz.1.txt +0 -39
- data/man/bundle.1.txt +0 -116
- data/man/gemfile.5.txt +0 -649
@@ -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,27 @@ 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
|
-
|
161
|
+
if Process.const_defined? :RLIMIT_NOFILE
|
162
|
+
open_file_limits = Process.getrlimit(Process::RLIMIT_NOFILE)
|
163
|
+
|
164
|
+
# Under JRuby on Windows Process responds to `getrlimit` but returns something that does not match docs
|
165
|
+
if open_file_limits.respond_to?(:first)
|
166
|
+
DEFAULT_POOL_SIZE = open_file_limits.first / 4
|
167
|
+
else
|
168
|
+
DEFAULT_POOL_SIZE = 256
|
169
|
+
end
|
202
170
|
else
|
203
|
-
DEFAULT_POOL_SIZE =
|
171
|
+
DEFAULT_POOL_SIZE = 256
|
204
172
|
end
|
205
173
|
|
206
174
|
##
|
207
175
|
# The version of Bundler::Persistent::Net::HTTP::Persistent you are using
|
208
176
|
|
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
|
177
|
+
VERSION = '4.0.0'
|
225
178
|
|
226
179
|
##
|
227
180
|
# Error class for errors raised by Bundler::Persistent::Net::HTTP::Persistent. Various
|
@@ -348,6 +301,13 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
348
301
|
|
349
302
|
attr_accessor :max_requests
|
350
303
|
|
304
|
+
##
|
305
|
+
# Number of retries to perform if a request fails.
|
306
|
+
#
|
307
|
+
# See also #max_retries=, Net::HTTP#max_retries=.
|
308
|
+
|
309
|
+
attr_reader :max_retries
|
310
|
+
|
351
311
|
##
|
352
312
|
# The value sent in the Keep-Alive header. Defaults to 30. Not needed for
|
353
313
|
# HTTP/1.1 servers.
|
@@ -360,8 +320,7 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
360
320
|
attr_accessor :keep_alive
|
361
321
|
|
362
322
|
##
|
363
|
-
#
|
364
|
-
# from everybody else's.
|
323
|
+
# The name for this collection of persistent connections.
|
365
324
|
|
366
325
|
attr_reader :name
|
367
326
|
|
@@ -490,23 +449,11 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
490
449
|
|
491
450
|
attr_reader :verify_mode
|
492
451
|
|
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
452
|
##
|
505
453
|
# Creates a new Bundler::Persistent::Net::HTTP::Persistent.
|
506
454
|
#
|
507
|
-
# Set +name+
|
508
|
-
#
|
509
|
-
# good enough. This parameter will be required in a future version.
|
455
|
+
# Set a +name+ for fun. Your library name should be good enough, but this
|
456
|
+
# otherwise has no purpose.
|
510
457
|
#
|
511
458
|
# +proxy+ may be set to a Bundler::URI::HTTP or :ENV to pick up proxy options from
|
512
459
|
# the environment. See proxy_from_env for details.
|
@@ -519,8 +466,9 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
519
466
|
# proxy.password = 'hunter2'
|
520
467
|
#
|
521
468
|
# Set +pool_size+ to limit the maximum number of connections allowed.
|
522
|
-
# Defaults to 1/4 the number of allowed file handles
|
523
|
-
#
|
469
|
+
# Defaults to 1/4 the number of allowed file handles or 256 if your OS does
|
470
|
+
# not support a limit on allowed file handles. You can have no more than
|
471
|
+
# this many threads with active HTTP transactions.
|
524
472
|
|
525
473
|
def initialize name: nil, proxy: nil, pool_size: DEFAULT_POOL_SIZE
|
526
474
|
@name = name
|
@@ -537,6 +485,7 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
537
485
|
@write_timeout = nil
|
538
486
|
@idle_timeout = 5
|
539
487
|
@max_requests = nil
|
488
|
+
@max_retries = 1
|
540
489
|
@socket_options = []
|
541
490
|
@ssl_generation = 0 # incremented when SSL session variables change
|
542
491
|
|
@@ -568,8 +517,6 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
568
517
|
@reuse_ssl_sessions = OpenSSL::SSL.const_defined? :Session
|
569
518
|
end
|
570
519
|
|
571
|
-
@retry_change_requests = false
|
572
|
-
|
573
520
|
self.proxy = proxy if proxy
|
574
521
|
end
|
575
522
|
|
@@ -630,7 +577,9 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
630
577
|
|
631
578
|
net_http_args = [uri.hostname, uri.port]
|
632
579
|
|
633
|
-
|
580
|
+
# I'm unsure if uri.host or uri.hostname should be checked against
|
581
|
+
# the proxy bypass list.
|
582
|
+
if @proxy_uri and not proxy_bypass? uri.host, uri.port then
|
634
583
|
net_http_args.concat @proxy_args
|
635
584
|
else
|
636
585
|
net_http_args.concat [nil, nil, nil, nil]
|
@@ -650,9 +599,11 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
650
599
|
reset connection
|
651
600
|
end
|
652
601
|
|
653
|
-
http.
|
654
|
-
http.
|
655
|
-
http.
|
602
|
+
http.keep_alive_timeout = @idle_timeout if @idle_timeout
|
603
|
+
http.max_retries = @max_retries if http.respond_to?(:max_retries=)
|
604
|
+
http.read_timeout = @read_timeout if @read_timeout
|
605
|
+
http.write_timeout = @write_timeout if
|
606
|
+
@write_timeout && http.respond_to?(:write_timeout=)
|
656
607
|
|
657
608
|
return yield connection
|
658
609
|
rescue Errno::ECONNREFUSED
|
@@ -670,27 +621,14 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
670
621
|
end
|
671
622
|
|
672
623
|
##
|
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
|
624
|
+
# CGI::escape wrapper
|
687
625
|
|
688
626
|
def escape str
|
689
627
|
CGI.escape str if str
|
690
628
|
end
|
691
629
|
|
692
630
|
##
|
693
|
-
#
|
631
|
+
# CGI::unescape wrapper
|
694
632
|
|
695
633
|
def unescape str
|
696
634
|
CGI.unescape str if str
|
@@ -733,6 +671,7 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
733
671
|
def finish connection
|
734
672
|
connection.finish
|
735
673
|
|
674
|
+
connection.http.instance_variable_set :@last_communicated, nil
|
736
675
|
connection.http.instance_variable_set :@ssl_session, nil unless
|
737
676
|
@reuse_ssl_sessions
|
738
677
|
end
|
@@ -741,31 +680,31 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
741
680
|
# Returns the HTTP protocol version for +uri+
|
742
681
|
|
743
682
|
def http_version uri
|
744
|
-
@http_versions["#{uri.
|
683
|
+
@http_versions["#{uri.hostname}:#{uri.port}"]
|
745
684
|
end
|
746
685
|
|
747
686
|
##
|
748
|
-
#
|
687
|
+
# Adds "http://" to the String +uri+ if it is missing.
|
749
688
|
|
750
|
-
def
|
751
|
-
|
752
|
-
when 'DELETE', 'GET', 'HEAD', 'OPTIONS', 'PUT', 'TRACE' then
|
753
|
-
true
|
754
|
-
end
|
689
|
+
def normalize_uri uri
|
690
|
+
(uri =~ /^https?:/) ? uri : "http://#{uri}"
|
755
691
|
end
|
756
692
|
|
757
693
|
##
|
758
|
-
#
|
694
|
+
# Set the maximum number of retries for a request.
|
695
|
+
#
|
696
|
+
# Defaults to one retry.
|
697
|
+
#
|
698
|
+
# Set this to 0 to disable retries.
|
759
699
|
|
760
|
-
def
|
761
|
-
|
762
|
-
end
|
700
|
+
def max_retries= retries
|
701
|
+
retries = retries.to_int
|
763
702
|
|
764
|
-
|
765
|
-
# Adds "http://" to the String +uri+ if it is missing.
|
703
|
+
raise ArgumentError, "max_retries must be positive" if retries < 0
|
766
704
|
|
767
|
-
|
768
|
-
|
705
|
+
@max_retries = retries
|
706
|
+
|
707
|
+
reconnect
|
769
708
|
end
|
770
709
|
|
771
710
|
##
|
@@ -806,7 +745,7 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
806
745
|
|
807
746
|
if @proxy_uri then
|
808
747
|
@proxy_args = [
|
809
|
-
@proxy_uri.
|
748
|
+
@proxy_uri.hostname,
|
810
749
|
@proxy_uri.port,
|
811
750
|
unescape(@proxy_uri.user),
|
812
751
|
unescape(@proxy_uri.password),
|
@@ -881,14 +820,15 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
881
820
|
end
|
882
821
|
|
883
822
|
##
|
884
|
-
# Forces reconnection of HTTP connections
|
823
|
+
# Forces reconnection of all HTTP connections, including TLS/SSL
|
824
|
+
# connections.
|
885
825
|
|
886
826
|
def reconnect
|
887
827
|
@generation += 1
|
888
828
|
end
|
889
829
|
|
890
830
|
##
|
891
|
-
# Forces reconnection of SSL connections.
|
831
|
+
# Forces reconnection of only TLS/SSL connections.
|
892
832
|
|
893
833
|
def reconnect_ssl
|
894
834
|
@ssl_generation += 1
|
@@ -921,14 +861,8 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
921
861
|
# the response will not have been read).
|
922
862
|
#
|
923
863
|
# +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
864
|
|
928
865
|
def request uri, req = nil, &block
|
929
|
-
retried = false
|
930
|
-
bad_response = false
|
931
|
-
|
932
866
|
uri = Bundler::URI uri
|
933
867
|
req = request_setup req || uri
|
934
868
|
response = nil
|
@@ -942,37 +876,12 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
942
876
|
response = http.request req, &block
|
943
877
|
|
944
878
|
if req.connection_close? or
|
945
|
-
|
879
|
+
(response.http_version <= '1.0' and
|
946
880
|
not response.connection_keep_alive?) or
|
947
|
-
|
881
|
+
response.connection_close? then
|
948
882
|
finish connection
|
949
883
|
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
|
884
|
+
rescue Exception # make sure to close the connection when it was interrupted
|
976
885
|
finish connection
|
977
886
|
|
978
887
|
raise
|
@@ -981,26 +890,11 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
981
890
|
end
|
982
891
|
end
|
983
892
|
|
984
|
-
@http_versions["#{uri.
|
893
|
+
@http_versions["#{uri.hostname}:#{uri.port}"] ||= response.http_version
|
985
894
|
|
986
895
|
response
|
987
896
|
end
|
988
897
|
|
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
898
|
##
|
1005
899
|
# Creates a GET request if +req_or_uri+ is a Bundler::URI and adds headers to the
|
1006
900
|
# request.
|
@@ -1008,7 +902,7 @@ class Bundler::Persistent::Net::HTTP::Persistent
|
|
1008
902
|
# Returns the request.
|
1009
903
|
|
1010
904
|
def request_setup req_or_uri # :nodoc:
|
1011
|
-
req = if
|
905
|
+
req = if req_or_uri.respond_to? 'request_uri' then
|
1012
906
|
Net::HTTP::Get.new req_or_uri.request_uri
|
1013
907
|
else
|
1014
908
|
req_or_uri
|
@@ -1172,7 +1066,6 @@ application:
|
|
1172
1066
|
|
1173
1067
|
reconnect_ssl
|
1174
1068
|
end
|
1175
|
-
|
1176
1069
|
end
|
1177
1070
|
|
1178
1071
|
require_relative 'persistent/connection'
|
@@ -33,7 +33,8 @@ class Bundler::Thor
|
|
33
33
|
# Boolean:: true if it is identical, false otherwise.
|
34
34
|
#
|
35
35
|
def identical?
|
36
|
-
|
36
|
+
source = File.expand_path(render, File.dirname(destination))
|
37
|
+
exists? && File.identical?(source, destination)
|
37
38
|
end
|
38
39
|
|
39
40
|
def invoke!
|
@@ -251,7 +251,8 @@ class Bundler::Thor
|
|
251
251
|
# path<String>:: path of the file to be changed
|
252
252
|
# flag<Regexp|String>:: the regexp or string to be replaced
|
253
253
|
# replacement<String>:: the replacement, can be also given as a block
|
254
|
-
# config<Hash>:: give :verbose => false to not log the status
|
254
|
+
# config<Hash>:: give :verbose => false to not log the status, and
|
255
|
+
# :force => true, to force the replacement regardless of runner behavior.
|
255
256
|
#
|
256
257
|
# ==== Example
|
257
258
|
#
|
@@ -262,9 +263,10 @@ class Bundler::Thor
|
|
262
263
|
# end
|
263
264
|
#
|
264
265
|
def gsub_file(path, flag, *args, &block)
|
265
|
-
return unless behavior == :invoke
|
266
266
|
config = args.last.is_a?(Hash) ? args.pop : {}
|
267
267
|
|
268
|
+
return unless behavior == :invoke || config.fetch(:force, false)
|
269
|
+
|
268
270
|
path = File.expand_path(path, destination_root)
|
269
271
|
say_status :gsub, relative_to_original_destination_root(path), config.fetch(:verbose, true)
|
270
272
|
|
@@ -22,6 +22,15 @@ class Bundler::Thor
|
|
22
22
|
|
23
23
|
TEMPLATE_EXTNAME = ".tt"
|
24
24
|
|
25
|
+
class << self
|
26
|
+
def deprecation_warning(message) #:nodoc:
|
27
|
+
unless ENV['THOR_SILENCE_DEPRECATION']
|
28
|
+
warn "Deprecation warning: #{message}\n" +
|
29
|
+
'You can silence deprecations warning by setting the environment variable THOR_SILENCE_DEPRECATION.'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
25
34
|
module Base
|
26
35
|
attr_accessor :options, :parent_options, :args
|
27
36
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
class Bundler::Thor
|
2
|
-
Correctable = if defined?(DidYouMean::SpellChecker) && defined?(DidYouMean::Correctable)
|
2
|
+
Correctable = if defined?(DidYouMean::SpellChecker) && defined?(DidYouMean::Correctable) # rubocop:disable Naming/ConstantName
|
3
3
|
# In order to support versions of Ruby that don't have keyword
|
4
4
|
# arguments, we need our own spell checker class that doesn't take key
|
5
5
|
# words. Even though this code wouldn't be hit because of the check
|
@@ -30,7 +30,11 @@ class Bundler::Thor
|
|
30
30
|
|
31
31
|
arguments.each do |argument|
|
32
32
|
if !argument.default.nil?
|
33
|
-
|
33
|
+
begin
|
34
|
+
@assigns[argument.human_name] = argument.default.dup
|
35
|
+
rescue TypeError # Compatibility shim for un-dup-able Fixnum in Ruby < 2.4
|
36
|
+
@assigns[argument.human_name] = argument.default
|
37
|
+
end
|
34
38
|
elsif argument.required?
|
35
39
|
@non_assigned_required << argument
|
36
40
|
end
|
@@ -133,15 +133,16 @@ class Bundler::Thor
|
|
133
133
|
|
134
134
|
protected
|
135
135
|
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
136
|
+
def assign_result!(option, result)
|
137
|
+
if option.repeatable && option.type == :hash
|
138
|
+
(@assigns[option.human_name] ||= {}).merge!(result)
|
139
|
+
elsif option.repeatable
|
140
|
+
(@assigns[option.human_name] ||= []) << result
|
141
|
+
else
|
142
|
+
@assigns[option.human_name] = result
|
143
|
+
end
|
143
144
|
end
|
144
|
-
|
145
|
+
|
145
146
|
# Check if the current value in peek is a registered switch.
|
146
147
|
#
|
147
148
|
# Two booleans are returned. The first is true if the current value
|
@@ -94,6 +94,8 @@ class Bundler::Thor
|
|
94
94
|
# say("I know you knew that.")
|
95
95
|
#
|
96
96
|
def say(message = "", color = nil, force_new_line = (message.to_s !~ /( |\t)\Z/))
|
97
|
+
return if quiet?
|
98
|
+
|
97
99
|
buffer = prepare_message(message, *color)
|
98
100
|
buffer << "\n" if force_new_line && !message.to_s.end_with?("\n")
|
99
101
|
|
@@ -230,8 +232,9 @@ class Bundler::Thor
|
|
230
232
|
paras = message.split("\n\n")
|
231
233
|
|
232
234
|
paras.map! do |unwrapped|
|
233
|
-
|
234
|
-
|
235
|
+
words = unwrapped.split(" ")
|
236
|
+
counter = words.first.length
|
237
|
+
words.inject do |memo, word|
|
235
238
|
word = word.gsub(/\n\005/, "\n").gsub(/\005/, "\n")
|
236
239
|
counter = 0 if word.include? "\n"
|
237
240
|
if (counter + word.length + 1) < width
|
@@ -97,7 +97,11 @@ class Bundler::Thor
|
|
97
97
|
protected
|
98
98
|
|
99
99
|
def can_display_colors?
|
100
|
-
|
100
|
+
are_colors_supported? && !are_colors_disabled?
|
101
|
+
end
|
102
|
+
|
103
|
+
def are_colors_supported?
|
104
|
+
stdout.tty? && ENV["TERM"] != "dumb"
|
101
105
|
end
|
102
106
|
|
103
107
|
def are_colors_disabled?
|