bundler 2.2.8 → 2.2.13
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 +48 -0
- data/lib/bundler.rb +1 -1
- data/lib/bundler/build_metadata.rb +2 -2
- data/lib/bundler/cli/gem.rb +23 -17
- data/lib/bundler/definition.rb +26 -29
- data/lib/bundler/dsl.rb +36 -22
- data/lib/bundler/inline.rb +1 -0
- data/lib/bundler/installer.rb +2 -0
- data/lib/bundler/lockfile_parser.rb +12 -8
- data/lib/bundler/man/bundle-config.1 +4 -4
- data/lib/bundler/man/bundle-config.1.ronn +8 -7
- data/lib/bundler/plugin.rb +1 -0
- data/lib/bundler/plugin/installer.rb +8 -10
- data/lib/bundler/plugin/source_list.rb +4 -0
- data/lib/bundler/resolver.rb +36 -38
- data/lib/bundler/rubygems_gem_installer.rb +47 -0
- data/lib/bundler/source_list.rb +15 -18
- data/lib/bundler/stub_specification.rb +8 -0
- data/lib/bundler/templates/newgem/README.md.tt +5 -3
- data/lib/bundler/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e4227db15ba56c781814845c3e7c2811def8bba66c074098d04496cf3f7ce3ed
|
4
|
+
data.tar.gz: '0295d490ed0dcf0989468a1a25b3b233c618006882757cbbf5a99e179b009568'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fa78e4e46d7b7fe666950c26fd47df524d7af57612c4e584e088a7a10aa140db5eb243b0688f993dc3586a7b5c4cb2357488a237715b618891747b328d94d01a
|
7
|
+
data.tar.gz: f1baab0b6a8b0c9ccf1c9bdafb7e6068252ba8fac05f96f50540320f47d4da8fa42ecae264e7b082fc1c50d4c0ff7cb456a928b2ffb07d0ca79e84d6272d1b54
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,51 @@
|
|
1
|
+
# 2.2.13 (March 3, 2021)
|
2
|
+
|
3
|
+
## Enhancements:
|
4
|
+
|
5
|
+
- Respect user configured default branch in README links in new generated gems [#4303](https://github.com/rubygems/rubygems/pull/4303)
|
6
|
+
|
7
|
+
## Bug fixes:
|
8
|
+
|
9
|
+
- Fix gems sometimes being pulled from irrelevant sources [#4418](https://github.com/rubygems/rubygems/pull/4418)
|
10
|
+
|
11
|
+
# 2.2.12 (March 1, 2021)
|
12
|
+
|
13
|
+
## Bug fixes:
|
14
|
+
|
15
|
+
- Fix sporadic warnings about `nil` gemspec on install/update and make those faster [#4409](https://github.com/rubygems/rubygems/pull/4409)
|
16
|
+
- Fix deployment install with duplicate path gems added to Gemfile [#4410](https://github.com/rubygems/rubygems/pull/4410)
|
17
|
+
|
18
|
+
# 2.2.11 (February 17, 2021)
|
19
|
+
|
20
|
+
## Bug fixes:
|
21
|
+
|
22
|
+
- Revert disable_multisource changes [#4385](https://github.com/rubygems/rubygems/pull/4385)
|
23
|
+
|
24
|
+
# 2.2.10 (February 15, 2021)
|
25
|
+
|
26
|
+
## Security fixes:
|
27
|
+
|
28
|
+
- Fix source priority for transitive dependencies and split lockfile rubygems source sections [#3655](https://github.com/rubygems/rubygems/pull/3655)
|
29
|
+
|
30
|
+
## Bug fixes:
|
31
|
+
|
32
|
+
- Fix adding platforms to lockfile sometimes conflicting on ruby requirements [#4371](https://github.com/rubygems/rubygems/pull/4371)
|
33
|
+
- Fix bundler sometimes choosing ruby variants over java ones [#4367](https://github.com/rubygems/rubygems/pull/4367)
|
34
|
+
|
35
|
+
## Documentation:
|
36
|
+
|
37
|
+
- Update man pages to reflect to new default for bundle install jobs [#4188](https://github.com/rubygems/rubygems/pull/4188)
|
38
|
+
|
39
|
+
# 2.2.9 (February 8, 2021)
|
40
|
+
|
41
|
+
## Enhancements:
|
42
|
+
|
43
|
+
- Stop removing existing platforms when force_ruby_platform is true [#4336](https://github.com/rubygems/rubygems/pull/4336)
|
44
|
+
|
45
|
+
## Bug fixes:
|
46
|
+
|
47
|
+
- Don't install platform specific gems on truffleruby [#4333](https://github.com/rubygems/rubygems/pull/4333)
|
48
|
+
|
1
49
|
# 2.2.8 (February 2, 2021)
|
2
50
|
|
3
51
|
## Enhancements:
|
data/lib/bundler.rb
CHANGED
@@ -4,8 +4,8 @@ module Bundler
|
|
4
4
|
# Represents metadata from when the Bundler gem was built.
|
5
5
|
module BuildMetadata
|
6
6
|
# begin ivars
|
7
|
-
@built_at = "2021-
|
8
|
-
@git_commit_sha = "
|
7
|
+
@built_at = "2021-03-03".freeze
|
8
|
+
@git_commit_sha = "9b15ab18c4".freeze
|
9
9
|
@release = true
|
10
10
|
# end ivars
|
11
11
|
|
data/lib/bundler/cli/gem.rb
CHANGED
@@ -39,11 +39,11 @@ module Bundler
|
|
39
39
|
constant_name = name.gsub(/-[_-]*(?![_-]|$)/) { "::" }.gsub(/([_-]+|(::)|^)(.|$)/) { $2.to_s + $3.upcase }
|
40
40
|
constant_array = constant_name.split("::")
|
41
41
|
|
42
|
-
|
42
|
+
use_git = Bundler.git_present? && options[:git]
|
43
43
|
|
44
|
-
git_author_name =
|
45
|
-
github_username =
|
46
|
-
git_user_email =
|
44
|
+
git_author_name = use_git ? `git config user.name`.chomp : ""
|
45
|
+
github_username = use_git ? `git config github.user`.chomp : ""
|
46
|
+
git_user_email = use_git ? `git config user.email`.chomp : ""
|
47
47
|
|
48
48
|
config = {
|
49
49
|
:name => name,
|
@@ -58,6 +58,7 @@ module Bundler
|
|
58
58
|
:ext => options[:ext],
|
59
59
|
:exe => options[:exe],
|
60
60
|
:bundler_version => bundler_dependency_version,
|
61
|
+
:git => use_git,
|
61
62
|
:github_username => github_username.empty? ? "[USERNAME]" : github_username,
|
62
63
|
:required_ruby_version => Gem.ruby_version < Gem::Version.new("2.4.a") ? "2.3.0" : "2.4.0",
|
63
64
|
}
|
@@ -79,7 +80,7 @@ module Bundler
|
|
79
80
|
bin/setup
|
80
81
|
]
|
81
82
|
|
82
|
-
templates.merge!("gitignore.tt" => ".gitignore") if
|
83
|
+
templates.merge!("gitignore.tt" => ".gitignore") if use_git
|
83
84
|
|
84
85
|
if test_framework = ask_and_set_test_framework
|
85
86
|
config[:test] = test_framework
|
@@ -175,24 +176,31 @@ module Bundler
|
|
175
176
|
)
|
176
177
|
end
|
177
178
|
|
179
|
+
if File.exist?(target) && !File.directory?(target)
|
180
|
+
Bundler.ui.error "Couldn't create a new gem named `#{gem_name}` because there's an existing file named `#{gem_name}`."
|
181
|
+
exit Bundler::BundlerError.all_errors[Bundler::GenericSystemCallError]
|
182
|
+
end
|
183
|
+
|
184
|
+
if use_git
|
185
|
+
Bundler.ui.info "Initializing git repo in #{target}"
|
186
|
+
`git init #{target}`
|
187
|
+
|
188
|
+
config[:git_default_branch] = File.read("#{target}/.git/HEAD").split("/").last.chomp
|
189
|
+
end
|
190
|
+
|
178
191
|
templates.each do |src, dst|
|
179
192
|
destination = target.join(dst)
|
180
|
-
|
181
|
-
thor.template("newgem/#{src}", destination, config)
|
182
|
-
end
|
193
|
+
thor.template("newgem/#{src}", destination, config)
|
183
194
|
end
|
184
195
|
|
185
196
|
executables.each do |file|
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
end
|
197
|
+
path = target.join(file)
|
198
|
+
executable = (path.stat.mode | 0o111)
|
199
|
+
path.chmod(executable)
|
190
200
|
end
|
191
201
|
|
192
|
-
if
|
193
|
-
Bundler.ui.info "Initializing git repo in #{target}"
|
202
|
+
if use_git
|
194
203
|
Dir.chdir(target) do
|
195
|
-
`git init`
|
196
204
|
`git add .`
|
197
205
|
end
|
198
206
|
end
|
@@ -202,8 +210,6 @@ module Bundler
|
|
202
210
|
|
203
211
|
Bundler.ui.info "Gem '#{name}' was successfully created. " \
|
204
212
|
"For more information on making a RubyGem visit https://bundler.io/guides/creating_gem.html"
|
205
|
-
rescue Errno::EEXIST => e
|
206
|
-
raise GenericSystemCallError.new(e, "There was a conflict while creating the new gem.")
|
207
213
|
end
|
208
214
|
|
209
215
|
private
|
data/lib/bundler/definition.rb
CHANGED
@@ -82,11 +82,7 @@ module Bundler
|
|
82
82
|
@lockfile_contents = Bundler.read_file(lockfile)
|
83
83
|
@locked_gems = LockfileParser.new(@lockfile_contents)
|
84
84
|
@locked_platforms = @locked_gems.platforms
|
85
|
-
|
86
|
-
@platforms = [Gem::Platform::RUBY]
|
87
|
-
else
|
88
|
-
@platforms = @locked_platforms.dup
|
89
|
-
end
|
85
|
+
@platforms = @locked_platforms.dup
|
90
86
|
@locked_bundler_version = @locked_gems.bundler_version
|
91
87
|
@locked_ruby_version = @locked_gems.ruby_version
|
92
88
|
|
@@ -268,7 +264,7 @@ module Bundler
|
|
268
264
|
# Run a resolve against the locally available gems
|
269
265
|
Bundler.ui.debug("Found changes from the lockfile, re-resolving dependencies because #{change_reason}")
|
270
266
|
expanded_dependencies = expand_dependencies(dependencies + metadata_dependencies, @remote)
|
271
|
-
Resolver.resolve(expanded_dependencies,
|
267
|
+
Resolver.resolve(expanded_dependencies, source_requirements, last_resolve, gem_version_promoter, additional_base_requirements_for_resolve, platforms)
|
272
268
|
end
|
273
269
|
end
|
274
270
|
end
|
@@ -598,7 +594,7 @@ module Bundler
|
|
598
594
|
deps_for_source = @dependencies.select {|s| s.source == source }
|
599
595
|
locked_deps_for_source = @locked_deps.values.select {|dep| dep.source == locked_source }
|
600
596
|
|
601
|
-
deps_for_source.sort != locked_deps_for_source.sort
|
597
|
+
deps_for_source.uniq.sort != locked_deps_for_source.sort
|
602
598
|
end
|
603
599
|
|
604
600
|
def specs_for_source_changed?(source)
|
@@ -660,19 +656,20 @@ module Bundler
|
|
660
656
|
def converge_rubygems_sources
|
661
657
|
return false if Bundler.feature_flag.disable_multisource?
|
662
658
|
|
663
|
-
changes = false
|
664
|
-
|
665
659
|
# Get the RubyGems sources from the Gemfile.lock
|
666
660
|
locked_gem_sources = @locked_sources.select {|s| s.is_a?(Source::Rubygems) }
|
661
|
+
return false if locked_gem_sources.empty?
|
662
|
+
|
667
663
|
# Get the RubyGems remotes from the Gemfile
|
668
664
|
actual_remotes = sources.rubygems_remotes
|
665
|
+
return false if actual_remotes.empty?
|
666
|
+
|
667
|
+
changes = false
|
669
668
|
|
670
669
|
# If there is a RubyGems source in both
|
671
|
-
|
672
|
-
|
673
|
-
|
674
|
-
changes |= locked_gem.replace_remotes(actual_remotes, Bundler.settings[:allow_deployment_source_credential_changes])
|
675
|
-
end
|
670
|
+
locked_gem_sources.each do |locked_gem|
|
671
|
+
# Merge the remotes from the Gemfile into the Gemfile.lock
|
672
|
+
changes |= locked_gem.replace_remotes(actual_remotes, Bundler.settings[:allow_deployment_source_credential_changes])
|
676
673
|
end
|
677
674
|
|
678
675
|
changes
|
@@ -897,30 +894,18 @@ module Bundler
|
|
897
894
|
# Record the specs available in each gem's source, so that those
|
898
895
|
# specs will be available later when the resolver knows where to
|
899
896
|
# look for that gemspec (or its dependencies)
|
900
|
-
|
901
|
-
source_requirements = { :default => default }
|
902
|
-
default = nil unless Bundler.feature_flag.disable_multisource?
|
903
|
-
dependencies.each do |dep|
|
904
|
-
next unless source = dep.source || default
|
905
|
-
source_requirements[dep.name] = source
|
906
|
-
end
|
897
|
+
source_requirements = { :default => sources.default_source }.merge(dependency_source_requirements)
|
907
898
|
metadata_dependencies.each do |dep|
|
908
899
|
source_requirements[dep.name] = sources.metadata_source
|
909
900
|
end
|
901
|
+
source_requirements[:global] = index unless Bundler.feature_flag.disable_multisource?
|
910
902
|
source_requirements[:default_bundler] = source_requirements["bundler"] || source_requirements[:default]
|
911
903
|
source_requirements["bundler"] = sources.metadata_source # needs to come last to override
|
912
904
|
source_requirements
|
913
905
|
end
|
914
906
|
|
915
907
|
def pinned_spec_names(skip = nil)
|
916
|
-
|
917
|
-
default = Bundler.feature_flag.disable_multisource? && sources.default_source
|
918
|
-
@dependencies.each do |dep|
|
919
|
-
next unless dep_source = dep.source || default
|
920
|
-
next if dep_source == skip
|
921
|
-
pinned_names << dep.name
|
922
|
-
end
|
923
|
-
pinned_names
|
908
|
+
dependency_source_requirements.reject {|_, source| source == skip }.keys
|
924
909
|
end
|
925
910
|
|
926
911
|
def requested_groups
|
@@ -977,5 +962,17 @@ module Bundler
|
|
977
962
|
|
978
963
|
Bundler.settings[:allow_deployment_source_credential_changes] && source.equivalent_remotes?(sources.rubygems_remotes)
|
979
964
|
end
|
965
|
+
|
966
|
+
def dependency_source_requirements
|
967
|
+
@dependency_source_requirements ||= begin
|
968
|
+
source_requirements = {}
|
969
|
+
default = sources.default_source
|
970
|
+
dependencies.each do |dep|
|
971
|
+
dep_source = dep.source || default
|
972
|
+
source_requirements[dep.name] = dep_source
|
973
|
+
end
|
974
|
+
source_requirements
|
975
|
+
end
|
976
|
+
end
|
980
977
|
end
|
981
978
|
end
|
data/lib/bundler/dsl.rb
CHANGED
@@ -24,6 +24,9 @@ module Bundler
|
|
24
24
|
def initialize
|
25
25
|
@source = nil
|
26
26
|
@sources = SourceList.new
|
27
|
+
|
28
|
+
@global_rubygems_sources = []
|
29
|
+
|
27
30
|
@git_sources = {}
|
28
31
|
@dependencies = []
|
29
32
|
@groups = []
|
@@ -45,6 +48,7 @@ module Bundler
|
|
45
48
|
@gemfiles << expanded_gemfile_path
|
46
49
|
contents ||= Bundler.read_file(@gemfile.to_s)
|
47
50
|
instance_eval(contents.dup.tap{|x| x.untaint if RUBY_VERSION < "2.7" }, gemfile.to_s, 1)
|
51
|
+
check_primary_source_safety
|
48
52
|
rescue Exception => e # rubocop:disable Lint/RescueException
|
49
53
|
message = "There was an error " \
|
50
54
|
"#{e.is_a?(GemfileEvalError) ? "evaluating" : "parsing"} " \
|
@@ -164,8 +168,7 @@ module Bundler
|
|
164
168
|
elsif block_given?
|
165
169
|
with_source(@sources.add_rubygems_source("remotes" => source), &blk)
|
166
170
|
else
|
167
|
-
|
168
|
-
@sources.global_rubygems_source = source
|
171
|
+
@global_rubygems_sources << source
|
169
172
|
end
|
170
173
|
end
|
171
174
|
|
@@ -183,24 +186,14 @@ module Bundler
|
|
183
186
|
end
|
184
187
|
|
185
188
|
def path(path, options = {}, &blk)
|
186
|
-
unless block_given?
|
187
|
-
msg = "You can no longer specify a path source by itself. Instead, \n" \
|
188
|
-
"either use the :path option on a gem, or specify the gems that \n" \
|
189
|
-
"bundler should find in the path source by passing a block to \n" \
|
190
|
-
"the path method, like: \n\n" \
|
191
|
-
" path 'dir/containing/rails' do\n" \
|
192
|
-
" gem 'rails'\n" \
|
193
|
-
" end\n\n"
|
194
|
-
|
195
|
-
raise DeprecatedError, msg if Bundler.feature_flag.disable_multisource?
|
196
|
-
SharedHelpers.major_deprecation(2, msg.strip)
|
197
|
-
end
|
198
|
-
|
199
189
|
source_options = normalize_hash(options).merge(
|
200
190
|
"path" => Pathname.new(path),
|
201
191
|
"root_path" => gemfile_root,
|
202
192
|
"gemspec" => gemspecs.find {|g| g.name == options["name"] }
|
203
193
|
)
|
194
|
+
|
195
|
+
source_options["global"] = true unless block_given?
|
196
|
+
|
204
197
|
source = @sources.add_path_source(source_options)
|
205
198
|
with_source(source, &blk)
|
206
199
|
end
|
@@ -279,6 +272,11 @@ module Bundler
|
|
279
272
|
raise GemfileError, "Undefined local variable or method `#{name}' for Gemfile"
|
280
273
|
end
|
281
274
|
|
275
|
+
def check_primary_source_safety
|
276
|
+
check_path_source_safety
|
277
|
+
check_rubygems_source_safety
|
278
|
+
end
|
279
|
+
|
282
280
|
private
|
283
281
|
|
284
282
|
def add_git_sources
|
@@ -440,17 +438,33 @@ repo_name ||= user_name
|
|
440
438
|
end
|
441
439
|
end
|
442
440
|
|
443
|
-
def
|
444
|
-
return if
|
441
|
+
def check_path_source_safety
|
442
|
+
return if @sources.global_path_source.nil?
|
443
|
+
|
444
|
+
msg = "You can no longer specify a path source by itself. Instead, \n" \
|
445
|
+
"either use the :path option on a gem, or specify the gems that \n" \
|
446
|
+
"bundler should find in the path source by passing a block to \n" \
|
447
|
+
"the path method, like: \n\n" \
|
448
|
+
" path 'dir/containing/rails' do\n" \
|
449
|
+
" gem 'rails'\n" \
|
450
|
+
" end\n\n"
|
451
|
+
|
452
|
+
SharedHelpers.major_deprecation(2, msg.strip)
|
453
|
+
end
|
454
|
+
|
455
|
+
def check_rubygems_source_safety
|
456
|
+
@sources.global_rubygems_source = @global_rubygems_sources.shift
|
457
|
+
return if @global_rubygems_sources.empty?
|
458
|
+
|
459
|
+
@global_rubygems_sources.each do |source|
|
460
|
+
@sources.add_rubygems_remote(source)
|
461
|
+
end
|
445
462
|
|
446
463
|
if Bundler.feature_flag.disable_multisource?
|
447
464
|
msg = "This Gemfile contains multiple primary sources. " \
|
448
465
|
"Each source after the first must include a block to indicate which gems " \
|
449
|
-
"should come from that source"
|
450
|
-
|
451
|
-
msg += ". To downgrade this error to a warning, run " \
|
452
|
-
"`bundle config unset disable_multisource`"
|
453
|
-
end
|
466
|
+
"should come from that source. To downgrade this error to a warning, run " \
|
467
|
+
"`bundle config unset disable_multisource`"
|
454
468
|
raise GemfileEvalError, msg
|
455
469
|
else
|
456
470
|
Bundler::SharedHelpers.major_deprecation 2, "Your Gemfile contains multiple primary sources. " \
|
data/lib/bundler/inline.rb
CHANGED
@@ -50,6 +50,7 @@ def gemfile(install = false, options = {}, &gemfile)
|
|
50
50
|
Bundler::Plugin.gemfile_install(&gemfile) if Bundler.feature_flag.plugins?
|
51
51
|
builder = Bundler::Dsl.new
|
52
52
|
builder.instance_eval(&gemfile)
|
53
|
+
builder.check_primary_source_safety
|
53
54
|
|
54
55
|
Bundler.settings.temporary(:frozen => false) do
|
55
56
|
definition = builder.to_definition(nil, true)
|
data/lib/bundler/installer.rb
CHANGED
@@ -89,6 +89,8 @@ module Bundler
|
|
89
89
|
end
|
90
90
|
install(options)
|
91
91
|
|
92
|
+
Gem::Specification.reset # invalidate gem specification cache so that installed gems are immediately available
|
93
|
+
|
92
94
|
lock unless Bundler.frozen_bundle?
|
93
95
|
Standalone.new(options[:standalone], @definition).generate if options[:standalone]
|
94
96
|
end
|
@@ -64,8 +64,6 @@ module Bundler
|
|
64
64
|
@state = nil
|
65
65
|
@specs = {}
|
66
66
|
|
67
|
-
@rubygems_aggregate = Source::Rubygems.new
|
68
|
-
|
69
67
|
if lockfile.match(/<<<<<<<|=======|>>>>>>>|\|\|\|\|\|\|\|/)
|
70
68
|
raise LockfileError, "Your #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} contains merge conflicts.\n" \
|
71
69
|
"Run `git checkout HEAD -- #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)}` first to get a clean lock."
|
@@ -89,7 +87,6 @@ module Bundler
|
|
89
87
|
send("parse_#{@state}", line)
|
90
88
|
end
|
91
89
|
end
|
92
|
-
@sources << @rubygems_aggregate unless Bundler.feature_flag.disable_multisource?
|
93
90
|
@specs = @specs.values.sort_by(&:identifier)
|
94
91
|
warn_for_outdated_bundler_version
|
95
92
|
rescue ArgumentError => e
|
@@ -134,16 +131,19 @@ module Bundler
|
|
134
131
|
@sources << @current_source
|
135
132
|
end
|
136
133
|
when GEM
|
137
|
-
|
134
|
+
source_remotes = Array(@opts["remote"])
|
135
|
+
|
136
|
+
if source_remotes.size == 1
|
138
137
|
@opts["remotes"] = @opts.delete("remote")
|
139
138
|
@current_source = TYPES[@type].from_lock(@opts)
|
140
|
-
@sources << @current_source
|
141
139
|
else
|
142
|
-
|
143
|
-
|
140
|
+
source_remotes.each do |url|
|
141
|
+
rubygems_aggregate.add_remote(url)
|
144
142
|
end
|
145
|
-
@current_source =
|
143
|
+
@current_source = rubygems_aggregate
|
146
144
|
end
|
145
|
+
|
146
|
+
@sources << @current_source
|
147
147
|
when PLUGIN
|
148
148
|
@current_source = Plugin.source_from_lock(@opts)
|
149
149
|
@sources << @current_source
|
@@ -245,5 +245,9 @@ module Bundler
|
|
245
245
|
def parse_ruby(line)
|
246
246
|
@ruby_version = line.strip
|
247
247
|
end
|
248
|
+
|
249
|
+
def rubygems_aggregate
|
250
|
+
@rubygems_aggregate ||= Source::Rubygems.new
|
251
|
+
end
|
248
252
|
end
|
249
253
|
end
|
@@ -211,10 +211,10 @@ The following is a list of all configuration keys and their purpose\. You can le
|
|
211
211
|
\fBignore_messages\fR (\fBBUNDLE_IGNORE_MESSAGES\fR): When set, no post install messages will be printed\. To silence a single gem, use dot notation like \fBignore_messages\.httparty true\fR\.
|
212
212
|
.
|
213
213
|
.IP "\(bu" 4
|
214
|
-
\fBinit_gems_rb\fR (\fBBUNDLE_INIT_GEMS_RB\fR) Generate a \fBgems\.rb\fR instead of a \fBGemfile\fR when running \fBbundle init\fR\.
|
214
|
+
\fBinit_gems_rb\fR (\fBBUNDLE_INIT_GEMS_RB\fR): Generate a \fBgems\.rb\fR instead of a \fBGemfile\fR when running \fBbundle init\fR\.
|
215
215
|
.
|
216
216
|
.IP "\(bu" 4
|
217
|
-
\fBjobs\fR (\fBBUNDLE_JOBS\fR): The number of gems Bundler can install in parallel\. Defaults to 1\.
|
217
|
+
\fBjobs\fR (\fBBUNDLE_JOBS\fR): The number of gems Bundler can install in parallel\. Defaults to 1 on Windows, and to the the number of processors on other platforms\.
|
218
218
|
.
|
219
219
|
.IP "\(bu" 4
|
220
220
|
\fBno_install\fR (\fBBUNDLE_NO_INSTALL\fR): Whether \fBbundle package\fR should skip installing gems\.
|
@@ -241,7 +241,7 @@ The following is a list of all configuration keys and their purpose\. You can le
|
|
241
241
|
\fBprefer_patch\fR (BUNDLE_PREFER_PATCH): Prefer updating only to next patch version during updates\. Makes \fBbundle update\fR calls equivalent to \fBbundler update \-\-patch\fR\.
|
242
242
|
.
|
243
243
|
.IP "\(bu" 4
|
244
|
-
\fBprint_only_version_number\fR (\fBBUNDLE_PRINT_ONLY_VERSION_NUMBER\fR) Print only version number from \fBbundler \-\-version\fR\.
|
244
|
+
\fBprint_only_version_number\fR (\fBBUNDLE_PRINT_ONLY_VERSION_NUMBER\fR): Print only version number from \fBbundler \-\-version\fR\.
|
245
245
|
.
|
246
246
|
.IP "\(bu" 4
|
247
247
|
\fBredirect\fR (\fBBUNDLE_REDIRECT\fR): The number of redirects allowed for network requests\. Defaults to \fB5\fR\.
|
@@ -283,7 +283,7 @@ The following is a list of all configuration keys and their purpose\. You can le
|
|
283
283
|
\fBunlock_source_unlocks_spec\fR (\fBBUNDLE_UNLOCK_SOURCE_UNLOCKS_SPEC\fR): Whether running \fBbundle update \-\-source NAME\fR unlocks a gem with the given name\. Defaults to \fBtrue\fR\.
|
284
284
|
.
|
285
285
|
.IP "\(bu" 4
|
286
|
-
\fBupdate_requires_all_flag\fR (\fBBUNDLE_UPDATE_REQUIRES_ALL_FLAG\fR) Require passing \fB\-\-all\fR to \fBbundle update\fR when everything should be updated, and disallow passing no options to \fBbundle update\fR\.
|
286
|
+
\fBupdate_requires_all_flag\fR (\fBBUNDLE_UPDATE_REQUIRES_ALL_FLAG\fR): Require passing \fB\-\-all\fR to \fBbundle update\fR when everything should be updated, and disallow passing no options to \fBbundle update\fR\.
|
287
287
|
.
|
288
288
|
.IP "\(bu" 4
|
289
289
|
\fBuser_agent\fR (\fBBUNDLE_USER_AGENT\fR): The custom user agent fragment Bundler includes in API requests\.
|
@@ -206,13 +206,14 @@ learn more about their operation in [bundle install(1)](bundle-install.1.html).
|
|
206
206
|
* `global_gem_cache` (`BUNDLE_GLOBAL_GEM_CACHE`):
|
207
207
|
Whether Bundler should cache all gems globally, rather than locally to the
|
208
208
|
installing Ruby installation.
|
209
|
-
* `ignore_messages` (`BUNDLE_IGNORE_MESSAGES`):
|
210
|
-
messages will be printed. To silence a single gem,
|
211
|
-
`ignore_messages.httparty true`.
|
212
|
-
* `init_gems_rb` (`BUNDLE_INIT_GEMS_RB`)
|
209
|
+
* `ignore_messages` (`BUNDLE_IGNORE_MESSAGES`):
|
210
|
+
When set, no post install messages will be printed. To silence a single gem,
|
211
|
+
use dot notation like `ignore_messages.httparty true`.
|
212
|
+
* `init_gems_rb` (`BUNDLE_INIT_GEMS_RB`):
|
213
213
|
Generate a `gems.rb` instead of a `Gemfile` when running `bundle init`.
|
214
214
|
* `jobs` (`BUNDLE_JOBS`):
|
215
|
-
The number of gems Bundler can install in parallel. Defaults to 1
|
215
|
+
The number of gems Bundler can install in parallel. Defaults to 1 on Windows,
|
216
|
+
and to the the number of processors on other platforms.
|
216
217
|
* `no_install` (`BUNDLE_NO_INSTALL`):
|
217
218
|
Whether `bundle package` should skip installing gems.
|
218
219
|
* `no_prune` (`BUNDLE_NO_PRUNE`):
|
@@ -233,7 +234,7 @@ learn more about their operation in [bundle install(1)](bundle-install.1.html).
|
|
233
234
|
Enable Bundler's experimental plugin system.
|
234
235
|
* `prefer_patch` (BUNDLE_PREFER_PATCH):
|
235
236
|
Prefer updating only to next patch version during updates. Makes `bundle update` calls equivalent to `bundler update --patch`.
|
236
|
-
* `print_only_version_number` (`BUNDLE_PRINT_ONLY_VERSION_NUMBER`)
|
237
|
+
* `print_only_version_number` (`BUNDLE_PRINT_ONLY_VERSION_NUMBER`):
|
237
238
|
Print only version number from `bundler --version`.
|
238
239
|
* `redirect` (`BUNDLE_REDIRECT`):
|
239
240
|
The number of redirects allowed for network requests. Defaults to `5`.
|
@@ -269,7 +270,7 @@ learn more about their operation in [bundle install(1)](bundle-install.1.html).
|
|
269
270
|
* `unlock_source_unlocks_spec` (`BUNDLE_UNLOCK_SOURCE_UNLOCKS_SPEC`):
|
270
271
|
Whether running `bundle update --source NAME` unlocks a gem with the given
|
271
272
|
name. Defaults to `true`.
|
272
|
-
* `update_requires_all_flag` (`BUNDLE_UPDATE_REQUIRES_ALL_FLAG`)
|
273
|
+
* `update_requires_all_flag` (`BUNDLE_UPDATE_REQUIRES_ALL_FLAG`):
|
273
274
|
Require passing `--all` to `bundle update` when everything should be updated,
|
274
275
|
and disallow passing no options to `bundle update`.
|
275
276
|
* `user_agent` (`BUNDLE_USER_AGENT`):
|
data/lib/bundler/plugin.rb
CHANGED
@@ -16,15 +16,13 @@ module Bundler
|
|
16
16
|
|
17
17
|
version = options[:version] || [">= 0"]
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
install_rubygems(names, version, sources)
|
27
|
-
end
|
19
|
+
if options[:git]
|
20
|
+
install_git(names, version, options)
|
21
|
+
elsif options[:local_git]
|
22
|
+
install_local_git(names, version, options)
|
23
|
+
else
|
24
|
+
sources = options[:source] || Bundler.rubygems.sources
|
25
|
+
install_rubygems(names, version, sources)
|
28
26
|
end
|
29
27
|
end
|
30
28
|
|
@@ -79,7 +77,7 @@ module Bundler
|
|
79
77
|
source_list = SourceList.new
|
80
78
|
|
81
79
|
source_list.add_git_source(git_source_options) if git_source_options
|
82
|
-
source_list.
|
80
|
+
source_list.global_rubygems_source = rubygems_source if rubygems_source
|
83
81
|
|
84
82
|
deps = names.map {|name| Dependency.new name, version }
|
85
83
|
|
data/lib/bundler/resolver.rb
CHANGED
@@ -17,16 +17,21 @@ module Bundler
|
|
17
17
|
# ==== Returns
|
18
18
|
# <GemBundle>,nil:: If the list of dependencies can be resolved, a
|
19
19
|
# collection of gemspecs is returned. Otherwise, nil is returned.
|
20
|
-
def self.resolve(requirements,
|
20
|
+
def self.resolve(requirements, source_requirements = {}, base = [], gem_version_promoter = GemVersionPromoter.new, additional_base_requirements = [], platforms = nil)
|
21
21
|
base = SpecSet.new(base) unless base.is_a?(SpecSet)
|
22
|
-
resolver = new(
|
22
|
+
resolver = new(source_requirements, base, gem_version_promoter, additional_base_requirements, platforms)
|
23
23
|
result = resolver.start(requirements)
|
24
24
|
SpecSet.new(result)
|
25
25
|
end
|
26
26
|
|
27
|
-
def initialize(
|
28
|
-
@index = index
|
27
|
+
def initialize(source_requirements, base, gem_version_promoter, additional_base_requirements, platforms)
|
29
28
|
@source_requirements = source_requirements
|
29
|
+
|
30
|
+
@index_requirements = source_requirements.each_with_object({}) do |source_requirement, index_requirements|
|
31
|
+
name, source = source_requirement
|
32
|
+
index_requirements[name] = name == :global ? source : source.specs
|
33
|
+
end
|
34
|
+
|
30
35
|
@base = base
|
31
36
|
@resolver = Molinillo::Resolver.new(self, self)
|
32
37
|
@search_for = {}
|
@@ -36,14 +41,14 @@ module Bundler
|
|
36
41
|
@base_dg.add_vertex(ls.name, DepProxy.get_proxy(dep, ls.platform), true)
|
37
42
|
end
|
38
43
|
additional_base_requirements.each {|d| @base_dg.add_vertex(d.name, d) }
|
39
|
-
@platforms = platforms
|
44
|
+
@platforms = platforms.reject {|p| p != Gem::Platform::RUBY && (platforms - [p]).any? {|pl| generic(pl) == p } }
|
40
45
|
@resolving_only_for_ruby = platforms == [Gem::Platform::RUBY]
|
41
46
|
@gem_version_promoter = gem_version_promoter
|
42
47
|
@use_gvp = Bundler.feature_flag.use_gem_version_promoter_for_major_updates? || !@gem_version_promoter.major?
|
43
|
-
@
|
48
|
+
@no_aggregate_global_source = @source_requirements[:global].nil?
|
44
49
|
|
45
50
|
@variant_specific_names = []
|
46
|
-
@generic_names = []
|
51
|
+
@generic_names = ["Ruby\0", "RubyGems\0"]
|
47
52
|
end
|
48
53
|
|
49
54
|
def start(requirements)
|
@@ -125,8 +130,7 @@ module Bundler
|
|
125
130
|
dependency = dependency_proxy.dep
|
126
131
|
name = dependency.name
|
127
132
|
search_result = @search_for[dependency_proxy] ||= begin
|
128
|
-
|
129
|
-
results = index.search(dependency, @base[name])
|
133
|
+
results = results_for(dependency, @base[name])
|
130
134
|
|
131
135
|
if vertex = @base_dg.vertex_named(name)
|
132
136
|
locked_requirement = vertex.payload.requirement
|
@@ -196,22 +200,22 @@ module Bundler
|
|
196
200
|
end
|
197
201
|
|
198
202
|
def index_for(dependency)
|
199
|
-
source = @
|
203
|
+
source = @index_requirements[dependency.name]
|
200
204
|
if source
|
201
|
-
source
|
202
|
-
elsif @
|
205
|
+
source
|
206
|
+
elsif @no_aggregate_global_source
|
203
207
|
Index.build do |idx|
|
204
|
-
|
205
|
-
dependency.all_sources.each {|s| idx.add_source(s.specs) if s }
|
206
|
-
else
|
207
|
-
idx.add_source @source_requirements[:default].specs
|
208
|
-
end
|
208
|
+
dependency.all_sources.each {|s| idx.add_source(s.specs) }
|
209
209
|
end
|
210
210
|
else
|
211
|
-
@
|
211
|
+
@index_requirements[:global]
|
212
212
|
end
|
213
213
|
end
|
214
214
|
|
215
|
+
def results_for(dependency, base)
|
216
|
+
index_for(dependency).search(dependency, base)
|
217
|
+
end
|
218
|
+
|
215
219
|
def name_for(dependency)
|
216
220
|
dependency.name
|
217
221
|
end
|
@@ -239,18 +243,20 @@ module Bundler
|
|
239
243
|
def relevant_sources_for_vertex(vertex)
|
240
244
|
if vertex.root?
|
241
245
|
[@source_requirements[vertex.name]]
|
242
|
-
elsif @
|
246
|
+
elsif @no_aggregate_global_source
|
243
247
|
vertex.recursive_predecessors.map do |v|
|
244
248
|
@source_requirements[v.name]
|
245
|
-
end << @source_requirements[:default]
|
249
|
+
end.compact << @source_requirements[:default]
|
250
|
+
else
|
251
|
+
[]
|
246
252
|
end
|
247
253
|
end
|
248
254
|
|
249
255
|
def sort_dependencies(dependencies, activated, conflicts)
|
250
256
|
dependencies.sort_by do |dependency|
|
251
|
-
dependency.all_sources = relevant_sources_for_vertex(activated.vertex_named(dependency.name))
|
252
257
|
name = name_for(dependency)
|
253
258
|
vertex = activated.vertex_named(name)
|
259
|
+
dependency.all_sources = relevant_sources_for_vertex(vertex)
|
254
260
|
[
|
255
261
|
@base_dg.vertex_named(name) ? 0 : 1,
|
256
262
|
vertex.payload ? 0 : 1,
|
@@ -317,7 +323,7 @@ module Bundler
|
|
317
323
|
"If you are updating multiple gems in your Gemfile at once,\n" \
|
318
324
|
"try passing them all to `bundle update`"
|
319
325
|
elsif source = @source_requirements[name]
|
320
|
-
specs = source.specs
|
326
|
+
specs = source.specs.search(name)
|
321
327
|
versions_with_platforms = specs.map {|s| [s.version, s.platform] }
|
322
328
|
message = String.new("Could not find gem '#{SharedHelpers.pretty_dependency(requirement)}' in #{source}#{cache_message}.\n")
|
323
329
|
message << if versions_with_platforms.any?
|
@@ -326,7 +332,7 @@ module Bundler
|
|
326
332
|
"The source does not contain any versions of '#{name}'"
|
327
333
|
end
|
328
334
|
else
|
329
|
-
message = "Could not find gem '#{requirement}' in any of the gem sources " \
|
335
|
+
message = "Could not find gem '#{SharedHelpers.pretty_dependency(requirement)}' in any of the gem sources " \
|
330
336
|
"listed in your Gemfile#{cache_message}."
|
331
337
|
end
|
332
338
|
raise GemNotFound, message
|
@@ -392,7 +398,7 @@ module Bundler
|
|
392
398
|
if other_bundler_required
|
393
399
|
o << "\n\n"
|
394
400
|
|
395
|
-
candidate_specs = @
|
401
|
+
candidate_specs = @index_requirements[:default_bundler].search(conflict_dependency)
|
396
402
|
if candidate_specs.any?
|
397
403
|
target_version = candidate_specs.last.version
|
398
404
|
new_command = [File.basename($PROGRAM_NAME), "_#{target_version}_", *ARGV].join(" ")
|
@@ -411,14 +417,8 @@ module Bundler
|
|
411
417
|
|
412
418
|
relevant_sources = if conflict.requirement.source
|
413
419
|
[conflict.requirement.source]
|
414
|
-
elsif conflict.requirement.all_sources
|
415
|
-
conflict.requirement.all_sources
|
416
|
-
elsif @lockfile_uses_separate_rubygems_sources
|
417
|
-
# every conflict should have an explicit group of sources when we
|
418
|
-
# enforce strict pinning
|
419
|
-
raise "no source set for #{conflict}"
|
420
420
|
else
|
421
|
-
|
421
|
+
conflict.requirement.all_sources
|
422
422
|
end.compact.map(&:to_s).uniq.sort
|
423
423
|
|
424
424
|
metadata_requirement = name.end_with?("\0")
|
@@ -455,23 +455,21 @@ module Bundler
|
|
455
455
|
def validate_resolved_specs!(resolved_specs)
|
456
456
|
resolved_specs.each do |v|
|
457
457
|
name = v.name
|
458
|
-
|
459
|
-
sources.
|
458
|
+
sources = relevant_sources_for_vertex(v)
|
459
|
+
next unless sources.any?
|
460
460
|
if default_index = sources.index(@source_requirements[:default])
|
461
461
|
sources.delete_at(default_index)
|
462
462
|
end
|
463
|
-
sources.reject! {|s| s.specs
|
463
|
+
sources.reject! {|s| s.specs.search(name).empty? }
|
464
464
|
sources.uniq!
|
465
465
|
next if sources.size <= 1
|
466
466
|
|
467
|
-
multisource_disabled = Bundler.feature_flag.disable_multisource?
|
468
|
-
|
469
467
|
msg = ["The gem '#{name}' was found in multiple relevant sources."]
|
470
468
|
msg.concat sources.map {|s| " * #{s}" }.sort
|
471
|
-
msg << "You #{
|
469
|
+
msg << "You #{@no_aggregate_global_source ? :must : :should} add this gem to the source block for the source you wish it to be installed from."
|
472
470
|
msg = msg.join("\n")
|
473
471
|
|
474
|
-
raise SecurityError, msg if
|
472
|
+
raise SecurityError, msg if @no_aggregate_global_source
|
475
473
|
Bundler.ui.warn "Warning: #{msg}"
|
476
474
|
end
|
477
475
|
end
|
@@ -8,6 +8,53 @@ module Bundler
|
|
8
8
|
# Bundler needs to install gems regardless of binstub overwriting
|
9
9
|
end
|
10
10
|
|
11
|
+
def install
|
12
|
+
pre_install_checks
|
13
|
+
|
14
|
+
run_pre_install_hooks
|
15
|
+
|
16
|
+
spec.loaded_from = spec_file
|
17
|
+
|
18
|
+
# Completely remove any previous gem files
|
19
|
+
FileUtils.rm_rf gem_dir
|
20
|
+
FileUtils.rm_rf spec.extension_dir
|
21
|
+
|
22
|
+
FileUtils.mkdir_p gem_dir, :mode => 0o755
|
23
|
+
|
24
|
+
extract_files
|
25
|
+
|
26
|
+
build_extensions
|
27
|
+
write_build_info_file
|
28
|
+
run_post_build_hooks
|
29
|
+
|
30
|
+
generate_bin
|
31
|
+
generate_plugins
|
32
|
+
|
33
|
+
write_spec
|
34
|
+
write_cache_file
|
35
|
+
|
36
|
+
say spec.post_install_message unless spec.post_install_message.nil?
|
37
|
+
|
38
|
+
run_post_install_hooks
|
39
|
+
|
40
|
+
spec
|
41
|
+
end
|
42
|
+
|
43
|
+
def generate_plugins
|
44
|
+
return unless Gem::Installer.instance_methods(false).include?(:generate_plugins)
|
45
|
+
|
46
|
+
latest = Gem::Specification.stubs_for(spec.name).first
|
47
|
+
return if latest && latest.version > spec.version
|
48
|
+
|
49
|
+
ensure_writable_dir @plugins_dir
|
50
|
+
|
51
|
+
if spec.plugins.empty?
|
52
|
+
remove_plugins_for(spec, @plugins_dir)
|
53
|
+
else
|
54
|
+
regenerate_plugins_for(spec, @plugins_dir)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
11
58
|
def pre_install_checks
|
12
59
|
super && validate_bundler_checksum(options[:bundler_expected_checksum])
|
13
60
|
end
|
data/lib/bundler/source_list.rb
CHANGED
@@ -5,15 +5,19 @@ module Bundler
|
|
5
5
|
attr_reader :path_sources,
|
6
6
|
:git_sources,
|
7
7
|
:plugin_sources,
|
8
|
-
:
|
8
|
+
:global_path_source,
|
9
9
|
:metadata_source
|
10
10
|
|
11
|
+
def global_rubygems_source
|
12
|
+
@global_rubygems_source ||= rubygems_aggregate_class.new
|
13
|
+
end
|
14
|
+
|
11
15
|
def initialize
|
12
16
|
@path_sources = []
|
13
17
|
@git_sources = []
|
14
18
|
@plugin_sources = []
|
15
19
|
@global_rubygems_source = nil
|
16
|
-
@
|
20
|
+
@global_path_source = nil
|
17
21
|
@rubygems_sources = []
|
18
22
|
@metadata_source = Source::Metadata.new
|
19
23
|
end
|
@@ -22,7 +26,9 @@ module Bundler
|
|
22
26
|
if options["gemspec"]
|
23
27
|
add_source_to_list Source::Gemspec.new(options), path_sources
|
24
28
|
else
|
25
|
-
add_source_to_list Source::Path.new(options), path_sources
|
29
|
+
path_source = add_source_to_list Source::Path.new(options), path_sources
|
30
|
+
@global_path_source ||= path_source if options["global"]
|
31
|
+
path_source
|
26
32
|
end
|
27
33
|
end
|
28
34
|
|
@@ -41,24 +47,20 @@ module Bundler
|
|
41
47
|
end
|
42
48
|
|
43
49
|
def global_rubygems_source=(uri)
|
44
|
-
|
45
|
-
@global_rubygems_source ||= rubygems_aggregate_class.new("remotes" => uri)
|
46
|
-
end
|
47
|
-
add_rubygems_remote(uri)
|
50
|
+
@global_rubygems_source ||= rubygems_aggregate_class.new("remotes" => uri)
|
48
51
|
end
|
49
52
|
|
50
53
|
def add_rubygems_remote(uri)
|
51
|
-
|
52
|
-
|
53
|
-
@rubygems_aggregate
|
54
|
+
global_rubygems_source.add_remote(uri)
|
55
|
+
global_rubygems_source
|
54
56
|
end
|
55
57
|
|
56
58
|
def default_source
|
57
|
-
|
59
|
+
global_path_source || global_rubygems_source
|
58
60
|
end
|
59
61
|
|
60
62
|
def rubygems_sources
|
61
|
-
@rubygems_sources + [
|
63
|
+
@rubygems_sources + [global_rubygems_source]
|
62
64
|
end
|
63
65
|
|
64
66
|
def rubygems_remotes
|
@@ -94,10 +96,9 @@ module Bundler
|
|
94
96
|
|
95
97
|
replacement_rubygems = !Bundler.feature_flag.disable_multisource? &&
|
96
98
|
replacement_sources.detect {|s| s.is_a?(Source::Rubygems) }
|
97
|
-
@
|
99
|
+
@global_rubygems_source = replacement_rubygems if replacement_rubygems
|
98
100
|
|
99
101
|
return true if !equal_sources?(lock_sources, replacement_sources) && !equivalent_sources?(lock_sources, replacement_sources)
|
100
|
-
return true if replacement_rubygems && rubygems_remotes.sort_by(&:to_s) != replacement_rubygems.remotes.sort_by(&:to_s)
|
101
102
|
|
102
103
|
false
|
103
104
|
end
|
@@ -110,10 +111,6 @@ module Bundler
|
|
110
111
|
all_sources.each(&:remote!)
|
111
112
|
end
|
112
113
|
|
113
|
-
def rubygems_primary_remotes
|
114
|
-
@rubygems_aggregate.remotes
|
115
|
-
end
|
116
|
-
|
117
114
|
private
|
118
115
|
|
119
116
|
def rubygems_aggregate_class
|
@@ -26,11 +26,19 @@ module Bundler
|
|
26
26
|
|
27
27
|
# @!group Stub Delegates
|
28
28
|
|
29
|
+
def manually_installed?
|
30
|
+
# This is for manually installed gems which are gems that were fixed in place after a
|
31
|
+
# failed installation. Once the issue was resolved, the user then manually created
|
32
|
+
# the gem specification using the instructions provided by `gem help install`
|
33
|
+
installed_by_version == Gem::Version.new(0)
|
34
|
+
end
|
35
|
+
|
29
36
|
# This is defined directly to avoid having to loading the full spec
|
30
37
|
def missing_extensions?
|
31
38
|
return false if default_gem?
|
32
39
|
return false if extensions.empty?
|
33
40
|
return false if File.exist? gem_build_complete_path
|
41
|
+
return false if manually_installed?
|
34
42
|
|
35
43
|
true
|
36
44
|
end
|
@@ -29,19 +29,21 @@ TODO: Write usage instructions here
|
|
29
29
|
After checking out the repo, run `bin/setup` to install dependencies.<% if config[:test] %> Then, run `rake <%= config[:test].sub('mini', '').sub('rspec', 'spec') %>` to run the tests.<% end %> You can also run `bin/console` for an interactive prompt that will allow you to experiment.<% if config[:bin] %> Run `bundle exec <%= config[:name] %>` to use the gem in this directory, ignoring other installed copies of this gem.<% end %>
|
30
30
|
|
31
31
|
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
32
|
+
<% if config[:git] -%>
|
32
33
|
|
33
34
|
## Contributing
|
34
35
|
|
35
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/<%= config[:github_username] %>/<%= config[:name] %>.<% if config[:coc] %> This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/<%= config[:github_username] %>/<%= config[:name] %>/blob
|
36
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/<%= config[:github_username] %>/<%= config[:name] %>.<% if config[:coc] %> This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/<%= config[:github_username] %>/<%= config[:name] %>/blob/<%= config[:git_default_branch] %>/CODE_OF_CONDUCT.md).<% end %>
|
37
|
+
<% end -%>
|
36
38
|
<% if config[:mit] -%>
|
37
39
|
|
38
40
|
## License
|
39
41
|
|
40
42
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
41
43
|
<% end -%>
|
42
|
-
<% if config[:coc] -%>
|
44
|
+
<% if config[:git] && config[:coc] -%>
|
43
45
|
|
44
46
|
## Code of Conduct
|
45
47
|
|
46
|
-
Everyone interacting in the <%= config[:constant_name] %> project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/<%= config[:github_username] %>/<%= config[:name] %>/blob
|
48
|
+
Everyone interacting in the <%= config[:constant_name] %> project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/<%= config[:github_username] %>/<%= config[:name] %>/blob/<%= config[:git_default_branch] %>/CODE_OF_CONDUCT.md).
|
47
49
|
<% end -%>
|
data/lib/bundler/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bundler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.
|
4
|
+
version: 2.2.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- André Arko
|
@@ -22,7 +22,7 @@ authors:
|
|
22
22
|
autorequire:
|
23
23
|
bindir: exe
|
24
24
|
cert_chain: []
|
25
|
-
date: 2021-
|
25
|
+
date: 2021-03-03 00:00:00.000000000 Z
|
26
26
|
dependencies: []
|
27
27
|
description: Bundler manages an application's dependencies through its entire life,
|
28
28
|
across many machines, systematically and repeatably
|
@@ -352,7 +352,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
352
352
|
- !ruby/object:Gem::Version
|
353
353
|
version: 2.5.2
|
354
354
|
requirements: []
|
355
|
-
rubygems_version: 3.2.
|
355
|
+
rubygems_version: 3.2.13
|
356
356
|
signing_key:
|
357
357
|
specification_version: 4
|
358
358
|
summary: The best way to manage your application's dependencies
|