bundler 2.2.11 → 2.3.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +721 -5
- data/README.md +1 -1
- data/bundler.gemspec +8 -11
- data/exe/bundle +7 -8
- data/exe/bundler +1 -1
- data/lib/bundler/.document +1 -0
- data/lib/bundler/build_metadata.rb +3 -3
- data/lib/bundler/cli/cache.rb +1 -1
- data/lib/bundler/cli/check.rb +4 -2
- data/lib/bundler/cli/common.rb +17 -3
- data/lib/bundler/cli/config.rb +10 -1
- data/lib/bundler/cli/doctor.rb +24 -5
- data/lib/bundler/cli/exec.rb +1 -6
- data/lib/bundler/cli/gem.rb +130 -26
- data/lib/bundler/cli/info.rb +27 -6
- data/lib/bundler/cli/init.rb +5 -1
- data/lib/bundler/cli/install.rb +23 -54
- data/lib/bundler/cli/issue.rb +4 -3
- data/lib/bundler/cli/list.rb +7 -1
- data/lib/bundler/cli/lock.rb +5 -1
- data/lib/bundler/cli/open.rb +1 -2
- data/lib/bundler/cli/outdated.rb +22 -14
- data/lib/bundler/cli/platform.rb +2 -2
- data/lib/bundler/cli/remove.rb +1 -2
- data/lib/bundler/cli/show.rb +1 -1
- data/lib/bundler/cli/update.rb +17 -8
- data/lib/bundler/cli.rb +51 -63
- data/lib/bundler/compact_index_client/cache.rb +0 -9
- data/lib/bundler/compact_index_client/updater.rb +26 -14
- data/lib/bundler/compact_index_client.rb +2 -8
- data/lib/bundler/current_ruby.rb +17 -6
- data/lib/bundler/definition.rb +260 -362
- data/lib/bundler/dependency.rb +23 -71
- data/lib/bundler/digest.rb +71 -0
- data/lib/bundler/dsl.rb +72 -76
- data/lib/bundler/endpoint_specification.rb +19 -13
- data/lib/bundler/env.rb +1 -1
- data/lib/bundler/environment_preserver.rb +4 -1
- data/lib/bundler/errors.rb +29 -3
- data/lib/bundler/feature_flag.rb +0 -5
- data/lib/bundler/fetcher/base.rb +6 -8
- data/lib/bundler/fetcher/compact_index.rb +10 -15
- data/lib/bundler/fetcher/downloader.rb +9 -6
- data/lib/bundler/fetcher/index.rb +0 -27
- data/lib/bundler/fetcher.rb +22 -23
- data/lib/bundler/friendly_errors.rb +26 -36
- data/lib/bundler/gem_helper.rb +21 -16
- data/lib/bundler/gem_helpers.rb +9 -2
- data/lib/bundler/gem_version_promoter.rb +14 -25
- data/lib/bundler/index.rb +11 -46
- data/lib/bundler/injector.rb +18 -4
- data/lib/bundler/inline.rb +4 -13
- data/lib/bundler/installer/gem_installer.rb +16 -21
- data/lib/bundler/installer/parallel_installer.rb +36 -15
- data/lib/bundler/installer/standalone.rb +42 -10
- data/lib/bundler/installer.rb +25 -41
- data/lib/bundler/lazy_specification.rb +52 -30
- data/lib/bundler/lockfile_generator.rb +2 -2
- data/lib/bundler/lockfile_parser.rb +18 -43
- data/lib/bundler/man/bundle-add.1 +21 -5
- data/lib/bundler/man/bundle-add.1.ronn +16 -4
- data/lib/bundler/man/bundle-binstubs.1 +1 -1
- data/lib/bundler/man/bundle-cache.1 +7 -1
- data/lib/bundler/man/bundle-cache.1.ronn +7 -0
- data/lib/bundler/man/bundle-check.1 +1 -1
- data/lib/bundler/man/bundle-clean.1 +2 -2
- data/lib/bundler/man/bundle-clean.1.ronn +1 -1
- data/lib/bundler/man/bundle-config.1 +49 -22
- data/lib/bundler/man/bundle-config.1.ronn +49 -30
- data/lib/bundler/man/bundle-console.1 +53 -0
- data/lib/bundler/man/bundle-console.1.ronn +44 -0
- data/lib/bundler/man/bundle-doctor.1 +1 -1
- data/lib/bundler/man/bundle-exec.1 +2 -2
- data/lib/bundler/man/bundle-exec.1.ronn +1 -1
- data/lib/bundler/man/bundle-gem.1 +14 -1
- data/lib/bundler/man/bundle-gem.1.ronn +16 -0
- data/lib/bundler/man/bundle-help.1 +13 -0
- data/lib/bundler/man/bundle-help.1.ronn +12 -0
- data/lib/bundler/man/bundle-info.1 +1 -1
- data/lib/bundler/man/bundle-init.1 +1 -1
- data/lib/bundler/man/bundle-inject.1 +5 -2
- data/lib/bundler/man/bundle-inject.1.ronn +3 -1
- data/lib/bundler/man/bundle-install.1 +6 -2
- data/lib/bundler/man/bundle-install.1.ronn +8 -2
- data/lib/bundler/man/bundle-list.1 +1 -1
- data/lib/bundler/man/bundle-lock.1 +1 -1
- data/lib/bundler/man/bundle-open.1 +1 -1
- data/lib/bundler/man/bundle-outdated.1 +3 -10
- data/lib/bundler/man/bundle-outdated.1.ronn +1 -10
- data/lib/bundler/man/bundle-platform.1 +16 -6
- data/lib/bundler/man/bundle-platform.1.ronn +14 -7
- data/lib/bundler/man/bundle-plugin.1 +81 -0
- data/lib/bundler/man/bundle-plugin.1.ronn +59 -0
- data/lib/bundler/man/bundle-pristine.1 +1 -1
- data/lib/bundler/man/bundle-remove.1 +1 -1
- data/lib/bundler/man/bundle-show.1 +1 -1
- data/lib/bundler/man/bundle-update.1 +5 -5
- data/lib/bundler/man/bundle-update.1.ronn +5 -4
- data/lib/bundler/man/bundle-version.1 +35 -0
- data/lib/bundler/man/bundle-version.1.ronn +24 -0
- data/lib/bundler/man/bundle-viz.1 +4 -1
- data/lib/bundler/man/bundle-viz.1.ronn +2 -0
- data/lib/bundler/man/bundle.1 +15 -10
- data/lib/bundler/man/bundle.1.ronn +12 -7
- data/lib/bundler/man/gemfile.5 +117 -80
- data/lib/bundler/man/gemfile.5.ronn +105 -84
- data/lib/bundler/man/index.txt +4 -0
- data/lib/bundler/match_metadata.rb +13 -0
- data/lib/bundler/match_platform.rb +0 -1
- data/lib/bundler/match_remote_metadata.rb +29 -0
- data/lib/bundler/plugin/api/source.rb +24 -8
- data/lib/bundler/plugin/index.rb +4 -1
- data/lib/bundler/plugin/installer/git.rb +0 -4
- data/lib/bundler/plugin/installer/rubygems.rb +0 -4
- data/lib/bundler/plugin/installer.rb +10 -10
- data/lib/bundler/plugin/source_list.rb +4 -0
- data/lib/bundler/plugin.rb +30 -8
- data/lib/bundler/process_lock.rb +1 -1
- data/lib/bundler/remote_specification.rb +10 -4
- data/lib/bundler/resolver/base.rb +50 -0
- data/lib/bundler/resolver/spec_group.rb +31 -73
- data/lib/bundler/resolver.rb +193 -292
- data/lib/bundler/retry.rb +1 -1
- data/lib/bundler/ruby_dsl.rb +1 -1
- data/lib/bundler/ruby_version.rb +5 -18
- data/lib/bundler/rubygems_ext.rb +160 -26
- data/lib/bundler/rubygems_gem_installer.rb +86 -9
- data/lib/bundler/rubygems_integration.rb +46 -93
- data/lib/bundler/runtime.rb +18 -12
- data/lib/bundler/self_manager.rb +168 -0
- data/lib/bundler/settings.rb +98 -22
- data/lib/bundler/setup.rb +2 -2
- data/lib/bundler/shared_helpers.rb +15 -31
- data/lib/bundler/source/git/git_proxy.rb +8 -6
- data/lib/bundler/source/git.rb +29 -13
- data/lib/bundler/source/metadata.rb +3 -7
- data/lib/bundler/source/path/installer.rb +1 -1
- data/lib/bundler/source/path.rb +3 -1
- data/lib/bundler/source/rubygems.rb +199 -182
- data/lib/bundler/source/rubygems_aggregate.rb +68 -0
- data/lib/bundler/source.rb +24 -4
- data/lib/bundler/source_list.rb +104 -60
- data/lib/bundler/source_map.rb +71 -0
- data/lib/bundler/spec_set.rb +58 -52
- data/lib/bundler/stub_specification.rb +13 -3
- data/lib/bundler/templates/Executable +2 -4
- data/lib/bundler/templates/Executable.bundler +8 -8
- data/lib/bundler/templates/Executable.standalone +2 -4
- data/lib/bundler/templates/Gemfile +0 -2
- data/lib/bundler/templates/gems.rb +0 -3
- data/lib/bundler/templates/newgem/Gemfile.tt +5 -2
- data/lib/bundler/templates/newgem/README.md.tt +8 -12
- data/lib/bundler/templates/newgem/Rakefile.tt +15 -2
- data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +16 -7
- data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +5 -4
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +19 -17
- data/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
- data/lib/bundler/templates/newgem/standard.yml.tt +3 -0
- data/lib/bundler/templates/newgem/test/minitest/{newgem_test.rb.tt → test_newgem.rb.tt} +1 -1
- data/lib/bundler/ui/shell.rb +1 -1
- data/lib/bundler/vendor/.document +1 -0
- data/lib/bundler/vendor/connection_pool/LICENSE +20 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +19 -21
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +57 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +39 -74
- data/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
- data/lib/bundler/vendor/molinillo/LICENSE +9 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +3 -3
- data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +32 -26
- data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +1 -1
- data/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
- data/lib/bundler/vendor/thor/LICENSE.md +20 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +5 -5
- data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +1 -2
- data/lib/bundler/vendor/thor/lib/thor/actions.rb +6 -2
- data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +6 -0
- data/lib/bundler/vendor/thor/lib/thor/error.rb +9 -4
- data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +19 -1
- data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +22 -4
- data/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +1 -1
- data/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
- data/lib/bundler/vendor/tsort/lib/tsort.rb +452 -0
- data/lib/bundler/vendor/uri/LICENSE.txt +22 -0
- data/lib/bundler/vendor/uri/lib/uri/common.rb +17 -80
- data/lib/bundler/vendor/uri/lib/uri/ftp.rb +0 -1
- data/lib/bundler/vendor/uri/lib/uri/generic.rb +5 -6
- data/lib/bundler/vendor/uri/lib/uri/http.rb +0 -1
- data/lib/bundler/vendor/uri/lib/uri/https.rb +0 -1
- data/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
- data/lib/bundler/vendor/uri/lib/uri/mailto.rb +0 -1
- data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +1 -14
- data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +1 -12
- data/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- data/lib/bundler/vendor/uri/lib/uri/ws.rb +84 -0
- data/lib/bundler/vendor/uri/lib/uri/wss.rb +22 -0
- data/lib/bundler/vendor/uri/lib/uri.rb +0 -1
- data/lib/bundler/vendored_tsort.rb +4 -0
- data/lib/bundler/version.rb +1 -1
- data/lib/bundler/worker.rb +19 -4
- data/lib/bundler.rb +46 -39
- metadata +39 -12
- data/lib/bundler/dep_proxy.rb +0 -55
- data/lib/bundler/gemdeps.rb +0 -29
- data/lib/bundler/psyched_yaml.rb +0 -22
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +0 -66
data/lib/bundler/plugin.rb
CHANGED
|
@@ -13,6 +13,7 @@ module Bundler
|
|
|
13
13
|
class MalformattedPlugin < PluginError; end
|
|
14
14
|
class UndefinedCommandError < PluginError; end
|
|
15
15
|
class UnknownSourceError < PluginError; end
|
|
16
|
+
class PluginInstallError < PluginError; end
|
|
16
17
|
|
|
17
18
|
PLUGIN_FILE_NAME = "plugins.rb".freeze
|
|
18
19
|
|
|
@@ -35,15 +36,16 @@ module Bundler
|
|
|
35
36
|
# @param [Hash] options various parameters as described in description.
|
|
36
37
|
# Refer to cli/plugin for available options
|
|
37
38
|
def install(names, options)
|
|
39
|
+
raise InvalidOption, "You cannot specify `--branch` and `--ref` at the same time." if options["branch"] && options["ref"]
|
|
40
|
+
|
|
38
41
|
specs = Installer.new.install(names, options)
|
|
39
42
|
|
|
40
43
|
save_plugins names, specs
|
|
41
|
-
rescue PluginError
|
|
44
|
+
rescue PluginError
|
|
42
45
|
specs_to_delete = specs.select {|k, _v| names.include?(k) && !index.commands.values.include?(k) }
|
|
43
46
|
specs_to_delete.each_value {|spec| Bundler.rm_rf(spec.full_gem_path) }
|
|
44
47
|
|
|
45
|
-
|
|
46
|
-
Bundler.ui.error "Failed to install the following plugins: #{names_list}. The underlying error was: #{e.message}.\n #{e.backtrace.join("\n ")}"
|
|
48
|
+
raise
|
|
47
49
|
end
|
|
48
50
|
|
|
49
51
|
# Uninstalls plugins by the given names
|
|
@@ -105,6 +107,7 @@ module Bundler
|
|
|
105
107
|
else
|
|
106
108
|
builder.eval_gemfile(gemfile)
|
|
107
109
|
end
|
|
110
|
+
builder.check_primary_source_safety
|
|
108
111
|
definition = builder.to_definition(nil, true)
|
|
109
112
|
|
|
110
113
|
return if definition.dependencies.empty?
|
|
@@ -163,7 +166,7 @@ module Bundler
|
|
|
163
166
|
end
|
|
164
167
|
|
|
165
168
|
# To be called from Cli class to pass the command and argument to
|
|
166
|
-
#
|
|
169
|
+
# appropriate plugin class
|
|
167
170
|
def exec_command(command, args)
|
|
168
171
|
raise UndefinedCommandError, "Command `#{command}` not found" unless command? command
|
|
169
172
|
|
|
@@ -182,7 +185,7 @@ module Bundler
|
|
|
182
185
|
!index.source_plugin(name.to_s).nil?
|
|
183
186
|
end
|
|
184
187
|
|
|
185
|
-
# @return [Class] that handles the source. The
|
|
188
|
+
# @return [Class] that handles the source. The class includes API::Source
|
|
186
189
|
def source(name)
|
|
187
190
|
raise UnknownSourceError, "Source #{name} not found" unless source? name
|
|
188
191
|
|
|
@@ -244,10 +247,11 @@ module Bundler
|
|
|
244
247
|
# @param [Array<String>] names of inferred source plugins that can be ignored
|
|
245
248
|
def save_plugins(plugins, specs, optional_plugins = [])
|
|
246
249
|
plugins.each do |name|
|
|
250
|
+
next if index.installed?(name)
|
|
251
|
+
|
|
247
252
|
spec = specs[name]
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
Bundler.ui.info "Installed plugin #{name}" if installed
|
|
253
|
+
|
|
254
|
+
save_plugin(name, spec, optional_plugins.include?(name))
|
|
251
255
|
end
|
|
252
256
|
end
|
|
253
257
|
|
|
@@ -262,6 +266,22 @@ module Bundler
|
|
|
262
266
|
raise MalformattedPlugin, "#{PLUGIN_FILE_NAME} was not found in the plugin." unless plugin_file.file?
|
|
263
267
|
end
|
|
264
268
|
|
|
269
|
+
# Validates and registers a plugin.
|
|
270
|
+
#
|
|
271
|
+
# @param [String] name the name of the plugin
|
|
272
|
+
# @param [Specification] spec of installed plugin
|
|
273
|
+
# @param [Boolean] optional_plugin, removed if there is conflict with any
|
|
274
|
+
# other plugin (used for default source plugins)
|
|
275
|
+
#
|
|
276
|
+
# @raise [PluginInstallError] if validation or registration raises any error
|
|
277
|
+
def save_plugin(name, spec, optional_plugin = false)
|
|
278
|
+
validate_plugin! Pathname.new(spec.full_gem_path)
|
|
279
|
+
installed = register_plugin(name, spec, optional_plugin)
|
|
280
|
+
Bundler.ui.info "Installed plugin #{name}" if installed
|
|
281
|
+
rescue PluginError => e
|
|
282
|
+
raise PluginInstallError, "Failed to install plugin `#{spec.name}`, due to #{e.class} (#{e.message})"
|
|
283
|
+
end
|
|
284
|
+
|
|
265
285
|
# Runs the plugins.rb file in an isolated namespace, records the plugin
|
|
266
286
|
# actions it registers for and then passes the data to index to be stored.
|
|
267
287
|
#
|
|
@@ -308,6 +328,8 @@ module Bundler
|
|
|
308
328
|
#
|
|
309
329
|
# @param [String] name of the plugin
|
|
310
330
|
def load_plugin(name)
|
|
331
|
+
return unless name && !name.empty?
|
|
332
|
+
|
|
311
333
|
# Need to ensure before this that plugin root where the rest of gems
|
|
312
334
|
# are installed to be on load path to support plugin deps. Currently not
|
|
313
335
|
# done to avoid conflicts
|
data/lib/bundler/process_lock.rb
CHANGED
|
@@ -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, Errno::ENOTSUP, Errno::EPERM, Errno::EROFS
|
|
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.
|
|
@@ -6,6 +6,7 @@ module Bundler
|
|
|
6
6
|
# be seeded with what we're given from the source's abbreviated index - the
|
|
7
7
|
# full specification will only be fetched when necessary.
|
|
8
8
|
class RemoteSpecification
|
|
9
|
+
include MatchRemoteMetadata
|
|
9
10
|
include MatchPlatform
|
|
10
11
|
include Comparable
|
|
11
12
|
|
|
@@ -16,7 +17,8 @@ module Bundler
|
|
|
16
17
|
def initialize(name, version, platform, spec_fetcher)
|
|
17
18
|
@name = name
|
|
18
19
|
@version = Gem::Version.create version
|
|
19
|
-
@
|
|
20
|
+
@original_platform = platform || Gem::Platform::RUBY
|
|
21
|
+
@platform = Gem::Platform.new(platform)
|
|
20
22
|
@spec_fetcher = spec_fetcher
|
|
21
23
|
@dependencies = nil
|
|
22
24
|
end
|
|
@@ -27,11 +29,15 @@ module Bundler
|
|
|
27
29
|
@platform = _remote_specification.platform
|
|
28
30
|
end
|
|
29
31
|
|
|
32
|
+
def identifier
|
|
33
|
+
@__identifier ||= [name, version, @platform.to_s]
|
|
34
|
+
end
|
|
35
|
+
|
|
30
36
|
def full_name
|
|
31
|
-
if platform == Gem::Platform::RUBY
|
|
37
|
+
if @platform == Gem::Platform::RUBY
|
|
32
38
|
"#{@name}-#{@version}"
|
|
33
39
|
else
|
|
34
|
-
"#{@name}-#{@version}-#{platform}"
|
|
40
|
+
"#{@name}-#{@version}-#{@platform}"
|
|
35
41
|
end
|
|
36
42
|
end
|
|
37
43
|
|
|
@@ -98,7 +104,7 @@ module Bundler
|
|
|
98
104
|
end
|
|
99
105
|
|
|
100
106
|
def _remote_specification
|
|
101
|
-
@_remote_specification ||= @spec_fetcher.fetch_spec([@name, @version, @
|
|
107
|
+
@_remote_specification ||= @spec_fetcher.fetch_spec([@name, @version, @original_platform])
|
|
102
108
|
@_remote_specification || raise(GemspecError, "Gemspec data for #{full_name} was" \
|
|
103
109
|
" missing from the server! Try installing with `--full-index` as a workaround.")
|
|
104
110
|
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bundler
|
|
4
|
+
class Resolver
|
|
5
|
+
class Base
|
|
6
|
+
def initialize(base, additional_base_requirements)
|
|
7
|
+
@base = base
|
|
8
|
+
@additional_base_requirements = additional_base_requirements
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def [](name)
|
|
12
|
+
@base[name]
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def delete(spec)
|
|
16
|
+
@base.delete(spec)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def base_requirements
|
|
20
|
+
@base_requirements ||= build_base_requirements
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def unlock_deps(deps)
|
|
24
|
+
exact, lower_bound = deps.partition(&:specific?)
|
|
25
|
+
|
|
26
|
+
exact.each do |exact_dep|
|
|
27
|
+
@base.delete_by_name_and_version(exact_dep.name, exact_dep.requirement.requirements.first.last)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
lower_bound.each do |lower_bound_dep|
|
|
31
|
+
@additional_base_requirements.delete(lower_bound_dep)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
@base_requirements = nil
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
private
|
|
38
|
+
|
|
39
|
+
def build_base_requirements
|
|
40
|
+
base_requirements = {}
|
|
41
|
+
@base.each do |ls|
|
|
42
|
+
dep = Dependency.new(ls.name, ls.version)
|
|
43
|
+
base_requirements[ls.name] = dep
|
|
44
|
+
end
|
|
45
|
+
@additional_base_requirements.each {|d| base_requirements[d.name] = d }
|
|
46
|
+
base_requirements
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -4,53 +4,25 @@ module Bundler
|
|
|
4
4
|
class Resolver
|
|
5
5
|
class SpecGroup
|
|
6
6
|
attr_accessor :name, :version, :source
|
|
7
|
-
attr_accessor :activated_platforms
|
|
7
|
+
attr_accessor :activated_platforms, :force_ruby_platform
|
|
8
8
|
|
|
9
|
-
def
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
def initialize(specs, relevant_platforms)
|
|
10
|
+
@exemplary_spec = specs.first
|
|
11
|
+
@name = @exemplary_spec.name
|
|
12
|
+
@version = @exemplary_spec.version
|
|
13
|
+
@source = @exemplary_spec.source
|
|
12
14
|
|
|
13
|
-
platforms = all_platforms.select {|p| specs[p].any? }
|
|
14
|
-
|
|
15
|
-
new(specific_platform_specs.first, specs, platforms)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def initialize(exemplary_spec, specs, relevant_platforms)
|
|
19
|
-
@exemplary_spec = exemplary_spec
|
|
20
|
-
@name = exemplary_spec.name
|
|
21
|
-
@version = exemplary_spec.version
|
|
22
|
-
@source = exemplary_spec.source
|
|
23
|
-
|
|
24
|
-
@all_platforms = relevant_platforms
|
|
25
15
|
@activated_platforms = relevant_platforms
|
|
26
|
-
@dependencies = Hash.new do |dependencies, platforms|
|
|
27
|
-
dependencies[platforms] = dependencies_for(platforms)
|
|
28
|
-
end
|
|
29
|
-
@partitioned_dependency_names = Hash.new do |partitioned_dependency_names, platforms|
|
|
30
|
-
partitioned_dependency_names[platforms] = partitioned_dependency_names_for(platforms)
|
|
31
|
-
end
|
|
32
16
|
@specs = specs
|
|
33
17
|
end
|
|
34
18
|
|
|
35
19
|
def to_specs
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
lazy_spec.dependencies.replace s.dependencies
|
|
43
|
-
lazy_spec
|
|
44
|
-
end
|
|
45
|
-
end.flatten.compact.uniq
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def activate_platform!(platform)
|
|
49
|
-
self.activated_platforms = [platform]
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def activate_all_platforms!
|
|
53
|
-
self.activated_platforms = @all_platforms
|
|
20
|
+
@specs.map do |s|
|
|
21
|
+
lazy_spec = LazySpecification.new(name, version, s.platform, source)
|
|
22
|
+
lazy_spec.force_ruby_platform = force_ruby_platform
|
|
23
|
+
lazy_spec.dependencies.replace s.dependencies
|
|
24
|
+
lazy_spec
|
|
25
|
+
end
|
|
54
26
|
end
|
|
55
27
|
|
|
56
28
|
def to_s
|
|
@@ -59,11 +31,9 @@ module Bundler
|
|
|
59
31
|
end
|
|
60
32
|
|
|
61
33
|
def dependencies_for_activated_platforms
|
|
62
|
-
@
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
def partitioned_dependency_names_for_activated_platforms
|
|
66
|
-
@partitioned_dependency_names[activated_platforms]
|
|
34
|
+
@dependencies_for_activated_platforms ||= @specs.map do |spec|
|
|
35
|
+
__dependencies(spec) + metadata_dependencies(spec)
|
|
36
|
+
end.flatten.uniq
|
|
67
37
|
end
|
|
68
38
|
|
|
69
39
|
def ==(other)
|
|
@@ -94,40 +64,28 @@ module Bundler
|
|
|
94
64
|
|
|
95
65
|
private
|
|
96
66
|
|
|
97
|
-
def
|
|
98
|
-
platforms.map do |platform|
|
|
99
|
-
__dependencies(platform) + metadata_dependencies(platform)
|
|
100
|
-
end.flatten
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
def partitioned_dependency_names_for(platforms)
|
|
104
|
-
return @dependencies[platforms].map(&:name), [] if platforms.size == 1
|
|
105
|
-
|
|
106
|
-
@dependencies[platforms].partition do |dep_proxy|
|
|
107
|
-
@dependencies[platforms].count {|dp| dp.dep == dep_proxy.dep } == platforms.size
|
|
108
|
-
end.map {|deps| deps.map(&:name) }
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
def __dependencies(platform)
|
|
67
|
+
def __dependencies(spec)
|
|
112
68
|
dependencies = []
|
|
113
|
-
|
|
69
|
+
spec.dependencies.each do |dep|
|
|
114
70
|
next if dep.type == :development
|
|
115
|
-
dependencies <<
|
|
71
|
+
dependencies << Dependency.new(dep.name, dep.requirement)
|
|
116
72
|
end
|
|
117
73
|
dependencies
|
|
118
74
|
end
|
|
119
75
|
|
|
120
|
-
def metadata_dependencies(
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
76
|
+
def metadata_dependencies(spec)
|
|
77
|
+
return [] if spec.is_a?(LazySpecification)
|
|
78
|
+
|
|
79
|
+
[
|
|
80
|
+
metadata_dependency("Ruby", spec.required_ruby_version),
|
|
81
|
+
metadata_dependency("RubyGems", spec.required_rubygems_version),
|
|
82
|
+
].compact
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def metadata_dependency(name, requirement)
|
|
86
|
+
return if requirement.nil? || requirement.none?
|
|
87
|
+
|
|
88
|
+
Dependency.new("#{name}\0", requirement)
|
|
131
89
|
end
|
|
132
90
|
end
|
|
133
91
|
end
|