rubygems-update 2.7.6 → 2.7.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +2 -23
- data/History.txt +116 -0
- data/Manifest.txt +3 -3
- data/Rakefile +12 -2
- data/bundler/CHANGELOG.md +130 -0
- data/bundler/README.md +5 -1
- data/bundler/bundler.gemspec +2 -1
- data/bundler/lib/bundler.rb +12 -8
- data/bundler/lib/bundler/build_metadata.rb +19 -2
- data/bundler/lib/bundler/cli.rb +3 -1
- data/bundler/lib/bundler/cli/check.rb +1 -1
- data/bundler/lib/bundler/cli/exec.rb +4 -4
- data/bundler/lib/bundler/cli/gem.rb +5 -2
- data/bundler/lib/bundler/cli/init.rb +5 -0
- data/bundler/lib/bundler/cli/install.rb +2 -2
- data/bundler/lib/bundler/cli/outdated.rb +1 -1
- data/bundler/lib/bundler/cli/update.rb +3 -3
- data/bundler/lib/bundler/compact_index_client/updater.rb +10 -1
- data/bundler/lib/bundler/current_ruby.rb +8 -1
- data/bundler/lib/bundler/definition.rb +33 -23
- data/bundler/lib/bundler/dep_proxy.rb +2 -2
- data/bundler/lib/bundler/dependency.rb +1 -0
- data/bundler/lib/bundler/deprecate.rb +2 -1
- data/bundler/lib/bundler/endpoint_specification.rb +1 -1
- data/bundler/lib/bundler/env.rb +10 -8
- data/bundler/lib/bundler/fetcher.rb +3 -3
- data/bundler/lib/bundler/fetcher/downloader.rb +10 -5
- data/bundler/lib/bundler/fetcher/index.rb +2 -2
- data/bundler/lib/bundler/friendly_errors.rb +2 -0
- data/bundler/lib/bundler/gem_helper.rb +1 -1
- data/bundler/lib/bundler/gem_version_promoter.rb +12 -0
- data/bundler/lib/bundler/injector.rb +5 -5
- data/bundler/lib/bundler/installer.rb +12 -4
- data/bundler/lib/bundler/installer/gem_installer.rb +9 -2
- data/bundler/lib/bundler/installer/parallel_installer.rb +1 -1
- data/bundler/lib/bundler/lazy_specification.rb +1 -1
- data/bundler/lib/bundler/mirror.rb +2 -2
- data/bundler/lib/bundler/plugin.rb +2 -2
- data/bundler/lib/bundler/plugin/index.rb +7 -2
- data/bundler/lib/bundler/process_lock.rb +1 -1
- data/bundler/lib/bundler/resolver.rb +10 -9
- data/bundler/lib/bundler/resolver/spec_group.rb +0 -5
- data/bundler/lib/bundler/ruby_version.rb +1 -1
- data/bundler/lib/bundler/rubygems_integration.rb +9 -3
- data/bundler/lib/bundler/runtime.rb +2 -2
- data/bundler/lib/bundler/shared_helpers.rb +15 -3
- data/bundler/lib/bundler/source/git.rb +2 -1
- data/bundler/lib/bundler/source/git/git_proxy.rb +6 -1
- data/bundler/lib/bundler/source/metadata.rb +1 -1
- data/bundler/lib/bundler/source/rubygems.rb +11 -2
- data/bundler/lib/bundler/source/rubygems/remote.rb +4 -1
- data/bundler/lib/bundler/spec_set.rb +4 -1
- data/bundler/lib/bundler/templates/Executable +1 -1
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +8 -2
- data/bundler/lib/bundler/templates/newgem/travis.yml.tt +2 -0
- data/bundler/lib/bundler/ui/shell.rb +3 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +11 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +7 -2
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
- data/bundler/lib/bundler/version.rb +1 -1
- data/bundler/man/bundle-binstubs.ronn +3 -3
- data/bundler/man/bundle-check.ronn +3 -3
- data/bundler/man/bundle-config.ronn +13 -9
- data/bundler/man/bundle-doctor.ronn +33 -0
- data/bundler/man/bundle-exec.ronn +3 -3
- data/bundler/man/bundle-gem.ronn +1 -1
- data/bundler/man/bundle-init.ronn +15 -4
- data/bundler/man/bundle-inject.ronn +3 -3
- data/bundler/man/bundle-install.ronn +12 -3
- data/bundler/man/bundle-lock.ronn +1 -1
- data/bundler/man/bundle-outdated.ronn +1 -1
- data/bundler/man/bundle-package.ronn +3 -3
- data/bundler/man/bundle-show.ronn +3 -2
- data/bundler/man/bundle-update.ronn +18 -14
- data/bundler/man/bundle-viz.ronn +1 -1
- data/bundler/man/bundle.ronn +27 -27
- data/bundler/man/gemfile.5.ronn +24 -9
- data/lib/rubygems.rb +24 -11
- data/lib/rubygems/bundler_version_finder.rb +9 -22
- data/lib/rubygems/command_manager.rb +6 -4
- data/lib/rubygems/commands/install_command.rb +7 -0
- data/lib/rubygems/commands/owner_command.rb +4 -1
- data/lib/rubygems/commands/push_command.rb +37 -4
- data/lib/rubygems/commands/setup_command.rb +3 -3
- data/lib/rubygems/commands/uninstall_command.rb +1 -1
- data/lib/rubygems/commands/unpack_command.rb +1 -1
- data/lib/rubygems/core_ext/kernel_require.rb +2 -7
- data/lib/rubygems/dependency.rb +1 -0
- data/lib/rubygems/dependency_installer.rb +4 -2
- data/lib/rubygems/exceptions.rb +5 -1
- data/lib/rubygems/gemcutter_utilities.rb +5 -2
- data/lib/rubygems/indexer.rb +1 -1
- data/lib/rubygems/install_update_options.rb +1 -1
- data/lib/rubygems/installer.rb +29 -6
- data/lib/rubygems/package.rb +20 -2
- data/lib/rubygems/package/tar_header.rb +3 -1
- data/lib/rubygems/package/tar_writer.rb +2 -3
- data/lib/rubygems/remote_fetcher.rb +1 -1
- data/lib/rubygems/request_set.rb +28 -17
- data/lib/rubygems/requirement.rb +14 -3
- data/lib/rubygems/resolver/api_specification.rb +5 -0
- data/lib/rubygems/security.rb +6 -1
- data/lib/rubygems/server.rb +3 -3
- data/lib/rubygems/source.rb +1 -1
- data/lib/rubygems/specification.rb +7 -10
- data/lib/rubygems/ssl_certs/{index.rubygems.org → rubygems.org}/GlobalSignRootCA.pem +0 -0
- data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
- data/lib/rubygems/test_case.rb +22 -4
- data/lib/rubygems/test_utilities.rb +1 -1
- data/lib/rubygems/user_interaction.rb +9 -2
- data/lib/rubygems/util/licenses.rb +35 -4
- data/lib/rubygems/version.rb +7 -1
- data/lib/ubygems.rb +3 -0
- data/test/rubygems/test_bundled_ca.rb +7 -4
- data/test/rubygems/test_gem.rb +45 -10
- data/test/rubygems/test_gem_bundler_version_finder.rb +8 -7
- data/test/rubygems/test_gem_command_manager.rb +2 -2
- data/test/rubygems/test_gem_commands_build_command.rb +2 -0
- data/test/rubygems/test_gem_commands_install_command.rb +37 -0
- data/test/rubygems/test_gem_commands_push_command.rb +20 -0
- data/test/rubygems/test_gem_commands_setup_command.rb +6 -1
- data/test/rubygems/test_gem_commands_signin_command.rb +1 -1
- data/test/rubygems/test_gem_commands_uninstall_command.rb +1 -1
- data/test/rubygems/test_gem_dependency.rb +1 -1
- data/test/rubygems/test_gem_ext_rake_builder.rb +0 -4
- data/test/rubygems/test_gem_install_update_options.rb +2 -0
- data/test/rubygems/test_gem_installer.rb +109 -3
- data/test/rubygems/test_gem_package.rb +90 -5
- data/test/rubygems/test_gem_package_tar_header.rb +2 -1
- data/test/rubygems/test_gem_remote_fetcher.rb +6 -2
- data/test/rubygems/test_gem_request.rb +5 -2
- data/test/rubygems/test_gem_requirement.rb +6 -0
- data/test/rubygems/test_gem_resolver_api_specification.rb +24 -0
- data/test/rubygems/test_gem_resolver_installer_set.rb +1 -1
- data/test/rubygems/test_gem_security_policy.rb +3 -3
- data/test/rubygems/test_gem_server.rb +12 -12
- data/test/rubygems/test_gem_specification.rb +27 -13
- data/test/rubygems/test_gem_stream_ui.rb +2 -2
- data/test/rubygems/test_gem_text.rb +5 -0
- data/test/rubygems/test_gem_util.rb +4 -2
- data/test/rubygems/test_gem_version.rb +29 -2
- data/util/ci +1 -0
- data/util/generate_spdx_license_list.rb +15 -6
- data/util/update_bundled_ca_certificates.rb +1 -3
- metadata +12 -12
- data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
- data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
@@ -4,6 +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 = "2020-12-09".freeze
|
8
|
+
@git_commit_sha = "8a789f00bf".freeze
|
7
9
|
@release = false
|
8
10
|
# end ivars
|
9
11
|
|
@@ -23,9 +25,24 @@ module Bundler
|
|
23
25
|
|
24
26
|
# The SHA for the git commit the bundler gem was built from.
|
25
27
|
def self.git_commit_sha
|
26
|
-
@git_commit_sha
|
27
|
-
|
28
|
+
return @git_commit_sha if @git_commit_sha
|
29
|
+
|
30
|
+
# If Bundler has been installed without its .git directory and without a
|
31
|
+
# commit instance variable then we can't determine its commits SHA.
|
32
|
+
git_dir = File.join(File.expand_path("../../..", __FILE__), ".git")
|
33
|
+
if File.directory?(git_dir)
|
34
|
+
return @git_commit_sha = Dir.chdir(git_dir) { `git rev-parse --short HEAD`.strip.freeze }
|
35
|
+
end
|
36
|
+
|
37
|
+
# If Bundler is a submodule in RubyGems, get the submodule commit
|
38
|
+
git_sub_dir = File.join(File.expand_path("../../../..", __FILE__), ".git")
|
39
|
+
if File.directory?(git_sub_dir)
|
40
|
+
return @git_commit_sha = Dir.chdir(git_sub_dir) do
|
41
|
+
`git ls-tree --abbrev=8 HEAD bundler`.split(/\s/).fetch(2, "").strip.freeze
|
42
|
+
end
|
28
43
|
end
|
44
|
+
|
45
|
+
@git_commit_sha ||= "unknown"
|
29
46
|
end
|
30
47
|
|
31
48
|
# Whether this is an official release build of Bundler.
|
data/bundler/lib/bundler/cli.rb
CHANGED
@@ -717,6 +717,8 @@ module Bundler
|
|
717
717
|
command_name = current_command.name
|
718
718
|
return if PARSEABLE_COMMANDS.include?(command_name)
|
719
719
|
|
720
|
+
return unless SharedHelpers.md5_available?
|
721
|
+
|
720
722
|
latest = Fetcher::CompactIndex.
|
721
723
|
new(nil, Source::Rubygems::Remote.new(URI("https://rubygems.org")), nil).
|
722
724
|
send(:compact_index_client).
|
@@ -739,7 +741,7 @@ module Bundler
|
|
739
741
|
end
|
740
742
|
|
741
743
|
Bundler.ui.warn "The latest bundler is #{latest}, but you are currently running #{current}.\n#{suggestion}"
|
742
|
-
rescue
|
744
|
+
rescue RuntimeError
|
743
745
|
nil
|
744
746
|
end
|
745
747
|
end
|
@@ -26,7 +26,7 @@ module Bundler
|
|
26
26
|
not_installed.each {|s| Bundler.ui.error " * #{s.name} (#{s.version})" }
|
27
27
|
Bundler.ui.warn "Install missing gems with `bundle install`"
|
28
28
|
exit 1
|
29
|
-
elsif !Bundler.default_lockfile.file? && Bundler.
|
29
|
+
elsif !Bundler.default_lockfile.file? && Bundler.frozen_bundle?
|
30
30
|
Bundler.ui.error "This bundle has been frozen, but there is no #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} present"
|
31
31
|
exit 1
|
32
32
|
else
|
@@ -6,7 +6,7 @@ module Bundler
|
|
6
6
|
class CLI::Exec
|
7
7
|
attr_reader :options, :args, :cmd
|
8
8
|
|
9
|
-
|
9
|
+
TRAPPED_SIGNALS = %w[INT].freeze
|
10
10
|
|
11
11
|
def initialize(options, args)
|
12
12
|
@options = options
|
@@ -70,15 +70,14 @@ module Bundler
|
|
70
70
|
ui = Bundler.ui
|
71
71
|
Bundler.ui = nil
|
72
72
|
require "bundler/setup"
|
73
|
-
|
74
|
-
signals.each {|s| trap(s, "DEFAULT") }
|
73
|
+
TRAPPED_SIGNALS.each {|s| trap(s, "DEFAULT") }
|
75
74
|
Kernel.load(file)
|
76
75
|
rescue SystemExit, SignalException
|
77
76
|
raise
|
78
77
|
rescue Exception => e # rubocop:disable Lint/RescueException
|
79
78
|
Bundler.ui = ui
|
80
79
|
Bundler.ui.error "bundler: failed to load command: #{cmd} (#{file})"
|
81
|
-
backtrace = e.backtrace.take_while {|bt| !bt.start_with?(__FILE__) }
|
80
|
+
backtrace = e.backtrace ? e.backtrace.take_while {|bt| !bt.start_with?(__FILE__) } : []
|
82
81
|
abort "#{e.class}: #{e.message}\n #{backtrace.join("\n ")}"
|
83
82
|
end
|
84
83
|
|
@@ -90,6 +89,7 @@ module Bundler
|
|
90
89
|
possibilities = [
|
91
90
|
"#!/usr/bin/env ruby\n",
|
92
91
|
"#!/usr/bin/env jruby\n",
|
92
|
+
"#!/usr/bin/env truffleruby\n",
|
93
93
|
"#!#{Gem.ruby}\n",
|
94
94
|
]
|
95
95
|
|
@@ -105,7 +105,7 @@ module Bundler
|
|
105
105
|
if ask_and_set(:mit, "Do you want to license your code permissively under the MIT license?",
|
106
106
|
"This means that any other developer or company will be legally allowed to use your code " \
|
107
107
|
"for free as long as they admit you created it. You can read more about the MIT license " \
|
108
|
-
"at
|
108
|
+
"at https://choosealicense.com/licenses/mit.")
|
109
109
|
config[:mit] = true
|
110
110
|
Bundler.ui.info "MIT License enabled in config"
|
111
111
|
templates.merge!("LICENSE.txt.tt" => "LICENSE.txt")
|
@@ -118,7 +118,7 @@ module Bundler
|
|
118
118
|
"of enforcing it, so be sure that you are prepared to do that. Be sure that your email " \
|
119
119
|
"address is specified as a contact in the generated code of conduct so that people know " \
|
120
120
|
"who to contact in case of a violation. For suggestions about " \
|
121
|
-
"how to enforce codes of conduct, see
|
121
|
+
"how to enforce codes of conduct, see https://bit.ly/coc-enforcement.")
|
122
122
|
config[:coc] = true
|
123
123
|
Bundler.ui.info "Code of conduct enabled in config"
|
124
124
|
templates.merge!("CODE_OF_CONDUCT.md.tt" => "CODE_OF_CONDUCT.md")
|
@@ -158,6 +158,9 @@ module Bundler
|
|
158
158
|
|
159
159
|
# Open gemspec in editor
|
160
160
|
open_editor(options["edit"], target.join("#{name}.gemspec")) if options[:edit]
|
161
|
+
|
162
|
+
Bundler.ui.info "Gem '#{name}' was successfully created. " \
|
163
|
+
"For more information on making a RubyGem visit https://bundler.io/guides/creating_gem.html"
|
161
164
|
rescue Errno::EEXIST => e
|
162
165
|
raise GenericSystemCallError.new(e, "There was a conflict while creating the new gem.")
|
163
166
|
end
|
@@ -13,6 +13,11 @@ module Bundler
|
|
13
13
|
exit 1
|
14
14
|
end
|
15
15
|
|
16
|
+
unless File.writable?(Dir.pwd)
|
17
|
+
Bundler.ui.error "Can not create #{gemfile} as the current directory is not writable."
|
18
|
+
exit 1
|
19
|
+
end
|
20
|
+
|
16
21
|
if options[:gemspec]
|
17
22
|
gemspec = File.expand_path(options[:gemspec])
|
18
23
|
unless File.exist?(gemspec)
|
@@ -23,7 +23,7 @@ module Bundler
|
|
23
23
|
|
24
24
|
check_trust_policy
|
25
25
|
|
26
|
-
if options[:deployment] || options[:frozen] || Bundler.
|
26
|
+
if options[:deployment] || options[:frozen] || Bundler.frozen_bundle?
|
27
27
|
unless Bundler.default_lockfile.exist?
|
28
28
|
flag = "--deployment flag" if options[:deployment]
|
29
29
|
flag ||= "--frozen flag" if options[:frozen]
|
@@ -63,7 +63,7 @@ module Bundler
|
|
63
63
|
definition.validate_runtime!
|
64
64
|
|
65
65
|
installer = Installer.install(Bundler.root, definition, options)
|
66
|
-
Bundler.load.cache if Bundler.app_cache.exist? && !options["no-cache"] && !Bundler.
|
66
|
+
Bundler.load.cache if Bundler.app_cache.exist? && !options["no-cache"] && !Bundler.frozen_bundle?
|
67
67
|
|
68
68
|
Bundler.ui.confirm "Bundle complete! #{dependencies_count_for(definition)}, #{gems_installed_for(definition)}."
|
69
69
|
Bundler::CLI::Common.output_without_groups_message
|
@@ -213,7 +213,7 @@ module Bundler
|
|
213
213
|
end
|
214
214
|
|
215
215
|
def check_for_deployment_mode
|
216
|
-
return unless Bundler.
|
216
|
+
return unless Bundler.frozen_bundle?
|
217
217
|
suggested_command = if Bundler.settings.locations("frozen")[:global]
|
218
218
|
"bundle config --delete frozen"
|
219
219
|
elsif Bundler.settings.locations("deployment").keys.&([:global, :local]).any?
|
@@ -38,8 +38,8 @@ module Bundler
|
|
38
38
|
Bundler::CLI::Common.ensure_all_gems_in_lockfile!(gems)
|
39
39
|
|
40
40
|
if groups.any?
|
41
|
-
|
42
|
-
gems.concat(
|
41
|
+
deps = Bundler.definition.dependencies.select {|d| (d.groups & groups).any? }
|
42
|
+
gems.concat(deps.map(&:name))
|
43
43
|
end
|
44
44
|
|
45
45
|
Bundler.definition(:gems => gems, :sources => sources, :ruby => options[:ruby],
|
@@ -76,7 +76,7 @@ module Bundler
|
|
76
76
|
if !new_version
|
77
77
|
Bundler.ui.warn "Bundler attempted to update #{name} but it was removed from the bundle"
|
78
78
|
elsif new_version < locked_version
|
79
|
-
Bundler.ui.warn "
|
79
|
+
Bundler.ui.warn "Note: #{name} version regressed from #{locked_version} to #{new_version}"
|
80
80
|
elsif new_version == locked_version
|
81
81
|
Bundler.ui.warn "Bundler attempted to update #{name} but its version stayed the same"
|
82
82
|
end
|
@@ -33,7 +33,9 @@ module Bundler
|
|
33
33
|
|
34
34
|
# first try to fetch any new bytes on the existing file
|
35
35
|
if retrying.nil? && local_path.file?
|
36
|
-
|
36
|
+
SharedHelpers.filesystem_access(local_temp_path) do
|
37
|
+
FileUtils.cp local_path, local_temp_path
|
38
|
+
end
|
37
39
|
headers["If-None-Match"] = etag_for(local_temp_path)
|
38
40
|
headers["Range"] =
|
39
41
|
if local_temp_path.size.nonzero?
|
@@ -78,6 +80,13 @@ module Bundler
|
|
78
80
|
|
79
81
|
update(local_path, remote_path, :retrying)
|
80
82
|
end
|
83
|
+
rescue Errno::EACCES
|
84
|
+
raise Bundler::PermissionError,
|
85
|
+
"Bundler does not have write access to create a temp directory " \
|
86
|
+
"within #{Dir.tmpdir}. Bundler must have write access to your " \
|
87
|
+
"systems temp directory to function properly. "
|
88
|
+
rescue Zlib::GzipFile::Error
|
89
|
+
raise Bundler::HTTPError
|
81
90
|
end
|
82
91
|
|
83
92
|
def etag_for(path)
|
@@ -18,6 +18,7 @@ module Bundler
|
|
18
18
|
2.3
|
19
19
|
2.4
|
20
20
|
2.5
|
21
|
+
2.6
|
21
22
|
].freeze
|
22
23
|
|
23
24
|
KNOWN_MAJOR_VERSIONS = KNOWN_MINOR_VERSIONS.map {|v| v.split(".", 2).first }.uniq.freeze
|
@@ -31,11 +32,13 @@ module Bundler
|
|
31
32
|
mswin64
|
32
33
|
rbx
|
33
34
|
ruby
|
35
|
+
truffleruby
|
34
36
|
x64_mingw
|
35
37
|
].freeze
|
36
38
|
|
37
39
|
def ruby?
|
38
|
-
!mswin? && (!defined?(RUBY_ENGINE) || RUBY_ENGINE == "ruby" ||
|
40
|
+
!mswin? && (!defined?(RUBY_ENGINE) || RUBY_ENGINE == "ruby" ||
|
41
|
+
RUBY_ENGINE == "rbx" || RUBY_ENGINE == "maglev" || RUBY_ENGINE == "truffleruby")
|
39
42
|
end
|
40
43
|
|
41
44
|
def mri?
|
@@ -54,6 +57,10 @@ module Bundler
|
|
54
57
|
defined?(RUBY_ENGINE) && RUBY_ENGINE == "maglev"
|
55
58
|
end
|
56
59
|
|
60
|
+
def truffleruby?
|
61
|
+
defined?(RUBY_ENGINE) && RUBY_ENGINE == "truffleruby"
|
62
|
+
end
|
63
|
+
|
57
64
|
def mswin?
|
58
65
|
Bundler::WINDOWS
|
59
66
|
end
|
@@ -77,6 +77,7 @@ module Bundler
|
|
77
77
|
@lockfile_contents = String.new
|
78
78
|
@locked_bundler_version = nil
|
79
79
|
@locked_ruby_version = nil
|
80
|
+
@locked_specs_incomplete_for_platform = false
|
80
81
|
|
81
82
|
if lockfile && File.exist?(lockfile)
|
82
83
|
@lockfile_contents = Bundler.read_file(lockfile)
|
@@ -113,15 +114,15 @@ module Bundler
|
|
113
114
|
end
|
114
115
|
@unlocking ||= @unlock[:ruby] ||= (!@locked_ruby_version ^ !@ruby_version)
|
115
116
|
|
116
|
-
add_current_platform unless Bundler.
|
117
|
+
add_current_platform unless Bundler.frozen_bundle?
|
117
118
|
|
118
119
|
converge_path_sources_to_gemspec_sources
|
119
120
|
@path_changes = converge_paths
|
120
121
|
@source_changes = converge_sources
|
121
122
|
|
122
123
|
unless @unlock[:lock_shared_dependencies]
|
123
|
-
eager_unlock = expand_dependencies(@unlock[:gems])
|
124
|
-
@unlock[:gems] = @locked_specs.for(eager_unlock).map(&:name)
|
124
|
+
eager_unlock = expand_dependencies(@unlock[:gems], true)
|
125
|
+
@unlock[:gems] = @locked_specs.for(eager_unlock, [], false, false, false).map(&:name)
|
125
126
|
end
|
126
127
|
|
127
128
|
@gem_version_promoter = create_gem_version_promoter
|
@@ -175,7 +176,7 @@ module Bundler
|
|
175
176
|
raise GemNotFound, "Your bundle is locked to #{locked_gem}, but that version could not " \
|
176
177
|
"be found in any of the sources listed in your Gemfile. If you haven't changed sources, " \
|
177
178
|
"that means the author of #{locked_gem} has removed it. You'll need to update your bundle " \
|
178
|
-
"to a
|
179
|
+
"to a version other than #{locked_gem} that hasn't been removed in order to install."
|
179
180
|
end
|
180
181
|
unless specs["bundler"].any?
|
181
182
|
bundler = sources.metadata_source.specs.search(Gem::Dependency.new("bundler", VERSION)).last
|
@@ -245,17 +246,22 @@ module Bundler
|
|
245
246
|
def resolve
|
246
247
|
@resolve ||= begin
|
247
248
|
last_resolve = converge_locked_specs
|
248
|
-
|
249
|
-
Bundler.
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
249
|
+
resolve =
|
250
|
+
if Bundler.frozen_bundle?
|
251
|
+
Bundler.ui.debug "Frozen, using resolution from the lockfile"
|
252
|
+
last_resolve
|
253
|
+
elsif !unlocking? && nothing_changed?
|
254
|
+
Bundler.ui.debug("Found no changes, using resolution from the lockfile")
|
255
|
+
last_resolve
|
256
|
+
else
|
257
|
+
# Run a resolve against the locally available gems
|
258
|
+
Bundler.ui.debug("Found changes from the lockfile, re-resolving dependencies because #{change_reason}")
|
259
|
+
last_resolve.merge Resolver.resolve(expanded_dependencies, index, source_requirements, last_resolve, gem_version_promoter, additional_base_requirements_for_resolve, platforms)
|
260
|
+
end
|
261
|
+
|
262
|
+
# filter out gems that _can_ be installed on multiple platforms, but don't need
|
263
|
+
# to be
|
264
|
+
resolve.for(expand_dependencies(dependencies, true), [], false, false, false)
|
259
265
|
end
|
260
266
|
end
|
261
267
|
|
@@ -336,10 +342,11 @@ module Bundler
|
|
336
342
|
end
|
337
343
|
end
|
338
344
|
|
339
|
-
preserve_unknown_sections ||= !updating_major && (Bundler.
|
340
|
-
|
345
|
+
preserve_unknown_sections ||= !updating_major && (Bundler.frozen_bundle? || !(unlocking? || @unlocking_bundler))
|
346
|
+
|
347
|
+
return if file && File.exist?(file) && lockfiles_equal?(@lockfile_contents, contents, preserve_unknown_sections)
|
341
348
|
|
342
|
-
if Bundler.
|
349
|
+
if Bundler.frozen_bundle?
|
343
350
|
Bundler.ui.error "Cannot write a changed lockfile while frozen."
|
344
351
|
return
|
345
352
|
end
|
@@ -530,7 +537,7 @@ module Bundler
|
|
530
537
|
private :sources
|
531
538
|
|
532
539
|
def nothing_changed?
|
533
|
-
!@source_changes && !@dependency_changes && !@new_platform && !@path_changes && !@local_changes
|
540
|
+
!@source_changes && !@dependency_changes && !@new_platform && !@path_changes && !@local_changes && !@locked_specs_incomplete_for_platform
|
534
541
|
end
|
535
542
|
|
536
543
|
def unlocking?
|
@@ -557,6 +564,7 @@ module Bundler
|
|
557
564
|
[@new_platform, "you added a new platform to your gemfile"],
|
558
565
|
[@path_changes, "the gemspecs for path gems changed"],
|
559
566
|
[@local_changes, "the gemspecs for git local gems changed"],
|
567
|
+
[@locked_specs_incomplete_for_platform, "the lockfile does not have all gems needed for the current platform"],
|
560
568
|
].select(&:first).map(&:last).join(", ")
|
561
569
|
end
|
562
570
|
|
@@ -682,7 +690,7 @@ module Bundler
|
|
682
690
|
end
|
683
691
|
|
684
692
|
def converge_dependencies
|
685
|
-
frozen = Bundler.
|
693
|
+
frozen = Bundler.frozen_bundle?
|
686
694
|
(@dependencies + @locked_deps.values).each do |dep|
|
687
695
|
locked_source = @locked_deps[dep.name]
|
688
696
|
# This is to make sure that if bundler is installing in deployment mode and
|
@@ -803,7 +811,9 @@ module Bundler
|
|
803
811
|
end
|
804
812
|
|
805
813
|
resolve = SpecSet.new(converged)
|
806
|
-
|
814
|
+
expanded_deps = expand_dependencies(deps, true)
|
815
|
+
@locked_specs_incomplete_for_platform = !resolve.for(expanded_deps, @unlock[:gems], true, true)
|
816
|
+
resolve = resolve.for(expanded_deps, @unlock[:gems], false, false, false)
|
807
817
|
diff = nil
|
808
818
|
|
809
819
|
# Now, we unlock any sources that do not have anymore gems pinned to it
|
@@ -965,10 +975,10 @@ module Bundler
|
|
965
975
|
|
966
976
|
def additional_base_requirements_for_resolve
|
967
977
|
return [] unless @locked_gems && Bundler.feature_flag.only_update_to_newer_versions?
|
968
|
-
dependencies_by_name = dependencies.
|
978
|
+
dependencies_by_name = dependencies.inject({}) {|memo, dep| memo.update(dep.name => dep) }
|
969
979
|
@locked_gems.specs.reduce({}) do |requirements, locked_spec|
|
970
980
|
name = locked_spec.name
|
971
|
-
next requirements if @
|
981
|
+
next requirements if @locked_gems.dependencies[name] != dependencies_by_name[name]
|
972
982
|
dep = Gem::Dependency.new(name, ">= #{locked_spec.version}")
|
973
983
|
requirements[name] = DepProxy.new(dep, locked_spec.platform)
|
974
984
|
requirements
|
@@ -10,11 +10,11 @@ module Bundler
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def hash
|
13
|
-
@hash ||= dep.hash
|
13
|
+
@hash ||= [dep, __platform].hash
|
14
14
|
end
|
15
15
|
|
16
16
|
def ==(other)
|
17
|
-
return if other.
|
17
|
+
return false if other.class != self.class
|
18
18
|
dep == other.dep && __platform == other.__platform
|
19
19
|
end
|
20
20
|
|
@@ -30,6 +30,7 @@ module Bundler
|
|
30
30
|
:mri_24 => Gem::Platform::RUBY,
|
31
31
|
:mri_25 => Gem::Platform::RUBY,
|
32
32
|
:rbx => Gem::Platform::RUBY,
|
33
|
+
:truffleruby => Gem::Platform::RUBY,
|
33
34
|
:jruby => Gem::Platform::JAVA,
|
34
35
|
:jruby_18 => Gem::Platform::JAVA,
|
35
36
|
:jruby_19 => Gem::Platform::JAVA,
|
@@ -8,7 +8,8 @@ rescue LoadError
|
|
8
8
|
end
|
9
9
|
|
10
10
|
module Bundler
|
11
|
-
|
11
|
+
# If Bundler::Deprecate is an autoload constant, we need to define it
|
12
|
+
if defined?(Bundler::Deprecate) && !autoload?(:Deprecate)
|
12
13
|
# nothing to do!
|
13
14
|
elsif defined? ::Deprecate
|
14
15
|
Deprecate = ::Deprecate
|
@@ -123,7 +123,7 @@ module Bundler
|
|
123
123
|
@required_ruby_version = Gem::Requirement.new(v)
|
124
124
|
end
|
125
125
|
end
|
126
|
-
rescue => e
|
126
|
+
rescue StandardError => e
|
127
127
|
raise GemspecError, "There was an error parsing the metadata for the gem #{name} (#{version}): #{e.class}\n#{e}\nThe metadata was #{data.inspect}"
|
128
128
|
end
|
129
129
|
|
data/bundler/lib/bundler/env.rb
CHANGED
@@ -61,10 +61,10 @@ module Bundler
|
|
61
61
|
end
|
62
62
|
|
63
63
|
def self.read_file(filename)
|
64
|
-
|
64
|
+
Bundler.read_file(filename.to_s).strip
|
65
65
|
rescue Errno::ENOENT
|
66
66
|
"<No #{filename} found>"
|
67
|
-
rescue => e
|
67
|
+
rescue RuntimeError => e
|
68
68
|
"#{e.class}: #{e.message}"
|
69
69
|
end
|
70
70
|
|
@@ -88,7 +88,7 @@ module Bundler
|
|
88
88
|
|
89
89
|
def self.version_of(script)
|
90
90
|
return "not installed" unless Bundler.which(script)
|
91
|
-
`#{script} --version
|
91
|
+
`#{script} --version`.chomp
|
92
92
|
end
|
93
93
|
|
94
94
|
def self.chruby_version
|
@@ -110,11 +110,13 @@ module Bundler
|
|
110
110
|
out << [" Gem Path", ENV.fetch("GEM_PATH") { Gem.path.join(File::PATH_SEPARATOR) }]
|
111
111
|
out << [" User Path", Gem.user_dir]
|
112
112
|
out << [" Bin Dir", Gem.bindir]
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
113
|
+
if defined?(OpenSSL)
|
114
|
+
out << ["OpenSSL"]
|
115
|
+
out << [" Compiled", OpenSSL::OPENSSL_VERSION] if defined?(OpenSSL::OPENSSL_VERSION)
|
116
|
+
out << [" Loaded", OpenSSL::OPENSSL_LIBRARY_VERSION] if defined?(OpenSSL::OPENSSL_LIBRARY_VERSION)
|
117
|
+
out << [" Cert File", OpenSSL::X509::DEFAULT_CERT_FILE] if defined?(OpenSSL::X509::DEFAULT_CERT_FILE)
|
118
|
+
out << [" Cert Dir", OpenSSL::X509::DEFAULT_CERT_DIR] if defined?(OpenSSL::X509::DEFAULT_CERT_DIR)
|
119
|
+
end
|
118
120
|
out << ["Tools"]
|
119
121
|
out << [" Git", git_version]
|
120
122
|
out << [" RVM", ENV.fetch("rvm_version") { version_of("rvm") }]
|