bundler 2.2.3 → 2.3.5
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +503 -7
- data/README.md +1 -1
- data/bundler.gemspec +2 -3
- data/exe/bundle +7 -8
- data/lib/bundler/.document +1 -0
- data/lib/bundler/build_metadata.rb +2 -2
- data/lib/bundler/cli/cache.rb +2 -1
- data/lib/bundler/cli/check.rb +4 -2
- data/lib/bundler/cli/common.rb +15 -2
- data/lib/bundler/cli/doctor.rb +15 -4
- data/lib/bundler/cli/exec.rb +1 -6
- data/lib/bundler/cli/gem.rb +132 -24
- data/lib/bundler/cli/info.rb +16 -4
- data/lib/bundler/cli/install.rb +12 -27
- data/lib/bundler/cli/issue.rb +4 -3
- data/lib/bundler/cli/list.rb +7 -1
- data/lib/bundler/cli/lock.rb +5 -1
- data/lib/bundler/cli/open.rb +1 -2
- data/lib/bundler/cli/outdated.rb +10 -11
- data/lib/bundler/cli/remove.rb +1 -2
- data/lib/bundler/cli/update.rb +17 -8
- data/lib/bundler/cli.rb +44 -60
- data/lib/bundler/compact_index_client/cache.rb +0 -9
- data/lib/bundler/compact_index_client/updater.rb +10 -19
- data/lib/bundler/compact_index_client.rb +2 -8
- data/lib/bundler/current_ruby.rb +5 -4
- data/lib/bundler/definition.rb +158 -316
- data/lib/bundler/dep_proxy.rb +15 -8
- data/lib/bundler/dependency.rb +5 -7
- data/lib/bundler/digest.rb +71 -0
- data/lib/bundler/dsl.rb +67 -66
- data/lib/bundler/endpoint_specification.rb +21 -11
- data/lib/bundler/environment_preserver.rb +4 -1
- data/lib/bundler/errors.rb +19 -3
- data/lib/bundler/feature_flag.rb +0 -5
- data/lib/bundler/fetcher/compact_index.rb +10 -15
- data/lib/bundler/fetcher/downloader.rb +9 -6
- data/lib/bundler/fetcher/index.rb +0 -27
- data/lib/bundler/fetcher.rb +10 -17
- data/lib/bundler/friendly_errors.rb +5 -32
- data/lib/bundler/gem_helper.rb +28 -21
- data/lib/bundler/gem_version_promoter.rb +2 -2
- data/lib/bundler/index.rb +8 -12
- data/lib/bundler/injector.rb +12 -3
- data/lib/bundler/inline.rb +2 -1
- data/lib/bundler/installer/gem_installer.rb +4 -22
- data/lib/bundler/installer/parallel_installer.rb +36 -15
- data/lib/bundler/installer/standalone.rb +29 -9
- data/lib/bundler/installer.rb +8 -34
- data/lib/bundler/lazy_specification.rb +32 -20
- data/lib/bundler/lockfile_generator.rb +1 -1
- data/lib/bundler/lockfile_parser.rb +16 -45
- data/{man → lib/bundler/man}/bundle-add.1 +10 -2
- data/lib/bundler/man/bundle-add.1.ronn +7 -1
- data/{man → lib/bundler/man}/bundle-binstubs.1 +1 -1
- data/{man → lib/bundler/man}/bundle-cache.1 +1 -1
- data/{man → lib/bundler/man}/bundle-check.1 +1 -1
- data/{man → lib/bundler/man}/bundle-clean.1 +1 -1
- data/{man → lib/bundler/man}/bundle-config.1 +27 -19
- data/lib/bundler/man/bundle-config.1.ronn +33 -25
- data/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
- data/{man → lib/bundler/man}/bundle-exec.1 +1 -1
- data/{man → lib/bundler/man}/bundle-gem.1 +14 -1
- data/lib/bundler/man/bundle-gem.1.ronn +16 -0
- data/{man → lib/bundler/man}/bundle-info.1 +1 -1
- data/{man → lib/bundler/man}/bundle-init.1 +1 -1
- data/{man → lib/bundler/man}/bundle-inject.1 +1 -1
- data/{man → lib/bundler/man}/bundle-install.1 +2 -2
- data/lib/bundler/man/bundle-install.1.ronn +2 -2
- data/{man → lib/bundler/man}/bundle-list.1 +1 -1
- data/{man → lib/bundler/man}/bundle-lock.1 +1 -1
- data/{man → lib/bundler/man}/bundle-open.1 +1 -1
- data/{man → lib/bundler/man}/bundle-outdated.1 +1 -1
- data/{man → lib/bundler/man}/bundle-platform.1 +1 -1
- data/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
- data/{man → lib/bundler/man}/bundle-remove.1 +1 -1
- data/{man → lib/bundler/man}/bundle-show.1 +1 -1
- data/{man → lib/bundler/man}/bundle-update.1 +5 -5
- data/lib/bundler/man/bundle-update.1.ronn +5 -4
- data/{man → lib/bundler/man}/bundle-viz.1 +1 -1
- data/{man → lib/bundler/man}/bundle.1 +1 -1
- data/{man → lib/bundler/man}/gemfile.5 +28 -2
- data/lib/bundler/man/gemfile.5.ronn +9 -1
- data/{man → lib/bundler/man}/index.txt +0 -0
- data/lib/bundler/plugin/api/source.rb +22 -0
- data/lib/bundler/plugin/index.rb +4 -1
- data/lib/bundler/plugin/installer.rb +10 -10
- data/lib/bundler/plugin/source_list.rb +4 -0
- data/lib/bundler/plugin.rb +28 -8
- data/lib/bundler/process_lock.rb +1 -1
- data/lib/bundler/psyched_yaml.rb +1 -13
- data/lib/bundler/resolver/spec_group.rb +36 -48
- data/lib/bundler/resolver.rb +97 -151
- data/lib/bundler/retry.rb +1 -1
- data/lib/bundler/ruby_version.rb +1 -1
- data/lib/bundler/rubygems_ext.rb +46 -8
- data/lib/bundler/rubygems_gem_installer.rb +68 -1
- data/lib/bundler/rubygems_integration.rb +43 -60
- data/lib/bundler/runtime.rb +18 -11
- data/lib/bundler/self_manager.rb +168 -0
- data/lib/bundler/settings.rb +97 -21
- data/lib/bundler/setup.rb +2 -2
- data/lib/bundler/shared_helpers.rb +6 -21
- data/lib/bundler/source/git/git_proxy.rb +60 -53
- data/lib/bundler/source/git.rb +38 -18
- data/lib/bundler/source/metadata.rb +1 -5
- data/lib/bundler/source/path/installer.rb +3 -1
- data/lib/bundler/source/path.rb +3 -1
- data/lib/bundler/source/rubygems.rb +113 -100
- data/lib/bundler/source/rubygems_aggregate.rb +68 -0
- data/lib/bundler/source.rb +21 -0
- data/lib/bundler/source_list.rb +100 -62
- data/lib/bundler/source_map.rb +58 -0
- data/lib/bundler/spec_set.rb +21 -34
- data/lib/bundler/stub_specification.rb +8 -0
- data/lib/bundler/templates/Executable.bundler +7 -7
- data/lib/bundler/templates/Gemfile +0 -2
- data/lib/bundler/templates/gems.rb +0 -3
- data/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
- data/lib/bundler/templates/newgem/Gemfile.tt +5 -2
- data/lib/bundler/templates/newgem/README.md.tt +5 -3
- data/lib/bundler/templates/newgem/Rakefile.tt +15 -2
- data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +15 -6
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +18 -16
- data/lib/bundler/templates/newgem/rubocop.yml.tt +3 -0
- data/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
- data/lib/bundler/templates/newgem/standard.yml.tt +2 -0
- data/lib/bundler/templates/newgem/test/minitest/{newgem_test.rb.tt → test_newgem.rb.tt} +1 -1
- data/lib/bundler/ui/shell.rb +1 -1
- data/lib/bundler/vendor/.document +1 -0
- data/lib/bundler/vendor/connection_pool/LICENSE +20 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +19 -21
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +57 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +39 -74
- data/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
- data/lib/bundler/vendor/molinillo/LICENSE +9 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +7 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +11 -5
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +2 -3
- data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +2 -2
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +12 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +11 -7
- data/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
- data/lib/bundler/vendor/thor/LICENSE.md +20 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +9 -7
- data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +1 -2
- data/lib/bundler/vendor/thor/lib/thor/actions.rb +7 -3
- data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +6 -0
- data/lib/bundler/vendor/thor/lib/thor/error.rb +10 -5
- data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +5 -1
- data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +28 -9
- data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +27 -6
- data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +5 -1
- data/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor.rb +5 -6
- data/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +1 -1
- data/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
- data/lib/bundler/vendor/tsort/lib/tsort.rb +453 -0
- data/lib/bundler/vendor/uri/LICENSE.txt +22 -0
- data/lib/bundler/vendor/uri/lib/uri/common.rb +17 -80
- data/lib/bundler/vendor/uri/lib/uri/ftp.rb +0 -1
- data/lib/bundler/vendor/uri/lib/uri/generic.rb +5 -6
- data/lib/bundler/vendor/uri/lib/uri/http.rb +0 -1
- data/lib/bundler/vendor/uri/lib/uri/https.rb +0 -1
- data/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
- data/lib/bundler/vendor/uri/lib/uri/mailto.rb +0 -1
- data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +1 -14
- data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +1 -12
- data/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- data/lib/bundler/vendor/uri/lib/uri/ws.rb +84 -0
- data/lib/bundler/vendor/uri/lib/uri/wss.rb +22 -0
- data/lib/bundler/vendor/uri/lib/uri.rb +0 -1
- data/lib/bundler/vendored_tsort.rb +4 -0
- data/lib/bundler/version.rb +1 -1
- data/lib/bundler/worker.rb +19 -4
- data/lib/bundler.rb +29 -33
- metadata +54 -35
- data/lib/bundler/gemdeps.rb +0 -29
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +0 -66
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
= net-http-persistent
|
|
2
|
+
|
|
3
|
+
home :: https://github.com/drbrain/net-http-persistent
|
|
4
|
+
rdoc :: http://docs.seattlerb.org/net-http-persistent
|
|
5
|
+
|
|
6
|
+
== DESCRIPTION:
|
|
7
|
+
|
|
8
|
+
Manages persistent connections using Net::HTTP including a thread pool for
|
|
9
|
+
connecting to multiple hosts.
|
|
10
|
+
|
|
11
|
+
Using persistent HTTP connections can dramatically increase the speed of HTTP.
|
|
12
|
+
Creating a new HTTP connection for every request involves an extra TCP
|
|
13
|
+
round-trip and causes TCP congestion avoidance negotiation to start over.
|
|
14
|
+
|
|
15
|
+
Net::HTTP supports persistent connections with some API methods but does not
|
|
16
|
+
make setting up a single persistent connection or managing multiple
|
|
17
|
+
connections easy. Net::HTTP::Persistent wraps Net::HTTP and allows you to
|
|
18
|
+
focus on how to make HTTP requests.
|
|
19
|
+
|
|
20
|
+
== FEATURES/PROBLEMS:
|
|
21
|
+
|
|
22
|
+
* Supports TLS with secure defaults
|
|
23
|
+
* Thread-safe
|
|
24
|
+
* Pure ruby
|
|
25
|
+
|
|
26
|
+
== SYNOPSIS
|
|
27
|
+
|
|
28
|
+
The following example will make two requests to the same server. The
|
|
29
|
+
connection is kept alive between requests:
|
|
30
|
+
|
|
31
|
+
require 'net/http/persistent'
|
|
32
|
+
|
|
33
|
+
uri = URI 'http://example.com/awesome/web/service'
|
|
34
|
+
|
|
35
|
+
http = Net::HTTP::Persistent.new name: 'my_app_name'
|
|
36
|
+
|
|
37
|
+
# perform a GET
|
|
38
|
+
response = http.request uri
|
|
39
|
+
|
|
40
|
+
# create a POST
|
|
41
|
+
post_uri = uri + 'create'
|
|
42
|
+
post = Net::HTTP::Post.new post_uri.path
|
|
43
|
+
post.set_form_data 'some' => 'cool data'
|
|
44
|
+
|
|
45
|
+
# perform the POST, the URI is always required
|
|
46
|
+
response = http.request post_uri, post
|
|
47
|
+
|
|
48
|
+
# if you are done making http requests, or won't make requests for several
|
|
49
|
+
# minutes
|
|
50
|
+
http.shutdown
|
|
51
|
+
|
|
52
|
+
Please see the documentation on Net::HTTP::Persistent for more information,
|
|
53
|
+
including SSL connection verification, header handling and tunable options.
|
|
54
|
+
|
|
55
|
+
== INSTALL:
|
|
56
|
+
|
|
57
|
+
gem install net-http-persistent
|
|
58
|
+
|
|
59
|
+
== LICENSE:
|
|
60
|
+
|
|
61
|
+
(The MIT License)
|
|
62
|
+
|
|
63
|
+
Copyright (c) Eric Hodel, Aaron Patterson
|
|
64
|
+
|
|
65
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
66
|
+
a copy of this software and associated documentation files (the
|
|
67
|
+
'Software'), to deal in the Software without restriction, including
|
|
68
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
69
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
70
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
71
|
+
the following conditions:
|
|
72
|
+
|
|
73
|
+
The above copyright notice and this permission notice shall be
|
|
74
|
+
included in all copies or substantial portions of the Software.
|
|
75
|
+
|
|
76
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
|
77
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
78
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
79
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
80
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
81
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
82
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Copyright (c) 2008 Yehuda Katz, Eric Hodel, et al.
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
+
a copy of this software and associated documentation files (the
|
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
+
the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be
|
|
12
|
+
included in all copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -210,9 +210,9 @@ class Bundler::Thor
|
|
|
210
210
|
#
|
|
211
211
|
# ==== Examples
|
|
212
212
|
#
|
|
213
|
-
# inject_into_class "app/controllers/application_controller.rb", ApplicationController, " filter_parameter :password\n"
|
|
213
|
+
# inject_into_class "app/controllers/application_controller.rb", "ApplicationController", " filter_parameter :password\n"
|
|
214
214
|
#
|
|
215
|
-
# inject_into_class "app/controllers/application_controller.rb", ApplicationController do
|
|
215
|
+
# inject_into_class "app/controllers/application_controller.rb", "ApplicationController" do
|
|
216
216
|
# " filter_parameter :password\n"
|
|
217
217
|
# end
|
|
218
218
|
#
|
|
@@ -233,9 +233,9 @@ class Bundler::Thor
|
|
|
233
233
|
#
|
|
234
234
|
# ==== Examples
|
|
235
235
|
#
|
|
236
|
-
# inject_into_module "app/helpers/application_helper.rb", ApplicationHelper, " def help; 'help'; end\n"
|
|
236
|
+
# inject_into_module "app/helpers/application_helper.rb", "ApplicationHelper", " def help; 'help'; end\n"
|
|
237
237
|
#
|
|
238
|
-
# inject_into_module "app/helpers/application_helper.rb", ApplicationHelper do
|
|
238
|
+
# inject_into_module "app/helpers/application_helper.rb", "ApplicationHelper" do
|
|
239
239
|
# " def help; 'help'; end\n"
|
|
240
240
|
# end
|
|
241
241
|
#
|
|
@@ -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 regardles 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
|
|
|
@@ -329,7 +331,7 @@ class Bundler::Thor
|
|
|
329
331
|
path = File.expand_path(path, destination_root)
|
|
330
332
|
|
|
331
333
|
say_status :remove, relative_to_original_destination_root(path), config.fetch(:verbose, true)
|
|
332
|
-
if !options[:pretend] && File.exist?(path)
|
|
334
|
+
if !options[:pretend] && (File.exist?(path) || File.symlink?(path))
|
|
333
335
|
require "fileutils"
|
|
334
336
|
::FileUtils.rm_rf(path)
|
|
335
337
|
end
|
|
@@ -106,12 +106,11 @@ class Bundler::Thor
|
|
|
106
106
|
# Adds the content to the file.
|
|
107
107
|
#
|
|
108
108
|
def replace!(regexp, string, force)
|
|
109
|
-
return if pretend?
|
|
110
109
|
content = File.read(destination)
|
|
111
110
|
if force || !content.include?(replacement)
|
|
112
111
|
success = content.gsub!(regexp, string)
|
|
113
112
|
|
|
114
|
-
File.open(destination, "wb") { |file| file.write(content) }
|
|
113
|
+
File.open(destination, "wb") { |file| file.write(content) } unless pretend?
|
|
115
114
|
success
|
|
116
115
|
end
|
|
117
116
|
end
|
|
@@ -161,6 +161,8 @@ class Bundler::Thor
|
|
|
161
161
|
# to the block you provide. The path is set back to the previous path when
|
|
162
162
|
# the method exits.
|
|
163
163
|
#
|
|
164
|
+
# Returns the value yielded by the block.
|
|
165
|
+
#
|
|
164
166
|
# ==== Parameters
|
|
165
167
|
# dir<String>:: the directory to move to.
|
|
166
168
|
# config<Hash>:: give :verbose => true to log and use padding.
|
|
@@ -179,16 +181,18 @@ class Bundler::Thor
|
|
|
179
181
|
FileUtils.mkdir_p(destination_root)
|
|
180
182
|
end
|
|
181
183
|
|
|
184
|
+
result = nil
|
|
182
185
|
if pretend
|
|
183
186
|
# In pretend mode, just yield down to the block
|
|
184
|
-
block.arity == 1 ? yield(destination_root) : yield
|
|
187
|
+
result = block.arity == 1 ? yield(destination_root) : yield
|
|
185
188
|
else
|
|
186
189
|
require "fileutils"
|
|
187
|
-
FileUtils.cd(destination_root) { block.arity == 1 ? yield(destination_root) : yield }
|
|
190
|
+
FileUtils.cd(destination_root) { result = block.arity == 1 ? yield(destination_root) : yield }
|
|
188
191
|
end
|
|
189
192
|
|
|
190
193
|
@destination_stack.pop
|
|
191
194
|
shell.padding -= 1 if verbose
|
|
195
|
+
result
|
|
192
196
|
end
|
|
193
197
|
|
|
194
198
|
# Goes to the root and execute the given block.
|
|
@@ -219,7 +223,7 @@ class Bundler::Thor
|
|
|
219
223
|
|
|
220
224
|
contents = if is_uri
|
|
221
225
|
require "open-uri"
|
|
222
|
-
open(path, "Accept" => "application/x-thor-template", &:read)
|
|
226
|
+
URI.open(path, "Accept" => "application/x-thor-template", &:read)
|
|
223
227
|
else
|
|
224
228
|
open(path, &:read)
|
|
225
229
|
end
|
|
@@ -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
|
|
@@ -102,9 +102,14 @@ class Bundler::Thor
|
|
|
102
102
|
end
|
|
103
103
|
|
|
104
104
|
if Correctable
|
|
105
|
-
DidYouMean
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
105
|
+
if DidYouMean.respond_to?(:correct_error)
|
|
106
|
+
DidYouMean.correct_error(Bundler::Thor::UndefinedCommandError, UndefinedCommandError::SpellChecker)
|
|
107
|
+
DidYouMean.correct_error(Bundler::Thor::UnknownArgumentError, UnknownArgumentError::SpellChecker)
|
|
108
|
+
else
|
|
109
|
+
DidYouMean::SPELL_CHECKERS.merge!(
|
|
110
|
+
'Bundler::Thor::UndefinedCommandError' => UndefinedCommandError::SpellChecker,
|
|
111
|
+
'Bundler::Thor::UnknownArgumentError' => UnknownArgumentError::SpellChecker
|
|
112
|
+
)
|
|
113
|
+
end
|
|
109
114
|
end
|
|
110
115
|
end
|
|
@@ -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
|
|
@@ -45,6 +45,7 @@ class Bundler::Thor
|
|
|
45
45
|
@switches = {}
|
|
46
46
|
@extra = []
|
|
47
47
|
@stopped_parsing_after_extra_index = nil
|
|
48
|
+
@is_treated_as_value = false
|
|
48
49
|
|
|
49
50
|
options.each do |option|
|
|
50
51
|
@switches[option.switch_name] = option
|
|
@@ -74,8 +75,19 @@ class Bundler::Thor
|
|
|
74
75
|
end
|
|
75
76
|
end
|
|
76
77
|
|
|
78
|
+
def shift
|
|
79
|
+
@is_treated_as_value = false
|
|
80
|
+
super
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def unshift(arg, is_value: false)
|
|
84
|
+
@is_treated_as_value = is_value
|
|
85
|
+
super(arg)
|
|
86
|
+
end
|
|
87
|
+
|
|
77
88
|
def parse(args) # rubocop:disable MethodLength
|
|
78
89
|
@pile = args.dup
|
|
90
|
+
@is_treated_as_value = false
|
|
79
91
|
@parsing_options = true
|
|
80
92
|
|
|
81
93
|
while peek
|
|
@@ -88,7 +100,10 @@ class Bundler::Thor
|
|
|
88
100
|
when SHORT_SQ_RE
|
|
89
101
|
unshift($1.split("").map { |f| "-#{f}" })
|
|
90
102
|
next
|
|
91
|
-
when EQ_RE
|
|
103
|
+
when EQ_RE
|
|
104
|
+
unshift($2, is_value: true)
|
|
105
|
+
switch = $1
|
|
106
|
+
when SHORT_NUM
|
|
92
107
|
unshift($2)
|
|
93
108
|
switch = $1
|
|
94
109
|
when LONG_RE, SHORT_RE
|
|
@@ -133,20 +148,22 @@ class Bundler::Thor
|
|
|
133
148
|
|
|
134
149
|
protected
|
|
135
150
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
151
|
+
def assign_result!(option, result)
|
|
152
|
+
if option.repeatable && option.type == :hash
|
|
153
|
+
(@assigns[option.human_name] ||= {}).merge!(result)
|
|
154
|
+
elsif option.repeatable
|
|
155
|
+
(@assigns[option.human_name] ||= []) << result
|
|
156
|
+
else
|
|
157
|
+
@assigns[option.human_name] = result
|
|
158
|
+
end
|
|
143
159
|
end
|
|
144
|
-
|
|
160
|
+
|
|
145
161
|
# Check if the current value in peek is a registered switch.
|
|
146
162
|
#
|
|
147
163
|
# Two booleans are returned. The first is true if the current value
|
|
148
164
|
# starts with a hyphen; the second is true if it is a registered switch.
|
|
149
165
|
def current_is_switch?
|
|
166
|
+
return [false, false] if @is_treated_as_value
|
|
150
167
|
case peek
|
|
151
168
|
when LONG_RE, SHORT_RE, EQ_RE, SHORT_NUM
|
|
152
169
|
[true, switch?($1)]
|
|
@@ -158,6 +175,7 @@ class Bundler::Thor
|
|
|
158
175
|
end
|
|
159
176
|
|
|
160
177
|
def current_is_switch_formatted?
|
|
178
|
+
return false if @is_treated_as_value
|
|
161
179
|
case peek
|
|
162
180
|
when LONG_RE, SHORT_RE, EQ_RE, SHORT_NUM, SHORT_SQ_RE
|
|
163
181
|
true
|
|
@@ -167,6 +185,7 @@ class Bundler::Thor
|
|
|
167
185
|
end
|
|
168
186
|
|
|
169
187
|
def current_is_value?
|
|
188
|
+
return true if @is_treated_as_value
|
|
170
189
|
peek && (!parsing_options? || super)
|
|
171
190
|
end
|
|
172
191
|
|
|
@@ -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
|
|
|
@@ -101,6 +103,23 @@ class Bundler::Thor
|
|
|
101
103
|
stdout.flush
|
|
102
104
|
end
|
|
103
105
|
|
|
106
|
+
# Say (print) an error to the user. If the sentence ends with a whitespace
|
|
107
|
+
# or tab character, a new line is not appended (print + flush). Otherwise
|
|
108
|
+
# are passed straight to puts (behavior got from Highline).
|
|
109
|
+
#
|
|
110
|
+
# ==== Example
|
|
111
|
+
# say_error("error: something went wrong")
|
|
112
|
+
#
|
|
113
|
+
def say_error(message = "", color = nil, force_new_line = (message.to_s !~ /( |\t)\Z/))
|
|
114
|
+
return if quiet?
|
|
115
|
+
|
|
116
|
+
buffer = prepare_message(message, *color)
|
|
117
|
+
buffer << "\n" if force_new_line && !message.to_s.end_with?("\n")
|
|
118
|
+
|
|
119
|
+
stderr.print(buffer)
|
|
120
|
+
stderr.flush
|
|
121
|
+
end
|
|
122
|
+
|
|
104
123
|
# Say a status with the given color and appends the message. Since this
|
|
105
124
|
# method is used frequently by actions, it allows nil or false to be given
|
|
106
125
|
# in log_status, avoiding the message from being shown. If a Symbol is
|
|
@@ -109,13 +128,14 @@ class Bundler::Thor
|
|
|
109
128
|
def say_status(status, message, log_status = true)
|
|
110
129
|
return if quiet? || log_status == false
|
|
111
130
|
spaces = " " * (padding + 1)
|
|
112
|
-
color = log_status.is_a?(Symbol) ? log_status : :green
|
|
113
|
-
|
|
114
131
|
status = status.to_s.rjust(12)
|
|
132
|
+
margin = " " * status.length + spaces
|
|
133
|
+
|
|
134
|
+
color = log_status.is_a?(Symbol) ? log_status : :green
|
|
115
135
|
status = set_color status, color, true if color
|
|
116
136
|
|
|
117
|
-
|
|
118
|
-
buffer = "#{
|
|
137
|
+
message = message.to_s.chomp.gsub(/(?<!\A)^/, margin)
|
|
138
|
+
buffer = "#{status}#{spaces}#{message}\n"
|
|
119
139
|
|
|
120
140
|
stdout.print(buffer)
|
|
121
141
|
stdout.flush
|
|
@@ -230,8 +250,9 @@ class Bundler::Thor
|
|
|
230
250
|
paras = message.split("\n\n")
|
|
231
251
|
|
|
232
252
|
paras.map! do |unwrapped|
|
|
233
|
-
|
|
234
|
-
|
|
253
|
+
words = unwrapped.split(" ")
|
|
254
|
+
counter = words.first.length
|
|
255
|
+
words.inject do |memo, word|
|
|
235
256
|
word = word.gsub(/\n\005/, "\n").gsub(/\005/, "\n")
|
|
236
257
|
counter = 0 if word.include? "\n"
|
|
237
258
|
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?
|
|
@@ -21,7 +21,7 @@ class Bundler::Thor
|
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
module Shell
|
|
24
|
-
SHELL_DELEGATED_METHODS = [:ask, :error, :set_color, :yes?, :no?, :say, :say_status, :print_in_columns, :print_table, :print_wrapped, :file_collision, :terminal_width]
|
|
24
|
+
SHELL_DELEGATED_METHODS = [:ask, :error, :set_color, :yes?, :no?, :say, :say_error, :say_status, :print_in_columns, :print_table, :print_wrapped, :file_collision, :terminal_width]
|
|
25
25
|
attr_writer :shell
|
|
26
26
|
|
|
27
27
|
autoload :Basic, File.expand_path("shell/basic", __dir__)
|
|
@@ -211,7 +211,7 @@ class Bundler::Thor
|
|
|
211
211
|
#
|
|
212
212
|
def globs_for(path)
|
|
213
213
|
path = escape_globs(path)
|
|
214
|
-
["#{path}/Thorfile", "#{path}/*.thor", "#{path}/tasks/*.thor", "#{path}/lib/tasks
|
|
214
|
+
["#{path}/Thorfile", "#{path}/*.thor", "#{path}/tasks/*.thor", "#{path}/lib/tasks/**/*.thor"]
|
|
215
215
|
end
|
|
216
216
|
|
|
217
217
|
# Return the path to the ruby interpreter taking into account multiple
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
require "set"
|
|
2
1
|
require_relative "thor/base"
|
|
3
2
|
|
|
4
3
|
class Bundler::Thor
|
|
4
|
+
$thor_runner ||= false
|
|
5
5
|
class << self
|
|
6
6
|
# Allows for custom "Command" package naming.
|
|
7
7
|
#
|
|
@@ -323,7 +323,7 @@ class Bundler::Thor
|
|
|
323
323
|
# ==== Parameters
|
|
324
324
|
# Symbol ...:: A list of commands that should be affected.
|
|
325
325
|
def stop_on_unknown_option!(*command_names)
|
|
326
|
-
stop_on_unknown_option
|
|
326
|
+
@stop_on_unknown_option = stop_on_unknown_option | command_names
|
|
327
327
|
end
|
|
328
328
|
|
|
329
329
|
def stop_on_unknown_option?(command) #:nodoc:
|
|
@@ -337,7 +337,7 @@ class Bundler::Thor
|
|
|
337
337
|
# ==== Parameters
|
|
338
338
|
# Symbol ...:: A list of commands that should be affected.
|
|
339
339
|
def disable_required_check!(*command_names)
|
|
340
|
-
disable_required_check
|
|
340
|
+
@disable_required_check = disable_required_check | command_names
|
|
341
341
|
end
|
|
342
342
|
|
|
343
343
|
def disable_required_check?(command) #:nodoc:
|
|
@@ -347,12 +347,12 @@ class Bundler::Thor
|
|
|
347
347
|
protected
|
|
348
348
|
|
|
349
349
|
def stop_on_unknown_option #:nodoc:
|
|
350
|
-
@stop_on_unknown_option ||=
|
|
350
|
+
@stop_on_unknown_option ||= []
|
|
351
351
|
end
|
|
352
352
|
|
|
353
353
|
# help command has the required check disabled by default.
|
|
354
354
|
def disable_required_check #:nodoc:
|
|
355
|
-
@disable_required_check ||=
|
|
355
|
+
@disable_required_check ||= [:help]
|
|
356
356
|
end
|
|
357
357
|
|
|
358
358
|
# The method responsible for dispatching given the args.
|
|
@@ -398,7 +398,6 @@ class Bundler::Thor
|
|
|
398
398
|
# the namespace should be displayed as arguments.
|
|
399
399
|
#
|
|
400
400
|
def banner(command, namespace = nil, subcommand = false)
|
|
401
|
-
$thor_runner ||= false
|
|
402
401
|
command.formatted_usage(self, $thor_runner, subcommand).split("\n").map do |formatted_usage|
|
|
403
402
|
"#{basename} #{formatted_usage}"
|
|
404
403
|
end.join("\n")
|
|
@@ -115,7 +115,7 @@ class Bundler::Dir < Dir
|
|
|
115
115
|
Bundler::Dir.tmpdir
|
|
116
116
|
end
|
|
117
117
|
|
|
118
|
-
UNUSABLE_CHARS =
|
|
118
|
+
UNUSABLE_CHARS = "^,-.0-9A-Z_a-z~"
|
|
119
119
|
|
|
120
120
|
class << (RANDOM = Random.new)
|
|
121
121
|
MAX = 36**6 # < 0x100000000
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
Copyright (C) 1993-2013 Yukihiro Matsumoto. All rights reserved.
|
|
2
|
+
|
|
3
|
+
Redistribution and use in source and binary forms, with or without
|
|
4
|
+
modification, are permitted provided that the following conditions
|
|
5
|
+
are met:
|
|
6
|
+
1. Redistributions of source code must retain the above copyright
|
|
7
|
+
notice, this list of conditions and the following disclaimer.
|
|
8
|
+
2. Redistributions in binary form must reproduce the above copyright
|
|
9
|
+
notice, this list of conditions and the following disclaimer in the
|
|
10
|
+
documentation and/or other materials provided with the distribution.
|
|
11
|
+
|
|
12
|
+
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
13
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
14
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
15
|
+
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
16
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
17
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
18
|
+
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
19
|
+
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
20
|
+
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
21
|
+
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
22
|
+
SUCH DAMAGE.
|