bundler 1.13.6 → 1.17.3
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 +5 -5
- data/CHANGELOG.md +554 -9
- data/README.md +28 -5
- data/bundler.gemspec +40 -11
- data/exe/bundle +4 -8
- data/exe/bundle_ruby +4 -3
- data/lib/bundler.rb +162 -68
- data/lib/bundler/build_metadata.rb +53 -0
- data/lib/bundler/capistrano.rb +5 -0
- data/lib/bundler/cli.rb +360 -118
- data/lib/bundler/cli/add.rb +35 -0
- data/lib/bundler/cli/binstubs.rb +18 -10
- data/lib/bundler/cli/cache.rb +6 -5
- data/lib/bundler/cli/check.rb +4 -6
- data/lib/bundler/cli/clean.rb +6 -7
- data/lib/bundler/cli/common.rb +47 -1
- data/lib/bundler/cli/config.rb +26 -7
- data/lib/bundler/cli/console.rb +2 -1
- data/lib/bundler/cli/doctor.rb +63 -18
- data/lib/bundler/cli/exec.rb +12 -5
- data/lib/bundler/cli/gem.rb +59 -21
- data/lib/bundler/cli/info.rb +50 -0
- data/lib/bundler/cli/init.rb +21 -7
- data/lib/bundler/cli/inject.rb +13 -4
- data/lib/bundler/cli/install.rb +72 -101
- data/lib/bundler/cli/issue.rb +40 -0
- data/lib/bundler/cli/list.rb +58 -0
- data/lib/bundler/cli/lock.rb +9 -6
- data/lib/bundler/cli/open.rb +4 -3
- data/lib/bundler/cli/outdated.rb +175 -60
- data/lib/bundler/cli/package.rb +9 -6
- data/lib/bundler/cli/platform.rb +2 -1
- data/lib/bundler/cli/plugin.rb +1 -0
- data/lib/bundler/cli/pristine.rb +47 -0
- data/lib/bundler/cli/remove.rb +18 -0
- data/lib/bundler/cli/show.rb +2 -2
- data/lib/bundler/cli/update.rb +44 -34
- data/lib/bundler/cli/viz.rb +5 -1
- data/lib/bundler/compact_index_client.rb +109 -0
- data/lib/bundler/compact_index_client/cache.rb +118 -0
- data/lib/bundler/compact_index_client/updater.rb +116 -0
- data/lib/bundler/compatibility_guard.rb +14 -0
- data/lib/bundler/constants.rb +1 -0
- data/lib/bundler/current_ruby.rb +17 -8
- data/lib/bundler/definition.rb +353 -182
- data/lib/bundler/dep_proxy.rb +3 -1
- data/lib/bundler/dependency.rb +22 -10
- data/lib/bundler/deployment.rb +1 -1
- data/lib/bundler/deprecate.rb +15 -3
- data/lib/bundler/dsl.rb +122 -64
- data/lib/bundler/endpoint_specification.rb +13 -3
- data/lib/bundler/env.rb +110 -38
- data/lib/bundler/environment_preserver.rb +27 -6
- data/lib/bundler/errors.rb +24 -0
- data/lib/bundler/feature_flag.rb +74 -0
- data/lib/bundler/fetcher.rb +18 -11
- data/lib/bundler/fetcher/base.rb +1 -0
- data/lib/bundler/fetcher/compact_index.rb +7 -5
- data/lib/bundler/fetcher/dependency.rb +3 -2
- data/lib/bundler/fetcher/downloader.rb +25 -7
- data/lib/bundler/fetcher/index.rb +3 -2
- data/lib/bundler/friendly_errors.rb +33 -7
- data/lib/bundler/gem_helper.rb +25 -11
- data/lib/bundler/gem_helpers.rb +70 -1
- data/lib/bundler/gem_remote_fetcher.rb +1 -0
- data/lib/bundler/gem_tasks.rb +1 -0
- data/lib/bundler/gem_version_promoter.rb +17 -2
- data/lib/bundler/gemdeps.rb +29 -0
- data/lib/bundler/graph.rb +1 -0
- data/lib/bundler/index.rb +28 -15
- data/lib/bundler/injector.rb +216 -33
- data/lib/bundler/inline.rb +12 -12
- data/lib/bundler/installer.rb +139 -53
- data/lib/bundler/installer/gem_installer.rb +15 -5
- data/lib/bundler/installer/parallel_installer.rb +113 -28
- data/lib/bundler/installer/standalone.rb +1 -0
- data/lib/bundler/lazy_specification.rb +31 -3
- data/lib/bundler/lockfile_generator.rb +95 -0
- data/lib/bundler/lockfile_parser.rb +50 -37
- data/lib/bundler/match_platform.rb +13 -3
- data/lib/bundler/mirror.rb +10 -5
- data/lib/bundler/plugin.rb +22 -8
- data/lib/bundler/plugin/api.rb +2 -1
- data/lib/bundler/plugin/api/source.rb +17 -4
- data/lib/bundler/plugin/events.rb +61 -0
- data/lib/bundler/plugin/index.rb +9 -2
- data/lib/bundler/plugin/installer.rb +7 -6
- data/lib/bundler/plugin/source_list.rb +7 -8
- data/lib/bundler/process_lock.rb +24 -0
- data/lib/bundler/psyched_yaml.rb +10 -0
- data/lib/bundler/remote_specification.rb +30 -1
- data/lib/bundler/resolver.rb +187 -194
- data/lib/bundler/resolver/spec_group.rb +106 -0
- data/lib/bundler/retry.rb +5 -1
- data/lib/bundler/ruby_dsl.rb +1 -0
- data/lib/bundler/ruby_version.rb +12 -2
- data/lib/bundler/rubygems_ext.rb +23 -8
- data/lib/bundler/rubygems_gem_installer.rb +90 -0
- data/lib/bundler/rubygems_integration.rb +193 -70
- data/lib/bundler/runtime.rb +39 -22
- data/lib/bundler/settings.rb +245 -85
- data/lib/bundler/settings/validator.rb +102 -0
- data/lib/bundler/setup.rb +4 -7
- data/lib/bundler/shared_helpers.rb +183 -40
- data/lib/bundler/similarity_detector.rb +1 -0
- data/lib/bundler/source.rb +58 -1
- data/lib/bundler/source/gemspec.rb +1 -0
- data/lib/bundler/source/git.rb +52 -23
- data/lib/bundler/source/git/git_proxy.rb +30 -14
- data/lib/bundler/source/metadata.rb +62 -0
- data/lib/bundler/source/path.rb +42 -16
- data/lib/bundler/source/path/installer.rb +4 -2
- data/lib/bundler/source/rubygems.rb +171 -82
- data/lib/bundler/source/rubygems/remote.rb +12 -2
- data/lib/bundler/source_list.rb +75 -15
- data/lib/bundler/spec_set.rb +67 -32
- data/lib/bundler/ssl_certs/certificate_manager.rb +2 -1
- data/lib/bundler/stub_specification.rb +86 -2
- data/lib/bundler/templates/.document +1 -0
- data/lib/bundler/templates/Executable +13 -1
- data/lib/bundler/templates/Executable.bundler +105 -0
- data/lib/bundler/templates/Executable.standalone +5 -5
- data/lib/bundler/templates/Gemfile +3 -0
- data/lib/bundler/templates/gems.rb +8 -0
- data/lib/bundler/templates/newgem/Gemfile.tt +4 -2
- data/lib/bundler/templates/newgem/LICENSE.txt.tt +1 -1
- data/lib/bundler/templates/newgem/README.md.tt +14 -8
- data/lib/bundler/templates/newgem/Rakefile.tt +5 -5
- data/lib/bundler/templates/newgem/bin/console.tt +1 -1
- data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +4 -4
- data/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +3 -3
- data/lib/bundler/templates/newgem/gitignore.tt +5 -1
- data/lib/bundler/templates/newgem/lib/newgem.rb.tt +7 -6
- data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +4 -4
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +21 -12
- data/lib/bundler/templates/newgem/rspec.tt +1 -0
- data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +1 -3
- data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +13 -1
- data/lib/bundler/templates/newgem/test/newgem_test.rb.tt +1 -1
- data/lib/bundler/templates/newgem/test/test_helper.rb.tt +3 -3
- data/lib/bundler/templates/newgem/{.travis.yml.tt → travis.yml.tt} +2 -0
- data/lib/bundler/ui.rb +1 -0
- data/lib/bundler/ui/rg_proxy.rb +1 -0
- data/lib/bundler/ui/shell.rb +30 -10
- data/lib/bundler/ui/silent.rb +21 -1
- data/lib/bundler/uri_credentials_filter.rb +1 -0
- data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1638 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo.rb +2 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +26 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +26 -6
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +2 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +12 -4
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +3 -2
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +63 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +11 -3
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +13 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +3 -2
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +3 -2
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +18 -5
- data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +75 -7
- data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +2 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +3 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +499 -128
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +8 -4
- data/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/faster.rb +1 -0
- data/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/persistent.rb +27 -24
- data/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/persistent/ssl_reuse.rb +2 -1
- data/lib/bundler/vendor/thor/lib/thor.rb +46 -21
- data/lib/bundler/vendor/thor/lib/thor/actions.rb +24 -22
- data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +2 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +2 -2
- data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +16 -8
- data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +66 -18
- data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +17 -15
- data/lib/bundler/vendor/thor/lib/thor/base.rb +55 -32
- data/lib/bundler/vendor/thor/lib/thor/command.rb +13 -11
- data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +21 -1
- data/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +7 -5
- data/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +94 -63
- data/lib/bundler/vendor/thor/lib/thor/error.rb +3 -3
- data/lib/bundler/vendor/thor/lib/thor/group.rb +13 -13
- data/lib/bundler/vendor/thor/lib/thor/invocation.rb +4 -5
- data/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +2 -0
- data/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +4 -7
- data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +16 -16
- data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +42 -21
- data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +13 -10
- data/lib/bundler/vendor/thor/lib/thor/runner.rb +31 -29
- data/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +49 -33
- data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +4 -4
- data/lib/bundler/vendor/thor/lib/thor/util.rb +8 -7
- data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/lib/bundler/vendored_fileutils.rb +9 -0
- data/lib/bundler/vendored_molinillo.rb +1 -0
- data/lib/bundler/vendored_persistent.rb +43 -3
- data/lib/bundler/vendored_thor.rb +6 -2
- data/lib/bundler/version.rb +19 -2
- data/lib/bundler/version_ranges.rb +76 -0
- data/lib/bundler/vlad.rb +5 -0
- data/lib/bundler/worker.rb +30 -6
- data/lib/bundler/yaml_serializer.rb +4 -4
- data/man/bundle-add.1 +58 -0
- data/man/bundle-add.1.txt +52 -0
- data/man/bundle-add.ronn +40 -0
- data/{lib/bundler/man/bundle-binstubs → man/bundle-binstubs.1} +11 -1
- data/man/bundle-binstubs.1.txt +48 -0
- data/man/bundle-binstubs.ronn +15 -1
- data/man/bundle-check.1 +31 -0
- data/man/bundle-check.1.txt +33 -0
- data/man/bundle-check.ronn +26 -0
- data/man/bundle-clean.1 +24 -0
- data/man/bundle-clean.1.txt +26 -0
- data/man/bundle-clean.ronn +18 -0
- data/man/bundle-config.1 +497 -0
- data/man/bundle-config.1.txt +529 -0
- data/man/bundle-config.ronn +233 -61
- data/man/bundle-doctor.1 +44 -0
- data/man/bundle-doctor.1.txt +44 -0
- data/man/bundle-doctor.ronn +33 -0
- data/{lib/bundler/man/bundle-exec → man/bundle-exec.1} +6 -3
- data/man/bundle-exec.1.txt +178 -0
- data/man/bundle-exec.ronn +10 -3
- data/{lib/bundler/man/bundle-gem → man/bundle-gem.1} +4 -4
- data/man/bundle-gem.1.txt +91 -0
- data/man/bundle-gem.ronn +3 -2
- data/man/bundle-info.1 +20 -0
- data/man/bundle-info.1.txt +21 -0
- data/man/bundle-info.ronn +17 -0
- data/man/bundle-init.1 +25 -0
- data/man/bundle-init.1.txt +34 -0
- data/man/bundle-init.ronn +29 -0
- data/man/bundle-inject.1 +33 -0
- data/man/bundle-inject.1.txt +32 -0
- data/man/bundle-inject.ronn +22 -0
- data/{lib/bundler/man/bundle-install → man/bundle-install.1} +32 -29
- data/man/bundle-install.1.txt +396 -0
- data/man/bundle-install.ronn +45 -36
- data/man/bundle-list.1 +50 -0
- data/man/bundle-list.1.txt +43 -0
- data/man/bundle-list.ronn +33 -0
- data/{lib/bundler/man/bundle-lock → man/bundle-lock.1} +43 -2
- data/man/bundle-lock.1.txt +93 -0
- data/man/bundle-lock.ronn +47 -0
- data/man/bundle-open.1 +32 -0
- data/man/bundle-open.1.txt +29 -0
- data/man/bundle-open.ronn +19 -0
- data/man/bundle-outdated.1 +155 -0
- data/man/bundle-outdated.1.txt +131 -0
- data/man/bundle-outdated.ronn +111 -0
- data/{lib/bundler/man/bundle-package → man/bundle-package.1} +6 -3
- data/man/bundle-package.1.txt +79 -0
- data/man/bundle-package.ronn +7 -2
- data/{lib/bundler/man/bundle-platform → man/bundle-platform.1} +1 -1
- data/man/bundle-platform.1.txt +57 -0
- data/man/bundle-pristine.1 +34 -0
- data/man/bundle-pristine.1.txt +44 -0
- data/man/bundle-pristine.ronn +34 -0
- data/man/bundle-remove.1 +31 -0
- data/man/bundle-remove.1.txt +34 -0
- data/man/bundle-remove.ronn +23 -0
- data/man/bundle-show.1 +23 -0
- data/man/bundle-show.1.txt +27 -0
- data/man/bundle-show.ronn +21 -0
- data/man/bundle-update.1 +394 -0
- data/man/bundle-update.1.txt +391 -0
- data/man/bundle-update.ronn +172 -16
- data/man/bundle-viz.1 +39 -0
- data/man/bundle-viz.1.txt +39 -0
- data/man/bundle-viz.ronn +30 -0
- data/{lib/bundler/man/bundle → man/bundle.1} +44 -28
- data/man/bundle.1.txt +116 -0
- data/man/bundle.ronn +39 -27
- data/{lib/bundler/man → man}/gemfile.5 +67 -84
- data/man/gemfile.5.ronn +77 -55
- data/man/gemfile.5.txt +653 -0
- data/man/index.txt +25 -8
- metadata +118 -58
- data/.codeclimate.yml +0 -25
- data/.gitignore +0 -16
- data/.rspec +0 -3
- data/.rubocop.yml +0 -128
- data/.rubocop_todo.yml +0 -248
- data/.travis.yml +0 -108
- data/CODE_OF_CONDUCT.md +0 -42
- data/CONTRIBUTING.md +0 -36
- data/DEVELOPMENT.md +0 -148
- data/ISSUES.md +0 -100
- data/Rakefile +0 -333
- data/bin/rake +0 -19
- data/bin/rspec +0 -15
- data/bin/rubocop +0 -17
- data/bin/with_rubygems +0 -39
- data/lib/bundler/man/bundle-binstubs.txt +0 -33
- data/lib/bundler/man/bundle-config +0 -254
- data/lib/bundler/man/bundle-config.txt +0 -282
- data/lib/bundler/man/bundle-exec.txt +0 -171
- data/lib/bundler/man/bundle-gem.txt +0 -90
- data/lib/bundler/man/bundle-install.txt +0 -385
- data/lib/bundler/man/bundle-lock.txt +0 -52
- data/lib/bundler/man/bundle-package.txt +0 -74
- data/lib/bundler/man/bundle-platform.txt +0 -57
- data/lib/bundler/man/bundle-update +0 -221
- data/lib/bundler/man/bundle-update.txt +0 -227
- data/lib/bundler/man/bundle.txt +0 -104
- data/lib/bundler/man/gemfile.5.txt +0 -636
- data/lib/bundler/postit_trampoline.rb +0 -68
- data/lib/bundler/vendor/compact_index_client/lib/compact_index_client.rb +0 -79
- data/lib/bundler/vendor/compact_index_client/lib/compact_index_client/cache.rb +0 -112
- data/lib/bundler/vendor/compact_index_client/lib/compact_index_client/updater.rb +0 -80
- data/lib/bundler/vendor/compact_index_client/lib/compact_index_client/version.rb +0 -4
- data/lib/bundler/vendor/postit/lib/postit.rb +0 -15
- data/lib/bundler/vendor/postit/lib/postit/environment.rb +0 -44
- data/lib/bundler/vendor/postit/lib/postit/installer.rb +0 -28
- data/lib/bundler/vendor/postit/lib/postit/parser.rb +0 -21
- data/lib/bundler/vendor/postit/lib/postit/setup.rb +0 -12
- data/lib/bundler/vendor/postit/lib/postit/version.rb +0 -3
data/lib/bundler/spec_set.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "tsort"
|
3
4
|
require "forwardable"
|
5
|
+
require "set"
|
4
6
|
|
5
7
|
module Bundler
|
6
8
|
class SpecSet
|
@@ -11,30 +13,20 @@ module Bundler
|
|
11
13
|
def_delegators :sorted, :each
|
12
14
|
|
13
15
|
def initialize(specs)
|
14
|
-
@specs = specs
|
16
|
+
@specs = specs
|
15
17
|
end
|
16
18
|
|
17
|
-
def for(dependencies, skip = [], check = false, match_current_platform = false)
|
18
|
-
handled =
|
19
|
+
def for(dependencies, skip = [], check = false, match_current_platform = false, raise_on_missing = true)
|
20
|
+
handled = Set.new
|
19
21
|
deps = dependencies.dup
|
20
22
|
specs = []
|
21
23
|
skip += ["bundler"]
|
22
24
|
|
23
|
-
|
24
|
-
dep = deps.shift
|
25
|
-
next if handled
|
26
|
-
|
27
|
-
spec = lookup[dep.name].find do |s|
|
28
|
-
if match_current_platform
|
29
|
-
Gem::Platform.match(s.platform)
|
30
|
-
else
|
31
|
-
s.match_platform(dep.__platform)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
handled[dep] = true
|
25
|
+
loop do
|
26
|
+
break unless dep = deps.shift
|
27
|
+
next if !handled.add?(dep) || skip.include?(dep.name)
|
36
28
|
|
37
|
-
if spec
|
29
|
+
if spec = spec_for_dependency(dep, match_current_platform)
|
38
30
|
specs << spec
|
39
31
|
|
40
32
|
spec.dependencies.each do |d|
|
@@ -44,6 +36,11 @@ module Bundler
|
|
44
36
|
end
|
45
37
|
elsif check
|
46
38
|
return false
|
39
|
+
elsif raise_on_missing
|
40
|
+
others = lookup[dep.name] if match_current_platform
|
41
|
+
message = "Unable to find a spec satisfying #{dep} in the set. Perhaps the lockfile is corrupted?"
|
42
|
+
message += " Found #{others.join(", ")} that did not match the current platform." if others && !others.empty?
|
43
|
+
raise GemNotFound, message
|
47
44
|
end
|
48
45
|
end
|
49
46
|
|
@@ -83,31 +80,58 @@ module Bundler
|
|
83
80
|
end
|
84
81
|
|
85
82
|
def materialize(deps, missing_specs = nil)
|
86
|
-
materialized = self.for(deps, [], false, true).to_a
|
83
|
+
materialized = self.for(deps, [], false, true, !missing_specs).to_a
|
87
84
|
deps = materialized.map(&:name).uniq
|
88
85
|
materialized.map! do |s|
|
89
86
|
next s unless s.is_a?(LazySpecification)
|
90
87
|
s.source.dependency_names = deps if s.source.respond_to?(:dependency_names=)
|
91
88
|
spec = s.__materialize__
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
89
|
+
unless spec
|
90
|
+
unless missing_specs
|
91
|
+
raise GemNotFound, "Could not find #{s.full_name} in any of the sources"
|
92
|
+
end
|
93
|
+
missing_specs << s
|
96
94
|
end
|
97
|
-
spec
|
95
|
+
spec
|
96
|
+
end
|
97
|
+
SpecSet.new(missing_specs ? materialized.compact : materialized)
|
98
|
+
end
|
99
|
+
|
100
|
+
# Materialize for all the specs in the spec set, regardless of what platform they're for
|
101
|
+
# This is in contrast to how for does platform filtering (and specifically different from how `materialize` calls `for` only for the current platform)
|
102
|
+
# @return [Array<Gem::Specification>]
|
103
|
+
def materialized_for_all_platforms
|
104
|
+
names = @specs.map(&:name).uniq
|
105
|
+
@specs.map do |s|
|
106
|
+
next s unless s.is_a?(LazySpecification)
|
107
|
+
s.source.dependency_names = names if s.source.respond_to?(:dependency_names=)
|
108
|
+
spec = s.__materialize__
|
109
|
+
raise GemNotFound, "Could not find #{s.full_name} in any of the sources" unless spec
|
110
|
+
spec
|
98
111
|
end
|
99
|
-
SpecSet.new(materialized.compact)
|
100
112
|
end
|
101
113
|
|
102
114
|
def merge(set)
|
103
115
|
arr = sorted.dup
|
104
|
-
set.each do |
|
105
|
-
|
106
|
-
arr
|
116
|
+
set.each do |set_spec|
|
117
|
+
full_name = set_spec.full_name
|
118
|
+
next if arr.any? {|spec| spec.full_name == full_name }
|
119
|
+
arr << set_spec
|
107
120
|
end
|
108
121
|
SpecSet.new(arr)
|
109
122
|
end
|
110
123
|
|
124
|
+
def find_by_name_and_platform(name, platform)
|
125
|
+
@specs.detect {|spec| spec.name == name && spec.match_platform(platform) }
|
126
|
+
end
|
127
|
+
|
128
|
+
def what_required(spec)
|
129
|
+
unless req = find {|s| s.dependencies.any? {|d| d.type == :runtime && d.name == spec.name } }
|
130
|
+
return [spec]
|
131
|
+
end
|
132
|
+
what_required(req) << spec
|
133
|
+
end
|
134
|
+
|
111
135
|
private
|
112
136
|
|
113
137
|
def sorted
|
@@ -133,10 +157,7 @@ module Bundler
|
|
133
157
|
def lookup
|
134
158
|
@lookup ||= begin
|
135
159
|
lookup = Hash.new {|h, k| h[k] = [] }
|
136
|
-
|
137
|
-
s.platform.to_s == "ruby" ? "\0" : s.platform.to_s
|
138
|
-
end
|
139
|
-
specs.reverse_each do |s|
|
160
|
+
Index.sort_specs(@specs).reverse_each do |s|
|
140
161
|
lookup[s.name] << s
|
141
162
|
end
|
142
163
|
lookup
|
@@ -144,7 +165,21 @@ module Bundler
|
|
144
165
|
end
|
145
166
|
|
146
167
|
def tsort_each_node
|
147
|
-
|
168
|
+
# MUST sort by name for backwards compatibility
|
169
|
+
@specs.sort_by(&:name).each {|s| yield s }
|
170
|
+
end
|
171
|
+
|
172
|
+
def spec_for_dependency(dep, match_current_platform)
|
173
|
+
specs_for_platforms = lookup[dep.name]
|
174
|
+
if match_current_platform
|
175
|
+
Bundler.rubygems.platforms.reverse_each do |pl|
|
176
|
+
match = GemHelpers.select_best_platform_match(specs_for_platforms, pl)
|
177
|
+
return match if match
|
178
|
+
end
|
179
|
+
nil
|
180
|
+
else
|
181
|
+
GemHelpers.select_best_platform_match(specs_for_platforms, dep.__platform)
|
182
|
+
end
|
148
183
|
end
|
149
184
|
|
150
185
|
def tsort_each_child(s)
|
@@ -1,24 +1,108 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "bundler/remote_specification"
|
3
4
|
|
4
5
|
module Bundler
|
5
6
|
class StubSpecification < RemoteSpecification
|
6
7
|
def self.from_stub(stub)
|
8
|
+
return stub if stub.is_a?(Bundler::StubSpecification)
|
7
9
|
spec = new(stub.name, stub.version, stub.platform, nil)
|
8
10
|
spec.stub = stub
|
9
11
|
spec
|
10
12
|
end
|
11
13
|
|
12
|
-
attr_accessor :stub
|
14
|
+
attr_accessor :stub, :ignored
|
15
|
+
|
16
|
+
# Pre 2.2.0 did not include extension_dir
|
17
|
+
# https://github.com/rubygems/rubygems/commit/9485ca2d101b82a946d6f327f4bdcdea6d4946ea
|
18
|
+
if Bundler.rubygems.provides?(">= 2.2.0")
|
19
|
+
def source=(source)
|
20
|
+
super
|
21
|
+
# Stub has no concept of source, which means that extension_dir may be wrong
|
22
|
+
# This is the case for git-based gems. So, instead manually assign the extension dir
|
23
|
+
return unless source.respond_to?(:extension_dir_name)
|
24
|
+
path = File.join(stub.extensions_dir, source.extension_dir_name)
|
25
|
+
stub.extension_dir = File.expand_path(path)
|
26
|
+
end
|
27
|
+
end
|
13
28
|
|
14
29
|
def to_yaml
|
15
30
|
_remote_specification.to_yaml
|
16
31
|
end
|
17
32
|
|
33
|
+
# @!group Stub Delegates
|
34
|
+
|
35
|
+
if Bundler.rubygems.provides?(">= 2.3")
|
36
|
+
# This is defined directly to avoid having to load every installed spec
|
37
|
+
def missing_extensions?
|
38
|
+
stub.missing_extensions?
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def activated
|
43
|
+
stub.activated
|
44
|
+
end
|
45
|
+
|
46
|
+
def activated=(activated)
|
47
|
+
stub.instance_variable_set(:@activated, activated)
|
48
|
+
end
|
49
|
+
|
50
|
+
def default_gem
|
51
|
+
stub.default_gem
|
52
|
+
end
|
53
|
+
|
54
|
+
def full_gem_path
|
55
|
+
# deleted gems can have their stubs return nil, so in that case grab the
|
56
|
+
# expired path from the full spec
|
57
|
+
stub.full_gem_path || method_missing(:full_gem_path)
|
58
|
+
end
|
59
|
+
|
60
|
+
if Bundler.rubygems.provides?(">= 2.2.0")
|
61
|
+
def full_require_paths
|
62
|
+
stub.full_require_paths
|
63
|
+
end
|
64
|
+
|
65
|
+
# This is what we do in bundler/rubygems_ext
|
66
|
+
# full_require_paths is always implemented in >= 2.2.0
|
67
|
+
def load_paths
|
68
|
+
full_require_paths
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def loaded_from
|
73
|
+
stub.loaded_from
|
74
|
+
end
|
75
|
+
|
76
|
+
if Bundler.rubygems.stubs_provide_full_functionality?
|
77
|
+
def matches_for_glob(glob)
|
78
|
+
stub.matches_for_glob(glob)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def raw_require_paths
|
83
|
+
stub.raw_require_paths
|
84
|
+
end
|
85
|
+
|
18
86
|
private
|
19
87
|
|
20
88
|
def _remote_specification
|
21
|
-
|
89
|
+
@_remote_specification ||= begin
|
90
|
+
rs = stub.to_spec
|
91
|
+
if rs.equal?(self) # happens when to_spec gets the spec from Gem.loaded_specs
|
92
|
+
rs = Gem::Specification.load(loaded_from)
|
93
|
+
Bundler.rubygems.stub_set_spec(stub, rs)
|
94
|
+
end
|
95
|
+
|
96
|
+
unless rs
|
97
|
+
raise GemspecError, "The gemspec for #{full_name} at #{loaded_from}" \
|
98
|
+
" was missing or broken. Try running `gem pristine #{name} -v #{version}`" \
|
99
|
+
" to fix the cached spec."
|
100
|
+
end
|
101
|
+
|
102
|
+
rs.source = source
|
103
|
+
|
104
|
+
rs
|
105
|
+
end
|
22
106
|
end
|
23
107
|
end
|
24
108
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
# Ignore all files in this directory
|
@@ -1,5 +1,6 @@
|
|
1
|
-
#!/usr/bin/env <%= Bundler.settings[:shebang] || RbConfig::CONFIG[
|
1
|
+
#!/usr/bin/env <%= Bundler.settings[:shebang] || RbConfig::CONFIG["ruby_install_name"] %>
|
2
2
|
# frozen_string_literal: true
|
3
|
+
|
3
4
|
#
|
4
5
|
# This file was generated by Bundler.
|
5
6
|
#
|
@@ -11,6 +12,17 @@ require "pathname"
|
|
11
12
|
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../<%= relative_gemfile_path %>",
|
12
13
|
Pathname.new(__FILE__).realpath)
|
13
14
|
|
15
|
+
bundle_binstub = File.expand_path("../bundle", __FILE__)
|
16
|
+
|
17
|
+
if File.file?(bundle_binstub)
|
18
|
+
if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
|
19
|
+
load(bundle_binstub)
|
20
|
+
else
|
21
|
+
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
22
|
+
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
14
26
|
require "rubygems"
|
15
27
|
require "bundler/setup"
|
16
28
|
|
@@ -0,0 +1,105 @@
|
|
1
|
+
#!/usr/bin/env <%= Bundler.settings[:shebang] || RbConfig::CONFIG["ruby_install_name"] %>
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
#
|
5
|
+
# This file was generated by Bundler.
|
6
|
+
#
|
7
|
+
# The application '<%= executable %>' is installed as part of a gem, and
|
8
|
+
# this file is here to facilitate running it.
|
9
|
+
#
|
10
|
+
|
11
|
+
require "rubygems"
|
12
|
+
|
13
|
+
m = Module.new do
|
14
|
+
module_function
|
15
|
+
|
16
|
+
def invoked_as_script?
|
17
|
+
File.expand_path($0) == File.expand_path(__FILE__)
|
18
|
+
end
|
19
|
+
|
20
|
+
def env_var_version
|
21
|
+
ENV["BUNDLER_VERSION"]
|
22
|
+
end
|
23
|
+
|
24
|
+
def cli_arg_version
|
25
|
+
return unless invoked_as_script? # don't want to hijack other binstubs
|
26
|
+
return unless "update".start_with?(ARGV.first || " ") # must be running `bundle update`
|
27
|
+
bundler_version = nil
|
28
|
+
update_index = nil
|
29
|
+
ARGV.each_with_index do |a, i|
|
30
|
+
if update_index && update_index.succ == i && a =~ Gem::Version::ANCHORED_VERSION_PATTERN
|
31
|
+
bundler_version = a
|
32
|
+
end
|
33
|
+
next unless a =~ /\A--bundler(?:[= ](#{Gem::Version::VERSION_PATTERN}))?\z/
|
34
|
+
bundler_version = $1 || ">= 0.a"
|
35
|
+
update_index = i
|
36
|
+
end
|
37
|
+
bundler_version
|
38
|
+
end
|
39
|
+
|
40
|
+
def gemfile
|
41
|
+
gemfile = ENV["BUNDLE_GEMFILE"]
|
42
|
+
return gemfile if gemfile && !gemfile.empty?
|
43
|
+
|
44
|
+
File.expand_path("../<%= relative_gemfile_path %>", __FILE__)
|
45
|
+
end
|
46
|
+
|
47
|
+
def lockfile
|
48
|
+
lockfile =
|
49
|
+
case File.basename(gemfile)
|
50
|
+
when "gems.rb" then gemfile.sub(/\.rb$/, gemfile)
|
51
|
+
else "#{gemfile}.lock"
|
52
|
+
end
|
53
|
+
File.expand_path(lockfile)
|
54
|
+
end
|
55
|
+
|
56
|
+
def lockfile_version
|
57
|
+
return unless File.file?(lockfile)
|
58
|
+
lockfile_contents = File.read(lockfile)
|
59
|
+
return unless lockfile_contents =~ /\n\nBUNDLED WITH\n\s{2,}(#{Gem::Version::VERSION_PATTERN})\n/
|
60
|
+
Regexp.last_match(1)
|
61
|
+
end
|
62
|
+
|
63
|
+
def bundler_version
|
64
|
+
@bundler_version ||= begin
|
65
|
+
env_var_version || cli_arg_version ||
|
66
|
+
lockfile_version || "#{Gem::Requirement.default}.a"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def load_bundler!
|
71
|
+
ENV["BUNDLE_GEMFILE"] ||= gemfile
|
72
|
+
|
73
|
+
# must dup string for RG < 1.8 compatibility
|
74
|
+
activate_bundler(bundler_version.dup)
|
75
|
+
end
|
76
|
+
|
77
|
+
def activate_bundler(bundler_version)
|
78
|
+
if Gem::Version.correct?(bundler_version) && Gem::Version.new(bundler_version).release < Gem::Version.new("2.0")
|
79
|
+
bundler_version = "< 2"
|
80
|
+
end
|
81
|
+
gem_error = activation_error_handling do
|
82
|
+
gem "bundler", bundler_version
|
83
|
+
end
|
84
|
+
return if gem_error.nil?
|
85
|
+
require_error = activation_error_handling do
|
86
|
+
require "bundler/version"
|
87
|
+
end
|
88
|
+
return if require_error.nil? && Gem::Requirement.new(bundler_version).satisfied_by?(Gem::Version.new(Bundler::VERSION))
|
89
|
+
warn "Activating bundler (#{bundler_version}) failed:\n#{gem_error.message}\n\nTo install the version of bundler this project requires, run `gem install bundler -v '#{bundler_version}'`"
|
90
|
+
exit 42
|
91
|
+
end
|
92
|
+
|
93
|
+
def activation_error_handling
|
94
|
+
yield
|
95
|
+
nil
|
96
|
+
rescue StandardError, LoadError => e
|
97
|
+
e
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
m.load_bundler!
|
102
|
+
|
103
|
+
if m.invoked_as_script?
|
104
|
+
load Gem.bin_path("<%= spec.name %>", "<%= executable %>")
|
105
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
#!/usr/bin/env <%= Bundler.settings[:shebang] || RbConfig::CONFIG[
|
1
|
+
#!/usr/bin/env <%= Bundler.settings[:shebang] || RbConfig::CONFIG["ruby_install_name"] %>
|
2
2
|
#
|
3
3
|
# This file was generated by Bundler.
|
4
4
|
#
|
@@ -6,9 +6,9 @@
|
|
6
6
|
# this file is here to facilitate running it.
|
7
7
|
#
|
8
8
|
|
9
|
-
require
|
9
|
+
require "pathname"
|
10
10
|
path = Pathname.new(__FILE__)
|
11
|
-
$:.unshift File.expand_path
|
11
|
+
$:.unshift File.expand_path "../<%= standalone_path %>", path.realpath
|
12
12
|
|
13
|
-
require
|
14
|
-
load File.expand_path
|
13
|
+
require "bundler/setup"
|
14
|
+
load File.expand_path "../<%= executable_path %>", path.realpath
|