bundler 2.2.26 → 2.3.26
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 +501 -1
- data/README.md +1 -1
- data/bundler.gemspec +6 -8
- data/exe/bundle +7 -8
- data/exe/bundler +1 -1
- data/lib/bundler/.document +1 -0
- data/lib/bundler/build_metadata.rb +3 -3
- data/lib/bundler/cli/check.rb +1 -1
- data/lib/bundler/cli/common.rb +3 -2
- data/lib/bundler/cli/config.rb +10 -1
- data/lib/bundler/cli/doctor.rb +12 -3
- data/lib/bundler/cli/gem.rb +98 -9
- data/lib/bundler/cli/info.rb +27 -6
- data/lib/bundler/cli/init.rb +5 -1
- data/lib/bundler/cli/install.rb +13 -30
- data/lib/bundler/cli/issue.rb +4 -3
- data/lib/bundler/cli/outdated.rb +12 -3
- data/lib/bundler/cli/platform.rb +2 -2
- data/lib/bundler/cli/remove.rb +1 -2
- data/lib/bundler/cli/show.rb +1 -1
- data/lib/bundler/cli/update.rb +8 -4
- data/lib/bundler/cli.rb +23 -19
- data/lib/bundler/compact_index_client/cache.rb +0 -9
- data/lib/bundler/compact_index_client/updater.rb +16 -8
- data/lib/bundler/compact_index_client.rb +2 -8
- data/lib/bundler/current_ruby.rb +16 -6
- data/lib/bundler/definition.rb +204 -217
- data/lib/bundler/dependency.rb +23 -71
- data/lib/bundler/digest.rb +71 -0
- data/lib/bundler/dsl.rb +28 -45
- data/lib/bundler/endpoint_specification.rb +19 -13
- data/lib/bundler/env.rb +1 -1
- data/lib/bundler/environment_preserver.rb +4 -1
- data/lib/bundler/errors.rb +28 -2
- data/lib/bundler/feature_flag.rb +0 -1
- data/lib/bundler/fetcher/base.rb +6 -8
- data/lib/bundler/fetcher/compact_index.rb +9 -14
- data/lib/bundler/fetcher/index.rb +0 -26
- data/lib/bundler/fetcher.rb +20 -22
- data/lib/bundler/friendly_errors.rb +26 -34
- data/lib/bundler/gem_helper.rb +7 -18
- data/lib/bundler/gem_helpers.rb +9 -2
- data/lib/bundler/gem_version_promoter.rb +14 -25
- data/lib/bundler/index.rb +10 -40
- data/lib/bundler/injector.rb +16 -2
- data/lib/bundler/inline.rb +2 -12
- data/lib/bundler/installer/gem_installer.rb +13 -5
- data/lib/bundler/installer/standalone.rb +30 -3
- data/lib/bundler/installer.rb +18 -29
- data/lib/bundler/lazy_specification.rb +52 -35
- data/lib/bundler/lockfile_generator.rb +2 -2
- data/lib/bundler/lockfile_parser.rb +12 -10
- data/lib/bundler/man/bundle-add.1 +21 -5
- data/lib/bundler/man/bundle-add.1.ronn +16 -4
- data/lib/bundler/man/bundle-binstubs.1 +1 -1
- data/lib/bundler/man/bundle-cache.1 +7 -1
- data/lib/bundler/man/bundle-cache.1.ronn +7 -0
- data/lib/bundler/man/bundle-check.1 +1 -1
- data/lib/bundler/man/bundle-clean.1 +2 -2
- data/lib/bundler/man/bundle-clean.1.ronn +1 -1
- data/lib/bundler/man/bundle-config.1 +33 -14
- data/lib/bundler/man/bundle-config.1.ronn +30 -18
- data/lib/bundler/man/bundle-console.1 +53 -0
- data/lib/bundler/man/bundle-console.1.ronn +44 -0
- data/lib/bundler/man/bundle-doctor.1 +1 -1
- data/lib/bundler/man/bundle-exec.1 +2 -2
- data/lib/bundler/man/bundle-exec.1.ronn +1 -1
- data/lib/bundler/man/bundle-gem.1 +14 -1
- data/lib/bundler/man/bundle-gem.1.ronn +16 -0
- data/lib/bundler/man/bundle-help.1 +13 -0
- data/lib/bundler/man/bundle-help.1.ronn +12 -0
- data/lib/bundler/man/bundle-info.1 +1 -1
- data/lib/bundler/man/bundle-init.1 +1 -1
- data/lib/bundler/man/bundle-inject.1 +5 -2
- data/lib/bundler/man/bundle-inject.1.ronn +3 -1
- data/lib/bundler/man/bundle-install.1 +6 -2
- data/lib/bundler/man/bundle-install.1.ronn +8 -2
- data/lib/bundler/man/bundle-list.1 +1 -1
- data/lib/bundler/man/bundle-lock.1 +1 -1
- data/lib/bundler/man/bundle-open.1 +1 -1
- data/lib/bundler/man/bundle-outdated.1 +3 -10
- data/lib/bundler/man/bundle-outdated.1.ronn +1 -10
- data/lib/bundler/man/bundle-platform.1 +16 -6
- data/lib/bundler/man/bundle-platform.1.ronn +14 -7
- data/lib/bundler/man/bundle-plugin.1 +81 -0
- data/lib/bundler/man/bundle-plugin.1.ronn +59 -0
- data/lib/bundler/man/bundle-pristine.1 +1 -1
- data/lib/bundler/man/bundle-remove.1 +1 -1
- data/lib/bundler/man/bundle-show.1 +1 -1
- data/lib/bundler/man/bundle-update.1 +2 -2
- data/lib/bundler/man/bundle-update.1.ronn +2 -1
- data/lib/bundler/man/bundle-version.1 +35 -0
- data/lib/bundler/man/bundle-version.1.ronn +24 -0
- data/lib/bundler/man/bundle-viz.1 +4 -1
- data/lib/bundler/man/bundle-viz.1.ronn +2 -0
- data/lib/bundler/man/bundle.1 +15 -10
- data/lib/bundler/man/bundle.1.ronn +12 -7
- data/lib/bundler/man/gemfile.5 +117 -80
- data/lib/bundler/man/gemfile.5.ronn +105 -84
- data/lib/bundler/man/index.txt +4 -0
- data/lib/bundler/match_metadata.rb +13 -0
- data/lib/bundler/match_platform.rb +0 -1
- data/lib/bundler/match_remote_metadata.rb +29 -0
- data/lib/bundler/plugin/api/source.rb +4 -9
- data/lib/bundler/plugin/installer/git.rb +0 -4
- data/lib/bundler/plugin/installer/rubygems.rb +0 -4
- data/lib/bundler/plugin/installer.rb +3 -1
- data/lib/bundler/plugin.rb +25 -6
- data/lib/bundler/process_lock.rb +1 -1
- data/lib/bundler/remote_specification.rb +10 -4
- data/lib/bundler/resolver/base.rb +50 -0
- data/lib/bundler/resolver/spec_group.rb +31 -49
- data/lib/bundler/resolver.rb +183 -192
- data/lib/bundler/ruby_dsl.rb +1 -1
- data/lib/bundler/ruby_version.rb +5 -18
- data/lib/bundler/rubygems_ext.rb +138 -20
- data/lib/bundler/rubygems_gem_installer.rb +42 -16
- data/lib/bundler/rubygems_integration.rb +42 -90
- data/lib/bundler/runtime.rb +2 -3
- data/lib/bundler/self_manager.rb +168 -0
- data/lib/bundler/settings.rb +13 -4
- data/lib/bundler/shared_helpers.rb +15 -24
- data/lib/bundler/source/git/git_proxy.rb +7 -4
- data/lib/bundler/source/git.rb +29 -13
- data/lib/bundler/source/metadata.rb +3 -3
- data/lib/bundler/source/path.rb +1 -1
- data/lib/bundler/source/rubygems.rb +148 -161
- data/lib/bundler/source/rubygems_aggregate.rb +1 -1
- data/lib/bundler/source.rb +6 -5
- data/lib/bundler/source_list.rb +15 -29
- data/lib/bundler/source_map.rb +15 -2
- data/lib/bundler/spec_set.rb +52 -32
- data/lib/bundler/stub_specification.rb +5 -3
- data/lib/bundler/templates/Executable +2 -4
- data/lib/bundler/templates/Executable.bundler +2 -2
- data/lib/bundler/templates/Executable.standalone +2 -4
- data/lib/bundler/templates/Gemfile +0 -2
- data/lib/bundler/templates/gems.rb +0 -3
- data/lib/bundler/templates/newgem/Gemfile.tt +5 -2
- data/lib/bundler/templates/newgem/README.md.tt +3 -9
- data/lib/bundler/templates/newgem/Rakefile.tt +15 -2
- data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +5 -4
- data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +5 -4
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +16 -16
- data/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
- data/lib/bundler/templates/newgem/standard.yml.tt +3 -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/dependency_graph.rb +3 -3
- data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +32 -26
- data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
- 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 +6 -6
- data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +1 -2
- data/lib/bundler/vendor/thor/lib/thor/actions.rb +6 -2
- 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 +9 -4
- data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +19 -1
- data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +22 -4
- 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/tsort/LICENSE.txt +22 -0
- data/lib/bundler/vendor/tsort/lib/tsort.rb +452 -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 +2 -2
- data/lib/bundler.rb +40 -29
- metadata +37 -12
- data/lib/bundler/dep_proxy.rb +0 -55
- data/lib/bundler/gemdeps.rb +0 -29
- data/lib/bundler/psyched_yaml.rb +0 -22
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +0 -66
data/lib/bundler/spec_set.rb
CHANGED
|
@@ -1,46 +1,49 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
require_relative "vendored_tsort"
|
|
4
4
|
|
|
5
5
|
module Bundler
|
|
6
6
|
class SpecSet
|
|
7
7
|
include Enumerable
|
|
8
8
|
include TSort
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
attr_reader :incomplete_specs
|
|
11
|
+
|
|
12
|
+
def initialize(specs, incomplete_specs = [])
|
|
11
13
|
@specs = specs
|
|
14
|
+
@incomplete_specs = incomplete_specs
|
|
12
15
|
end
|
|
13
16
|
|
|
14
|
-
def for(dependencies, check = false,
|
|
15
|
-
handled = []
|
|
16
|
-
deps = dependencies.
|
|
17
|
+
def for(dependencies, check = false, platforms = [nil])
|
|
18
|
+
handled = ["bundler"].product(platforms).map {|k| [k, true] }.to_h
|
|
19
|
+
deps = dependencies.product(platforms)
|
|
17
20
|
specs = []
|
|
18
21
|
|
|
19
22
|
loop do
|
|
20
23
|
break unless dep = deps.shift
|
|
21
|
-
next if handled.any?{|d| d.name == dep.name && (match_current_platform || d.__platform == dep.__platform) } || dep.name == "bundler"
|
|
22
24
|
|
|
23
|
-
|
|
25
|
+
name = dep[0].name
|
|
26
|
+
platform = dep[1]
|
|
27
|
+
|
|
28
|
+
key = [name, platform]
|
|
29
|
+
next if handled.key?(key)
|
|
30
|
+
|
|
31
|
+
handled[key] = true
|
|
24
32
|
|
|
25
|
-
specs_for_dep =
|
|
33
|
+
specs_for_dep = specs_for_dependency(*dep)
|
|
26
34
|
if specs_for_dep.any?
|
|
27
|
-
specs
|
|
35
|
+
specs.concat(specs_for_dep)
|
|
28
36
|
|
|
29
37
|
specs_for_dep.first.dependencies.each do |d|
|
|
30
38
|
next if d.type == :development
|
|
31
|
-
|
|
32
|
-
deps << d
|
|
39
|
+
deps << [d, dep[1]]
|
|
33
40
|
end
|
|
34
41
|
elsif check
|
|
35
|
-
|
|
42
|
+
@incomplete_specs += lookup[name]
|
|
36
43
|
end
|
|
37
44
|
end
|
|
38
45
|
|
|
39
|
-
|
|
40
|
-
specs << spec
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
check ? true : specs
|
|
46
|
+
specs
|
|
44
47
|
end
|
|
45
48
|
|
|
46
49
|
def [](key)
|
|
@@ -54,6 +57,12 @@ module Bundler
|
|
|
54
57
|
@sorted = nil
|
|
55
58
|
end
|
|
56
59
|
|
|
60
|
+
def delete(spec)
|
|
61
|
+
@specs.delete(spec)
|
|
62
|
+
@lookup = nil
|
|
63
|
+
@sorted = nil
|
|
64
|
+
end
|
|
65
|
+
|
|
57
66
|
def sort!
|
|
58
67
|
self
|
|
59
68
|
end
|
|
@@ -67,14 +76,9 @@ module Bundler
|
|
|
67
76
|
end
|
|
68
77
|
|
|
69
78
|
def materialize(deps)
|
|
70
|
-
materialized = self.for(deps,
|
|
79
|
+
materialized = self.for(deps, true)
|
|
71
80
|
|
|
72
|
-
materialized
|
|
73
|
-
next s unless s.is_a?(LazySpecification)
|
|
74
|
-
s.source.local!
|
|
75
|
-
s.__materialize__ || s
|
|
76
|
-
end
|
|
77
|
-
SpecSet.new(materialized)
|
|
81
|
+
SpecSet.new(materialized, incomplete_specs)
|
|
78
82
|
end
|
|
79
83
|
|
|
80
84
|
# Materialize for all the specs in the spec set, regardless of what platform they're for
|
|
@@ -83,14 +87,19 @@ module Bundler
|
|
|
83
87
|
def materialized_for_all_platforms
|
|
84
88
|
@specs.map do |s|
|
|
85
89
|
next s unless s.is_a?(LazySpecification)
|
|
86
|
-
s.source.local!
|
|
87
90
|
s.source.remote!
|
|
88
|
-
spec = s.
|
|
91
|
+
spec = s.materialize_for_installation
|
|
89
92
|
raise GemNotFound, "Could not find #{s.full_name} in any of the sources" unless spec
|
|
90
93
|
spec
|
|
91
94
|
end
|
|
92
95
|
end
|
|
93
96
|
|
|
97
|
+
def incomplete_ruby_specs?(deps)
|
|
98
|
+
self.for(deps, true, [Gem::Platform::RUBY])
|
|
99
|
+
|
|
100
|
+
@incomplete_specs.any?
|
|
101
|
+
end
|
|
102
|
+
|
|
94
103
|
def missing_specs
|
|
95
104
|
@specs.select {|s| s.is_a?(LazySpecification) }
|
|
96
105
|
end
|
|
@@ -105,10 +114,20 @@ module Bundler
|
|
|
105
114
|
SpecSet.new(arr)
|
|
106
115
|
end
|
|
107
116
|
|
|
117
|
+
def -(other)
|
|
118
|
+
SpecSet.new(to_a - other.to_a)
|
|
119
|
+
end
|
|
120
|
+
|
|
108
121
|
def find_by_name_and_platform(name, platform)
|
|
109
122
|
@specs.detect {|spec| spec.name == name && spec.match_platform(platform) }
|
|
110
123
|
end
|
|
111
124
|
|
|
125
|
+
def delete_by_name_and_version(name, version)
|
|
126
|
+
@specs.reject! {|spec| spec.name == name && spec.version == version }
|
|
127
|
+
@lookup = nil
|
|
128
|
+
@sorted = nil
|
|
129
|
+
end
|
|
130
|
+
|
|
112
131
|
def what_required(spec)
|
|
113
132
|
unless req = find {|s| s.dependencies.any? {|d| d.type == :runtime && d.name == spec.name } }
|
|
114
133
|
return [spec]
|
|
@@ -157,7 +176,7 @@ module Bundler
|
|
|
157
176
|
def lookup
|
|
158
177
|
@lookup ||= begin
|
|
159
178
|
lookup = Hash.new {|h, k| h[k] = [] }
|
|
160
|
-
|
|
179
|
+
@specs.each do |s|
|
|
161
180
|
lookup[s.name] << s
|
|
162
181
|
end
|
|
163
182
|
lookup
|
|
@@ -169,12 +188,13 @@ module Bundler
|
|
|
169
188
|
@specs.sort_by(&:name).each {|s| yield s }
|
|
170
189
|
end
|
|
171
190
|
|
|
172
|
-
def
|
|
173
|
-
|
|
174
|
-
if
|
|
175
|
-
|
|
191
|
+
def specs_for_dependency(dep, platform)
|
|
192
|
+
specs_for_name = lookup[dep.name]
|
|
193
|
+
if platform.nil?
|
|
194
|
+
matching_specs = specs_for_name.map {|s| s.materialize_for_installation if Gem::Platform.match_spec?(s) }.compact
|
|
195
|
+
GemHelpers.sort_best_platform_match(matching_specs, Bundler.local_platform)
|
|
176
196
|
else
|
|
177
|
-
GemHelpers.select_best_platform_match(
|
|
197
|
+
GemHelpers.select_best_platform_match(specs_for_name, dep.force_ruby_platform ? Gem::Platform::RUBY : platform)
|
|
178
198
|
end
|
|
179
199
|
end
|
|
180
200
|
|
|
@@ -64,9 +64,11 @@ module Bundler
|
|
|
64
64
|
end
|
|
65
65
|
|
|
66
66
|
def full_gem_path
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
67
|
+
stub.full_gem_path
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def full_gem_path=(path)
|
|
71
|
+
stub.full_gem_path = path
|
|
70
72
|
end
|
|
71
73
|
|
|
72
74
|
def full_require_paths
|
|
@@ -8,11 +8,9 @@
|
|
|
8
8
|
# this file is here to facilitate running it.
|
|
9
9
|
#
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../<%= relative_gemfile_path %>",
|
|
13
|
-
Pathname.new(__FILE__).realpath)
|
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("<%= relative_gemfile_path %>", __dir__)
|
|
14
12
|
|
|
15
|
-
bundle_binstub = File.expand_path("
|
|
13
|
+
bundle_binstub = File.expand_path("bundle", __dir__)
|
|
16
14
|
|
|
17
15
|
if File.file?(bundle_binstub)
|
|
18
16
|
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
|
@@ -41,7 +41,7 @@ m = Module.new do
|
|
|
41
41
|
gemfile = ENV["BUNDLE_GEMFILE"]
|
|
42
42
|
return gemfile if gemfile && !gemfile.empty?
|
|
43
43
|
|
|
44
|
-
File.expand_path("
|
|
44
|
+
File.expand_path("<%= relative_gemfile_path %>", __dir__)
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
def lockfile
|
|
@@ -73,7 +73,7 @@ m = Module.new do
|
|
|
73
73
|
|
|
74
74
|
requirement = bundler_gem_version.approximate_recommendation
|
|
75
75
|
|
|
76
|
-
return requirement unless Gem
|
|
76
|
+
return requirement unless Gem.rubygems_version < Gem::Version.new("2.7.0")
|
|
77
77
|
|
|
78
78
|
requirement += ".a" if bundler_gem_version.prerelease?
|
|
79
79
|
|
|
@@ -6,9 +6,7 @@
|
|
|
6
6
|
# this file is here to facilitate running it.
|
|
7
7
|
#
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
path = Pathname.new(__FILE__)
|
|
11
|
-
$:.unshift File.expand_path "../<%= standalone_path %>", path.realpath
|
|
9
|
+
$:.unshift File.expand_path "<%= standalone_path %>", __dir__
|
|
12
10
|
|
|
13
11
|
require "bundler/setup"
|
|
14
|
-
load File.expand_path "
|
|
12
|
+
load File.expand_path "<%= executable_path %>", __dir__
|
|
@@ -14,7 +14,10 @@ gem "rake-compiler"
|
|
|
14
14
|
|
|
15
15
|
gem "<%= config[:test] %>", "~> <%= config[:test_framework_version] %>"
|
|
16
16
|
<%- end -%>
|
|
17
|
-
<%- if config[:
|
|
17
|
+
<%- if config[:linter] == "rubocop" -%>
|
|
18
18
|
|
|
19
|
-
gem "rubocop", "~> <%= config[:
|
|
19
|
+
gem "rubocop", "~> <%= config[:linter_version] %>"
|
|
20
|
+
<%- elsif config[:linter] == "standard" -%>
|
|
21
|
+
|
|
22
|
+
gem "standard", "~> <%= config[:linter_version] %>"
|
|
20
23
|
<%- end -%>
|
|
@@ -6,17 +6,11 @@ TODO: Delete this and the text above, and describe your gem
|
|
|
6
6
|
|
|
7
7
|
## Installation
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Install the gem and add to the application's Gemfile by executing:
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
gem '<%= config[:name] %>'
|
|
13
|
-
```
|
|
11
|
+
$ bundle add <%= config[:name] %>
|
|
14
12
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
$ bundle install
|
|
18
|
-
|
|
19
|
-
Or install it yourself as:
|
|
13
|
+
If bundler is not being used to manage dependencies, install the gem by executing:
|
|
20
14
|
|
|
21
15
|
$ gem install <%= config[:name] %>
|
|
22
16
|
|
|
@@ -3,7 +3,16 @@
|
|
|
3
3
|
require "bundler/gem_tasks"
|
|
4
4
|
<% default_task_names = [config[:test_task]].compact -%>
|
|
5
5
|
<% case config[:test] -%>
|
|
6
|
-
<% when "minitest"
|
|
6
|
+
<% when "minitest" -%>
|
|
7
|
+
require "rake/testtask"
|
|
8
|
+
|
|
9
|
+
Rake::TestTask.new(:test) do |t|
|
|
10
|
+
t.libs << "test"
|
|
11
|
+
t.libs << "lib"
|
|
12
|
+
t.test_files = FileList["test/**/test_*.rb"]
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
<% when "test-unit" -%>
|
|
7
16
|
require "rake/testtask"
|
|
8
17
|
|
|
9
18
|
Rake::TestTask.new(:test) do |t|
|
|
@@ -18,12 +27,16 @@ require "rspec/core/rake_task"
|
|
|
18
27
|
RSpec::Core::RakeTask.new(:spec)
|
|
19
28
|
|
|
20
29
|
<% end -%>
|
|
21
|
-
<% if config[:
|
|
30
|
+
<% if config[:linter] == "rubocop" -%>
|
|
22
31
|
<% default_task_names << :rubocop -%>
|
|
23
32
|
require "rubocop/rake_task"
|
|
24
33
|
|
|
25
34
|
RuboCop::RakeTask.new
|
|
26
35
|
|
|
36
|
+
<% elsif config[:linter] == "standard" -%>
|
|
37
|
+
<% default_task_names << :standard -%>
|
|
38
|
+
require "standard/rake"
|
|
39
|
+
|
|
27
40
|
<% end -%>
|
|
28
41
|
<% if config[:ext] -%>
|
|
29
42
|
<% default_task_names.unshift(:clobber, :compile) -%>
|
|
@@ -2,21 +2,22 @@ name: Ruby
|
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
push:
|
|
5
|
-
|
|
5
|
+
branches:
|
|
6
|
+
- <%= config[:git_default_branch] %>
|
|
6
7
|
|
|
7
8
|
pull_request:
|
|
8
9
|
|
|
9
10
|
jobs:
|
|
10
11
|
build:
|
|
11
12
|
runs-on: ubuntu-latest
|
|
12
|
-
|
|
13
|
+
name: Ruby ${{ matrix.ruby }}
|
|
13
14
|
strategy:
|
|
14
15
|
matrix:
|
|
15
16
|
ruby:
|
|
16
|
-
- <%= RUBY_VERSION %>
|
|
17
|
+
- '<%= RUBY_VERSION %>'
|
|
17
18
|
|
|
18
19
|
steps:
|
|
19
|
-
- uses: actions/checkout@
|
|
20
|
+
- uses: actions/checkout@v3
|
|
20
21
|
- name: Set up Ruby
|
|
21
22
|
uses: ruby/setup-ruby@v1
|
|
22
23
|
with:
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
default:
|
|
2
|
+
image: ruby:<%= RUBY_VERSION %>
|
|
2
3
|
|
|
3
|
-
before_script:
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
before_script:
|
|
5
|
+
- gem install bundler -v <%= Bundler::VERSION %>
|
|
6
|
+
- bundle install
|
|
6
7
|
|
|
7
8
|
example_job:
|
|
8
9
|
script:
|
|
@@ -3,20 +3,20 @@
|
|
|
3
3
|
require_relative "lib/<%=config[:namespaced_path]%>/version"
|
|
4
4
|
|
|
5
5
|
Gem::Specification.new do |spec|
|
|
6
|
-
spec.name
|
|
7
|
-
spec.version
|
|
8
|
-
spec.authors
|
|
9
|
-
spec.email
|
|
10
|
-
|
|
11
|
-
spec.summary
|
|
12
|
-
spec.description
|
|
13
|
-
spec.homepage
|
|
6
|
+
spec.name = <%= config[:name].inspect %>
|
|
7
|
+
spec.version = <%= config[:constant_name] %>::VERSION
|
|
8
|
+
spec.authors = [<%= config[:author].inspect %>]
|
|
9
|
+
spec.email = [<%= config[:email].inspect %>]
|
|
10
|
+
|
|
11
|
+
spec.summary = "TODO: Write a short summary, because RubyGems requires one."
|
|
12
|
+
spec.description = "TODO: Write a longer description or delete this line."
|
|
13
|
+
spec.homepage = "TODO: Put your gem's website or public repo URL here."
|
|
14
14
|
<%- if config[:mit] -%>
|
|
15
|
-
spec.license
|
|
15
|
+
spec.license = "MIT"
|
|
16
16
|
<%- end -%>
|
|
17
17
|
spec.required_ruby_version = ">= <%= config[:required_ruby_version] %>"
|
|
18
18
|
|
|
19
|
-
spec.metadata["allowed_push_host"] = "TODO: Set to 'https://
|
|
19
|
+
spec.metadata["allowed_push_host"] = "TODO: Set to your gem server 'https://example.com'"
|
|
20
20
|
|
|
21
21
|
spec.metadata["homepage_uri"] = spec.homepage
|
|
22
22
|
spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
|
|
@@ -24,21 +24,21 @@ Gem::Specification.new do |spec|
|
|
|
24
24
|
|
|
25
25
|
# Specify which files should be added to the gem when it is released.
|
|
26
26
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
|
27
|
-
spec.files = Dir.chdir(
|
|
27
|
+
spec.files = Dir.chdir(__dir__) do
|
|
28
28
|
`git ls-files -z`.split("\x0").reject do |f|
|
|
29
|
-
(f == __FILE__) || f.match(%r{\A(?:(?:test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
|
|
29
|
+
(f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
|
|
30
30
|
end
|
|
31
31
|
end
|
|
32
|
-
spec.bindir
|
|
33
|
-
spec.executables
|
|
32
|
+
spec.bindir = "exe"
|
|
33
|
+
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
|
34
34
|
spec.require_paths = ["lib"]
|
|
35
35
|
<%- if config[:ext] -%>
|
|
36
|
-
spec.extensions
|
|
36
|
+
spec.extensions = ["ext/<%= config[:underscored_name] %>/extconf.rb"]
|
|
37
37
|
<%- end -%>
|
|
38
38
|
|
|
39
39
|
# Uncomment to register a new dependency of your gem
|
|
40
40
|
# spec.add_dependency "example-gem", "~> 1.0"
|
|
41
41
|
|
|
42
|
-
# For more information and examples about making a new gem,
|
|
42
|
+
# For more information and examples about making a new gem, check out our
|
|
43
43
|
# guide at: https://bundler.io/guides/creating_gem.html
|
|
44
44
|
end
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<%- config[:constant_array].each_with_index do |c, i| -%>
|
|
2
|
+
<%= " " * i %>module <%= c %>
|
|
3
|
+
<%- end -%>
|
|
4
|
+
<%= " " * config[:constant_array].size %>VERSION: String
|
|
5
|
+
<%= " " * config[:constant_array].size %># See the writing guide of rbs: https://github.com/ruby/rbs#guides
|
|
6
|
+
<%- (config[:constant_array].size-1).downto(0) do |i| -%>
|
|
7
|
+
<%= " " * i %>end
|
|
8
|
+
<%- end -%>
|
data/lib/bundler/ui/shell.rb
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Vendored files do not need to be documented
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Copyright (c) 2011 Mike Perham
|
|
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.
|
|
@@ -1,13 +1,3 @@
|
|
|
1
|
-
require 'thread'
|
|
2
|
-
require 'timeout'
|
|
3
|
-
require_relative 'monotonic_time'
|
|
4
|
-
|
|
5
|
-
##
|
|
6
|
-
# Raised when you attempt to retrieve a connection from a pool that has been
|
|
7
|
-
# shut down.
|
|
8
|
-
|
|
9
|
-
class Bundler::ConnectionPool::PoolShuttingDownError < RuntimeError; end
|
|
10
|
-
|
|
11
1
|
##
|
|
12
2
|
# The TimedStack manages a pool of homogeneous connections (or any resource
|
|
13
3
|
# you wish to manage). Connections are created lazily up to a given maximum
|
|
@@ -25,7 +15,7 @@ class Bundler::ConnectionPool::PoolShuttingDownError < RuntimeError; end
|
|
|
25
15
|
#
|
|
26
16
|
# conn = ts.pop
|
|
27
17
|
# ts.pop timeout: 5
|
|
28
|
-
# #=> raises
|
|
18
|
+
# #=> raises Bundler::ConnectionPool::TimeoutError after 5 seconds
|
|
29
19
|
|
|
30
20
|
class Bundler::ConnectionPool::TimedStack
|
|
31
21
|
attr_reader :max
|
|
@@ -39,8 +29,8 @@ class Bundler::ConnectionPool::TimedStack
|
|
|
39
29
|
@created = 0
|
|
40
30
|
@que = []
|
|
41
31
|
@max = size
|
|
42
|
-
@mutex = Mutex.new
|
|
43
|
-
@resource = ConditionVariable.new
|
|
32
|
+
@mutex = Thread::Mutex.new
|
|
33
|
+
@resource = Thread::ConditionVariable.new
|
|
44
34
|
@shutdown_block = nil
|
|
45
35
|
end
|
|
46
36
|
|
|
@@ -59,12 +49,12 @@ class Bundler::ConnectionPool::TimedStack
|
|
|
59
49
|
@resource.broadcast
|
|
60
50
|
end
|
|
61
51
|
end
|
|
62
|
-
|
|
52
|
+
alias << push
|
|
63
53
|
|
|
64
54
|
##
|
|
65
55
|
# Retrieves a connection from the stack. If a connection is available it is
|
|
66
56
|
# immediately returned. If no connection is available within the given
|
|
67
|
-
# timeout a
|
|
57
|
+
# timeout a Bundler::ConnectionPool::TimeoutError is raised.
|
|
68
58
|
#
|
|
69
59
|
# +:timeout+ is the only checked entry in +options+ and is preferred over
|
|
70
60
|
# the +timeout+ argument (which will be removed in a future release). Other
|
|
@@ -74,7 +64,7 @@ class Bundler::ConnectionPool::TimedStack
|
|
|
74
64
|
options, timeout = timeout, 0.5 if Hash === timeout
|
|
75
65
|
timeout = options.fetch :timeout, timeout
|
|
76
66
|
|
|
77
|
-
deadline =
|
|
67
|
+
deadline = current_time + timeout
|
|
78
68
|
@mutex.synchronize do
|
|
79
69
|
loop do
|
|
80
70
|
raise Bundler::ConnectionPool::PoolShuttingDownError if @shutdown_block
|
|
@@ -83,18 +73,20 @@ class Bundler::ConnectionPool::TimedStack
|
|
|
83
73
|
connection = try_create(options)
|
|
84
74
|
return connection if connection
|
|
85
75
|
|
|
86
|
-
to_wait = deadline -
|
|
87
|
-
raise
|
|
76
|
+
to_wait = deadline - current_time
|
|
77
|
+
raise Bundler::ConnectionPool::TimeoutError, "Waited #{timeout} sec" if to_wait <= 0
|
|
88
78
|
@resource.wait(@mutex, to_wait)
|
|
89
79
|
end
|
|
90
80
|
end
|
|
91
81
|
end
|
|
92
82
|
|
|
93
83
|
##
|
|
94
|
-
# Shuts down the TimedStack
|
|
95
|
-
#
|
|
84
|
+
# Shuts down the TimedStack by passing each connection to +block+ and then
|
|
85
|
+
# removing it from the pool. Attempting to checkout a connection after
|
|
86
|
+
# shutdown will raise +Bundler::ConnectionPool::PoolShuttingDownError+ unless
|
|
87
|
+
# +:reload+ is +true+.
|
|
96
88
|
|
|
97
|
-
def shutdown(&block)
|
|
89
|
+
def shutdown(reload: false, &block)
|
|
98
90
|
raise ArgumentError, "shutdown must receive a block" unless block_given?
|
|
99
91
|
|
|
100
92
|
@mutex.synchronize do
|
|
@@ -102,6 +94,7 @@ class Bundler::ConnectionPool::TimedStack
|
|
|
102
94
|
@resource.broadcast
|
|
103
95
|
|
|
104
96
|
shutdown_connections
|
|
97
|
+
@shutdown_block = nil if reload
|
|
105
98
|
end
|
|
106
99
|
end
|
|
107
100
|
|
|
@@ -121,6 +114,10 @@ class Bundler::ConnectionPool::TimedStack
|
|
|
121
114
|
|
|
122
115
|
private
|
|
123
116
|
|
|
117
|
+
def current_time
|
|
118
|
+
Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
|
119
|
+
end
|
|
120
|
+
|
|
124
121
|
##
|
|
125
122
|
# This is an extension point for TimedStack and is called with a mutex.
|
|
126
123
|
#
|
|
@@ -149,6 +146,7 @@ class Bundler::ConnectionPool::TimedStack
|
|
|
149
146
|
conn = fetch_connection(options)
|
|
150
147
|
@shutdown_block.call(conn)
|
|
151
148
|
end
|
|
149
|
+
@created = 0
|
|
152
150
|
end
|
|
153
151
|
|
|
154
152
|
##
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
class Bundler::ConnectionPool
|
|
2
|
+
class Wrapper < ::BasicObject
|
|
3
|
+
METHODS = [:with, :pool_shutdown, :wrapped_pool]
|
|
4
|
+
|
|
5
|
+
def initialize(options = {}, &block)
|
|
6
|
+
@pool = options.fetch(:pool) { ::Bundler::ConnectionPool.new(options, &block) }
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def wrapped_pool
|
|
10
|
+
@pool
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def with(&block)
|
|
14
|
+
@pool.with(&block)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def pool_shutdown(&block)
|
|
18
|
+
@pool.shutdown(&block)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def pool_size
|
|
22
|
+
@pool.size
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def pool_available
|
|
26
|
+
@pool.available
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def respond_to?(id, *args)
|
|
30
|
+
METHODS.include?(id) || with { |c| c.respond_to?(id, *args) }
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# rubocop:disable Style/MethodMissingSuper
|
|
34
|
+
# rubocop:disable Style/MissingRespondToMissing
|
|
35
|
+
if ::RUBY_VERSION >= "3.0.0"
|
|
36
|
+
def method_missing(name, *args, **kwargs, &block)
|
|
37
|
+
with do |connection|
|
|
38
|
+
connection.send(name, *args, **kwargs, &block)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
elsif ::RUBY_VERSION >= "2.7.0"
|
|
42
|
+
ruby2_keywords def method_missing(name, *args, &block)
|
|
43
|
+
with do |connection|
|
|
44
|
+
connection.send(name, *args, &block)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
else
|
|
48
|
+
def method_missing(name, *args, &block)
|
|
49
|
+
with do |connection|
|
|
50
|
+
connection.send(name, *args, &block)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
# rubocop:enable Style/MethodMissingSuper
|
|
55
|
+
# rubocop:enable Style/MissingRespondToMissing
|
|
56
|
+
end
|
|
57
|
+
end
|