rubygems-update 2.7.6 → 2.7.11
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/.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
|
@@ -96,11 +96,11 @@ module Bundler
|
|
|
96
96
|
|
|
97
97
|
uri = URI.parse("#{remote_uri}#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}.rz")
|
|
98
98
|
if uri.scheme == "file"
|
|
99
|
-
Bundler.load_marshal
|
|
99
|
+
Bundler.load_marshal Bundler.rubygems.inflate(Gem.read_binary(uri.path))
|
|
100
100
|
elsif cached_spec_path = gemspec_cached_path(spec_file_name)
|
|
101
101
|
Bundler.load_gemspec(cached_spec_path)
|
|
102
102
|
else
|
|
103
|
-
Bundler.load_marshal
|
|
103
|
+
Bundler.load_marshal Bundler.rubygems.inflate(downloader.fetch(uri).body)
|
|
104
104
|
end
|
|
105
105
|
rescue MarshalError
|
|
106
106
|
raise HTTPError, "Gemspec #{spec} contained invalid data.\n" \
|
|
@@ -178,7 +178,7 @@ module Bundler
|
|
|
178
178
|
# engine_version raises on unknown engines
|
|
179
179
|
engine_version = begin
|
|
180
180
|
ruby.engine_versions
|
|
181
|
-
rescue
|
|
181
|
+
rescue RuntimeError
|
|
182
182
|
"???"
|
|
183
183
|
end
|
|
184
184
|
agent << " #{ruby.engine}/#{ruby.versions_string(engine_version)}"
|
|
@@ -11,10 +11,10 @@ module Bundler
|
|
|
11
11
|
@redirect_limit = redirect_limit
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
-
def fetch(uri,
|
|
14
|
+
def fetch(uri, headers = {}, counter = 0)
|
|
15
15
|
raise HTTPError, "Too many redirects" if counter >= redirect_limit
|
|
16
16
|
|
|
17
|
-
response = request(uri,
|
|
17
|
+
response = request(uri, headers)
|
|
18
18
|
Bundler.ui.debug("HTTP #{response.code} #{response.message} #{uri}")
|
|
19
19
|
|
|
20
20
|
case response
|
|
@@ -26,7 +26,12 @@ module Bundler
|
|
|
26
26
|
new_uri.user = uri.user
|
|
27
27
|
new_uri.password = uri.password
|
|
28
28
|
end
|
|
29
|
-
fetch(new_uri,
|
|
29
|
+
fetch(new_uri, headers, counter + 1)
|
|
30
|
+
when Net::HTTPRequestedRangeNotSatisfiable
|
|
31
|
+
new_headers = headers.dup
|
|
32
|
+
new_headers.delete("Range")
|
|
33
|
+
new_headers["Accept-Encoding"] = "gzip"
|
|
34
|
+
fetch(uri, new_headers)
|
|
30
35
|
when Net::HTTPRequestEntityTooLarge
|
|
31
36
|
raise FallbackError, response.body
|
|
32
37
|
when Net::HTTPUnauthorized
|
|
@@ -38,11 +43,11 @@ module Bundler
|
|
|
38
43
|
end
|
|
39
44
|
end
|
|
40
45
|
|
|
41
|
-
def request(uri,
|
|
46
|
+
def request(uri, headers)
|
|
42
47
|
validate_uri_scheme!(uri)
|
|
43
48
|
|
|
44
49
|
Bundler.ui.debug "HTTP GET #{uri}"
|
|
45
|
-
req = Net::HTTP::Get.new uri.request_uri,
|
|
50
|
+
req = Net::HTTP::Get.new uri.request_uri, headers
|
|
46
51
|
if uri.user
|
|
47
52
|
user = CGI.unescape(uri.user)
|
|
48
53
|
password = uri.password ? CGI.unescape(uri.password) : nil
|
|
@@ -29,11 +29,11 @@ module Bundler
|
|
|
29
29
|
|
|
30
30
|
uri = URI.parse("#{remote_uri}#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}.rz")
|
|
31
31
|
if uri.scheme == "file"
|
|
32
|
-
Bundler.load_marshal
|
|
32
|
+
Bundler.load_marshal Bundler.rubygems.inflate(Gem.read_binary(uri.path))
|
|
33
33
|
elsif cached_spec_path = gemspec_cached_path(spec_file_name)
|
|
34
34
|
Bundler.load_gemspec(cached_spec_path)
|
|
35
35
|
else
|
|
36
|
-
Bundler.load_marshal
|
|
36
|
+
Bundler.load_marshal Bundler.rubygems.inflate(downloader.fetch(uri).body)
|
|
37
37
|
end
|
|
38
38
|
rescue MarshalError
|
|
39
39
|
raise HTTPError, "Gemspec #{spec} contained invalid data.\n" \
|
|
@@ -45,6 +45,8 @@ module Bundler
|
|
|
45
45
|
"Alternatively, you can increase the amount of memory the JVM is able to use by running Bundler with jruby -J-Xmx1024m -S bundle (JRuby defaults to 500MB)."
|
|
46
46
|
else request_issue_report_for(error)
|
|
47
47
|
end
|
|
48
|
+
rescue
|
|
49
|
+
raise error
|
|
48
50
|
end
|
|
49
51
|
|
|
50
52
|
def exit_status(error)
|
|
@@ -153,7 +153,7 @@ module Bundler
|
|
|
153
153
|
sh "git tag -m \"Version #{version}\" #{version_tag}"
|
|
154
154
|
Bundler.ui.confirm "Tagged #{version_tag}."
|
|
155
155
|
yield if block_given?
|
|
156
|
-
rescue
|
|
156
|
+
rescue RuntimeError
|
|
157
157
|
Bundler.ui.error "Untagging #{version_tag} due to error."
|
|
158
158
|
sh_with_code "git tag -d #{version_tag}"
|
|
159
159
|
raise
|
|
@@ -22,6 +22,8 @@ module Bundler
|
|
|
22
22
|
# existing in the referenced source.
|
|
23
23
|
attr_accessor :strict
|
|
24
24
|
|
|
25
|
+
attr_accessor :prerelease_specified
|
|
26
|
+
|
|
25
27
|
# Given a list of locked_specs and a list of gems to unlock creates a
|
|
26
28
|
# GemVersionPromoter instance.
|
|
27
29
|
#
|
|
@@ -37,6 +39,7 @@ module Bundler
|
|
|
37
39
|
@locked_specs = locked_specs
|
|
38
40
|
@unlock_gems = unlock_gems
|
|
39
41
|
@sort_versions = {}
|
|
42
|
+
@prerelease_specified = {}
|
|
40
43
|
end
|
|
41
44
|
|
|
42
45
|
# @param value [Symbol] One of three Symbols: :major, :minor or :patch.
|
|
@@ -121,6 +124,15 @@ module Bundler
|
|
|
121
124
|
result = spec_groups.sort do |a, b|
|
|
122
125
|
@a_ver = a.version
|
|
123
126
|
@b_ver = b.version
|
|
127
|
+
|
|
128
|
+
unless @prerelease_specified[@gem_name]
|
|
129
|
+
a_pre = @a_ver.prerelease?
|
|
130
|
+
b_pre = @b_ver.prerelease?
|
|
131
|
+
|
|
132
|
+
next -1 if a_pre && !b_pre
|
|
133
|
+
next 1 if b_pre && !a_pre
|
|
134
|
+
end
|
|
135
|
+
|
|
124
136
|
if major?
|
|
125
137
|
@a_ver <=> @b_ver
|
|
126
138
|
elsif either_version_older_than_locked
|
|
@@ -12,8 +12,11 @@ module Bundler
|
|
|
12
12
|
@options = options
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
+
# @param [Pathname] gemfile_path The Gemfile in which to inject the new dependency.
|
|
16
|
+
# @param [Pathname] lockfile_path The lockfile in which to inject the new dependency.
|
|
17
|
+
# @return [Array]
|
|
15
18
|
def inject(gemfile_path, lockfile_path)
|
|
16
|
-
if Bundler.
|
|
19
|
+
if Bundler.frozen_bundle?
|
|
17
20
|
# ensure the lock and Gemfile are synced
|
|
18
21
|
Bundler.definition.ensure_equivalent_gemfile_and_lockfile(true)
|
|
19
22
|
end
|
|
@@ -72,7 +75,7 @@ module Bundler
|
|
|
72
75
|
end
|
|
73
76
|
|
|
74
77
|
if d.groups != Array(:default)
|
|
75
|
-
group = d.groups.size == 1 ? ", :group => #{d.groups.inspect}" : ", :groups => #{d.groups.inspect}"
|
|
78
|
+
group = d.groups.size == 1 ? ", :group => #{d.groups.first.inspect}" : ", :groups => #{d.groups.inspect}"
|
|
76
79
|
end
|
|
77
80
|
|
|
78
81
|
source = ", :source => \"#{d.source}\"" unless d.source.nil?
|
|
@@ -84,9 +87,6 @@ module Bundler
|
|
|
84
87
|
def append_to(gemfile_path, new_gem_lines)
|
|
85
88
|
gemfile_path.open("a") do |f|
|
|
86
89
|
f.puts
|
|
87
|
-
if @options["timestamp"] || @options["timestamp"].nil?
|
|
88
|
-
f.puts "# Added at #{Time.now} by #{`whoami`.chomp}:"
|
|
89
|
-
end
|
|
90
90
|
f.puts new_gem_lines
|
|
91
91
|
end
|
|
92
92
|
end
|
|
@@ -70,7 +70,7 @@ module Bundler
|
|
|
70
70
|
create_bundle_path
|
|
71
71
|
|
|
72
72
|
ProcessLock.lock do
|
|
73
|
-
if Bundler.
|
|
73
|
+
if Bundler.frozen_bundle?
|
|
74
74
|
@definition.ensure_equivalent_gemfile_and_lockfile(options[:deployment])
|
|
75
75
|
end
|
|
76
76
|
|
|
@@ -90,7 +90,7 @@ module Bundler
|
|
|
90
90
|
end
|
|
91
91
|
install(options)
|
|
92
92
|
|
|
93
|
-
lock unless Bundler.
|
|
93
|
+
lock unless Bundler.frozen_bundle?
|
|
94
94
|
Standalone.new(options[:standalone], @definition).generate if options[:standalone]
|
|
95
95
|
end
|
|
96
96
|
end
|
|
@@ -135,7 +135,11 @@ module Bundler
|
|
|
135
135
|
end
|
|
136
136
|
|
|
137
137
|
File.open(binstub_path, "w", 0o777 & ~File.umask) do |f|
|
|
138
|
-
|
|
138
|
+
if RUBY_VERSION >= "2.6"
|
|
139
|
+
f.puts ERB.new(template, :trim_mode => "-").result(binding)
|
|
140
|
+
else
|
|
141
|
+
f.puts ERB.new(template, nil, "-").result(binding)
|
|
142
|
+
end
|
|
139
143
|
end
|
|
140
144
|
end
|
|
141
145
|
|
|
@@ -171,7 +175,11 @@ module Bundler
|
|
|
171
175
|
executable_path = Pathname(spec.full_gem_path).join(spec.bindir, executable).relative_path_from(bin_path)
|
|
172
176
|
executable_path = executable_path
|
|
173
177
|
File.open "#{bin_path}/#{executable}", "w", 0o755 do |f|
|
|
174
|
-
|
|
178
|
+
if RUBY_VERSION >= "2.6"
|
|
179
|
+
f.puts ERB.new(template, :trim_mode => "-").result(binding)
|
|
180
|
+
else
|
|
181
|
+
f.puts ERB.new(template, nil, "-").result(binding)
|
|
182
|
+
end
|
|
175
183
|
end
|
|
176
184
|
end
|
|
177
185
|
end
|
|
@@ -21,7 +21,7 @@ module Bundler
|
|
|
21
21
|
raise
|
|
22
22
|
rescue Errno::ENOSPC
|
|
23
23
|
return false, out_of_space_message
|
|
24
|
-
rescue => e
|
|
24
|
+
rescue StandardError => e
|
|
25
25
|
return false, specific_failure_message(e)
|
|
26
26
|
end
|
|
27
27
|
|
|
@@ -44,7 +44,14 @@ module Bundler
|
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
def gem_install_message
|
|
47
|
-
|
|
47
|
+
source = spec.source
|
|
48
|
+
return unless source.respond_to?(:remotes)
|
|
49
|
+
|
|
50
|
+
if source.remotes.size == 1
|
|
51
|
+
"Make sure that `gem install #{spec.name} -v '#{spec.version}' --source '#{source.remotes.first}'` succeeds before bundling."
|
|
52
|
+
else
|
|
53
|
+
"Make sure that `gem install #{spec.name} -v '#{spec.version}'` succeeds before bundling."
|
|
54
|
+
end
|
|
48
55
|
end
|
|
49
56
|
|
|
50
57
|
def spec_settings
|
|
@@ -80,7 +80,7 @@ module Bundler
|
|
|
80
80
|
"To use the platform-specific version of the gem, run `bundle config specific_platform true` and install again."
|
|
81
81
|
search = source.specs.search(self).last
|
|
82
82
|
end
|
|
83
|
-
search.dependencies = dependencies if search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification)
|
|
83
|
+
search.dependencies = dependencies if search && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification))
|
|
84
84
|
search
|
|
85
85
|
end
|
|
86
86
|
end
|
|
@@ -152,7 +152,7 @@ module Bundler
|
|
|
152
152
|
socket.connect_nonblock(address)
|
|
153
153
|
rescue Errno::EINPROGRESS
|
|
154
154
|
wait_for_writtable_socket(socket, address, timeout)
|
|
155
|
-
rescue # Connection failed somehow, again
|
|
155
|
+
rescue RuntimeError # Connection failed somehow, again
|
|
156
156
|
false
|
|
157
157
|
end
|
|
158
158
|
end
|
|
@@ -172,7 +172,7 @@ module Bundler
|
|
|
172
172
|
socket.connect_nonblock(address)
|
|
173
173
|
rescue Errno::EISCONN
|
|
174
174
|
true
|
|
175
|
-
rescue # Connection failed
|
|
175
|
+
rescue StandardError # Connection failed
|
|
176
176
|
false
|
|
177
177
|
end
|
|
178
178
|
end
|
|
@@ -66,7 +66,7 @@ module Bundler
|
|
|
66
66
|
installed_specs = Installer.new.install_definition(definition)
|
|
67
67
|
|
|
68
68
|
save_plugins plugins, installed_specs, builder.inferred_plugins
|
|
69
|
-
rescue => e
|
|
69
|
+
rescue RuntimeError => e
|
|
70
70
|
unless e.is_a?(GemfileError)
|
|
71
71
|
Bundler.ui.error "Failed to install plugin: #{e.message}\n #{e.backtrace[0]}"
|
|
72
72
|
end
|
|
@@ -264,7 +264,7 @@ module Bundler
|
|
|
264
264
|
load path.join(PLUGIN_FILE_NAME)
|
|
265
265
|
|
|
266
266
|
@loaded_plugin_names << name
|
|
267
|
-
rescue => e
|
|
267
|
+
rescue RuntimeError => e
|
|
268
268
|
Bundler.ui.error "Failed loading plugin #{name}: #{e.message}"
|
|
269
269
|
raise
|
|
270
270
|
end
|
|
@@ -29,7 +29,12 @@ module Bundler
|
|
|
29
29
|
@hooks = {}
|
|
30
30
|
@load_paths = {}
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
begin
|
|
33
|
+
load_index(global_index_file, true)
|
|
34
|
+
rescue GenericSystemCallError
|
|
35
|
+
# no need to fail when on a read-only FS, for example
|
|
36
|
+
nil
|
|
37
|
+
end
|
|
33
38
|
load_index(local_index_file) if SharedHelpers.in_bundle?
|
|
34
39
|
end
|
|
35
40
|
|
|
@@ -58,7 +63,7 @@ module Bundler
|
|
|
58
63
|
@plugin_paths[name] = path
|
|
59
64
|
@load_paths[name] = load_paths
|
|
60
65
|
save_index
|
|
61
|
-
rescue
|
|
66
|
+
rescue StandardError
|
|
62
67
|
@commands = old_commands
|
|
63
68
|
raise
|
|
64
69
|
end
|
|
@@ -12,7 +12,7 @@ module Bundler
|
|
|
12
12
|
yield
|
|
13
13
|
f.flock(File::LOCK_UN)
|
|
14
14
|
end
|
|
15
|
-
rescue Errno::EACCES, Errno::ENOLCK
|
|
15
|
+
rescue Errno::EACCES, Errno::ENOLCK, *[SharedHelpers.const_get_safely(:ENOTSUP, Errno)].compact
|
|
16
16
|
# In the case the user does not have access to
|
|
17
17
|
# create the lock file or is using NFS where
|
|
18
18
|
# locks are not available we skip locking.
|
|
@@ -39,10 +39,11 @@ module Bundler
|
|
|
39
39
|
@gem_version_promoter = gem_version_promoter
|
|
40
40
|
@allow_bundler_dependency_conflicts = Bundler.feature_flag.allow_bundler_dependency_conflicts?
|
|
41
41
|
@lockfile_uses_separate_rubygems_sources = Bundler.feature_flag.lockfile_uses_separate_rubygems_sources?
|
|
42
|
+
@use_gvp = !@gem_version_promoter.major?
|
|
42
43
|
end
|
|
43
44
|
|
|
44
45
|
def start(requirements)
|
|
45
|
-
@prerelease_specified = {}
|
|
46
|
+
@gem_version_promoter.prerelease_specified = @prerelease_specified = {}
|
|
46
47
|
requirements.each {|dep| @prerelease_specified[dep.name] ||= dep.prerelease? }
|
|
47
48
|
|
|
48
49
|
verify_gemfile_dependencies_are_found!(requirements)
|
|
@@ -104,16 +105,17 @@ module Bundler
|
|
|
104
105
|
index = index_for(dependency)
|
|
105
106
|
results = index.search(dependency, @base[dependency.name])
|
|
106
107
|
|
|
107
|
-
|
|
108
|
+
if vertex = @base_dg.vertex_named(dependency.name)
|
|
109
|
+
locked_requirement = vertex.payload.requirement
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
if !@prerelease_specified[dependency.name] && (!@use_gvp || locked_requirement.nil?)
|
|
108
113
|
# Move prereleases to the beginning of the list, so they're considered
|
|
109
114
|
# last during resolution.
|
|
110
115
|
pre, results = results.partition {|spec| spec.version.prerelease? }
|
|
111
116
|
results = pre + results
|
|
112
117
|
end
|
|
113
118
|
|
|
114
|
-
if vertex = @base_dg.vertex_named(dependency.name)
|
|
115
|
-
locked_requirement = vertex.payload.requirement
|
|
116
|
-
end
|
|
117
119
|
spec_groups = if results.any?
|
|
118
120
|
nested = []
|
|
119
121
|
results.each do |spec|
|
|
@@ -179,10 +181,6 @@ module Bundler
|
|
|
179
181
|
|
|
180
182
|
def requirement_satisfied_by?(requirement, activated, spec)
|
|
181
183
|
return false unless requirement.matches_spec?(spec) || spec.source.is_a?(Source::Gemspec)
|
|
182
|
-
if spec.version.prerelease? && !requirement.prerelease? && search_for(requirement).any? {|sg| !sg.version.prerelease? }
|
|
183
|
-
vertex = activated.vertex_named(spec.name)
|
|
184
|
-
return false if vertex.requirements.none?(&:prerelease?)
|
|
185
|
-
end
|
|
186
184
|
spec.activate_platform!(requirement.__platform) if !@platforms || @platforms.include?(requirement.__platform)
|
|
187
185
|
true
|
|
188
186
|
end
|
|
@@ -306,6 +304,9 @@ module Bundler
|
|
|
306
304
|
:solver_name => "Bundler",
|
|
307
305
|
:possibility_type => "gem",
|
|
308
306
|
:reduce_trees => lambda do |trees|
|
|
307
|
+
# called first, because we want to reduce the amount of work required to find maximal empty sets
|
|
308
|
+
trees = trees.uniq {|t| t.flatten.map {|dep| [dep.name, dep.requirement] } }
|
|
309
|
+
|
|
309
310
|
# bail out if tree size is too big for Array#combination to make any sense
|
|
310
311
|
return trees if trees.size > 15
|
|
311
312
|
maximal = 1.upto(trees.size).map do |size|
|
|
@@ -14,7 +14,6 @@ module Bundler
|
|
|
14
14
|
@version = exemplary_spec.version
|
|
15
15
|
@source = exemplary_spec.source
|
|
16
16
|
|
|
17
|
-
@required_by = []
|
|
18
17
|
@activated_platforms = []
|
|
19
18
|
@dependencies = nil
|
|
20
19
|
@specs = Hash.new do |specs, platform|
|
|
@@ -55,10 +54,6 @@ module Bundler
|
|
|
55
54
|
dependencies.concat(metadata_dependencies).flatten
|
|
56
55
|
end
|
|
57
56
|
|
|
58
|
-
def platforms_for_dependency_named(dependency)
|
|
59
|
-
__dependencies.select {|_, deps| deps.map(&:name).include? dependency }.keys
|
|
60
|
-
end
|
|
61
|
-
|
|
62
57
|
def ==(other)
|
|
63
58
|
return unless other.is_a?(SpecGroup)
|
|
64
59
|
name == other.name &&
|
|
@@ -132,7 +132,11 @@ module Bundler
|
|
|
132
132
|
end
|
|
133
133
|
|
|
134
134
|
def inflate(obj)
|
|
135
|
-
Gem
|
|
135
|
+
if defined?(Gem::Util)
|
|
136
|
+
Gem::Util.inflate(obj)
|
|
137
|
+
else
|
|
138
|
+
Gem.inflate(obj)
|
|
139
|
+
end
|
|
136
140
|
end
|
|
137
141
|
|
|
138
142
|
def sources=(val)
|
|
@@ -570,8 +574,10 @@ module Bundler
|
|
|
570
574
|
@replaced_methods.each do |(sym, klass), method|
|
|
571
575
|
redefine_method(klass, sym, method)
|
|
572
576
|
end
|
|
573
|
-
|
|
574
|
-
proc.binding.
|
|
577
|
+
if Binding.public_method_defined?(:source_location)
|
|
578
|
+
post_reset_hooks.reject! {|proc| proc.binding.source_location[0] == __FILE__ }
|
|
579
|
+
else
|
|
580
|
+
post_reset_hooks.reject! {|proc| proc.binding.eval("__FILE__") == __FILE__ }
|
|
575
581
|
end
|
|
576
582
|
@replaced_methods.clear
|
|
577
583
|
end
|
|
@@ -10,7 +10,7 @@ module Bundler
|
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
def setup(*groups)
|
|
13
|
-
@definition.ensure_equivalent_gemfile_and_lockfile if Bundler.
|
|
13
|
+
@definition.ensure_equivalent_gemfile_and_lockfile if Bundler.frozen_bundle?
|
|
14
14
|
|
|
15
15
|
groups.map!(&:to_sym)
|
|
16
16
|
|
|
@@ -79,7 +79,7 @@ module Bundler
|
|
|
79
79
|
required_file = file
|
|
80
80
|
begin
|
|
81
81
|
Kernel.require file
|
|
82
|
-
rescue => e
|
|
82
|
+
rescue RuntimeError => e
|
|
83
83
|
raise e if e.is_a?(LoadError) # we handle this a little later
|
|
84
84
|
raise Bundler::GemRequireError.new e,
|
|
85
85
|
"There was an error while trying to load the gem '#{file}'."
|