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
@@ -1,11 +1,25 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "uri"
|
3
|
-
require "rubygems/spec_fetcher"
|
4
4
|
require "bundler/match_platform"
|
5
5
|
|
6
6
|
module Bundler
|
7
7
|
class LazySpecification
|
8
8
|
Identifier = Struct.new(:name, :version, :source, :platform, :dependencies)
|
9
|
+
class Identifier
|
10
|
+
include Comparable
|
11
|
+
def <=>(other)
|
12
|
+
return unless other.is_a?(Identifier)
|
13
|
+
[name, version, platform_string] <=> [other.name, other.version, other.platform_string]
|
14
|
+
end
|
15
|
+
|
16
|
+
protected
|
17
|
+
|
18
|
+
def platform_string
|
19
|
+
platform_string = platform.to_s
|
20
|
+
platform_string == Index::RUBY ? Index::NULL : platform_string
|
21
|
+
end
|
22
|
+
end
|
9
23
|
|
10
24
|
include MatchPlatform
|
11
25
|
|
@@ -16,7 +30,7 @@ module Bundler
|
|
16
30
|
@name = name
|
17
31
|
@version = version
|
18
32
|
@dependencies = []
|
19
|
-
@platform = platform
|
33
|
+
@platform = platform || Gem::Platform::RUBY
|
20
34
|
@source = source
|
21
35
|
@specification = nil
|
22
36
|
end
|
@@ -55,10 +69,19 @@ module Bundler
|
|
55
69
|
end
|
56
70
|
|
57
71
|
def __materialize__
|
72
|
+
search_object = Bundler.feature_flag.specific_platform? || Bundler.settings[:force_ruby_platform] ? self : Dependency.new(name, version)
|
58
73
|
@specification = if source.is_a?(Source::Gemspec) && source.gemspec.name == name
|
59
74
|
source.gemspec.tap {|s| s.source = source }
|
60
75
|
else
|
61
|
-
source.specs.search(
|
76
|
+
search = source.specs.search(search_object).last
|
77
|
+
if search && Gem::Platform.new(search.platform) != Gem::Platform.new(platform) && !search.runtime_dependencies.-(dependencies.reject {|d| d.type == :development }).empty?
|
78
|
+
Bundler.ui.warn "Unable to use the platform-specific (#{search.platform}) version of #{name} (#{version}) " \
|
79
|
+
"because it has different dependencies from the #{platform} version. " \
|
80
|
+
"To use the platform-specific version of the gem, run `bundle config specific_platform true` and install again."
|
81
|
+
search = source.specs.search(self).last
|
82
|
+
end
|
83
|
+
search.dependencies = dependencies if search && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification))
|
84
|
+
search
|
62
85
|
end
|
63
86
|
end
|
64
87
|
|
@@ -78,6 +101,11 @@ module Bundler
|
|
78
101
|
@__identifier ||= Identifier.new(name, version, source, platform, dependencies)
|
79
102
|
end
|
80
103
|
|
104
|
+
def git_version
|
105
|
+
return unless source.is_a?(Bundler::Source::Git)
|
106
|
+
" #{source.revision[0..6]}"
|
107
|
+
end
|
108
|
+
|
81
109
|
private
|
82
110
|
|
83
111
|
def to_ary
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
class LockfileGenerator
|
5
|
+
attr_reader :definition
|
6
|
+
attr_reader :out
|
7
|
+
|
8
|
+
# @private
|
9
|
+
def initialize(definition)
|
10
|
+
@definition = definition
|
11
|
+
@out = String.new
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.generate(definition)
|
15
|
+
new(definition).generate!
|
16
|
+
end
|
17
|
+
|
18
|
+
def generate!
|
19
|
+
add_sources
|
20
|
+
add_platforms
|
21
|
+
add_dependencies
|
22
|
+
add_locked_ruby_version
|
23
|
+
add_bundled_with
|
24
|
+
|
25
|
+
out
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def add_sources
|
31
|
+
definition.send(:sources).lock_sources.each_with_index do |source, idx|
|
32
|
+
out << "\n" unless idx.zero?
|
33
|
+
|
34
|
+
# Add the source header
|
35
|
+
out << source.to_lock
|
36
|
+
|
37
|
+
# Find all specs for this source
|
38
|
+
specs = definition.resolve.select {|s| source.can_lock?(s) }
|
39
|
+
add_specs(specs)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def add_specs(specs)
|
44
|
+
# This needs to be sorted by full name so that
|
45
|
+
# gems with the same name, but different platform
|
46
|
+
# are ordered consistently
|
47
|
+
specs.sort_by(&:full_name).each do |spec|
|
48
|
+
next if spec.name == "bundler".freeze
|
49
|
+
out << spec.to_lock
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def add_platforms
|
54
|
+
add_section("PLATFORMS", definition.platforms)
|
55
|
+
end
|
56
|
+
|
57
|
+
def add_dependencies
|
58
|
+
out << "\nDEPENDENCIES\n"
|
59
|
+
|
60
|
+
handled = []
|
61
|
+
definition.dependencies.sort_by(&:to_s).each do |dep|
|
62
|
+
next if handled.include?(dep.name)
|
63
|
+
out << dep.to_lock
|
64
|
+
handled << dep.name
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def add_locked_ruby_version
|
69
|
+
return unless locked_ruby_version = definition.locked_ruby_version
|
70
|
+
add_section("RUBY VERSION", locked_ruby_version.to_s)
|
71
|
+
end
|
72
|
+
|
73
|
+
def add_bundled_with
|
74
|
+
add_section("BUNDLED WITH", definition.locked_bundler_version.to_s)
|
75
|
+
end
|
76
|
+
|
77
|
+
def add_section(name, value)
|
78
|
+
out << "\n#{name}\n"
|
79
|
+
case value
|
80
|
+
when Array
|
81
|
+
value.map(&:to_s).sort.each do |val|
|
82
|
+
out << " #{val}\n"
|
83
|
+
end
|
84
|
+
when Hash
|
85
|
+
value.to_a.sort_by {|k, _| k.to_s }.each do |key, val|
|
86
|
+
out << " #{key}: #{val}\n"
|
87
|
+
end
|
88
|
+
when String
|
89
|
+
out << " #{value}\n"
|
90
|
+
else
|
91
|
+
raise ArgumentError, "#{value.inspect} can't be serialized in a lockfile"
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require "strscan"
|
3
2
|
|
4
3
|
# Some versions of the Bundler 1.1 RC series introduced corrupted
|
5
4
|
# lockfiles. There were two major problems:
|
@@ -62,7 +61,7 @@ module Bundler
|
|
62
61
|
def initialize(lockfile)
|
63
62
|
@platforms = []
|
64
63
|
@sources = []
|
65
|
-
@dependencies =
|
64
|
+
@dependencies = {}
|
66
65
|
@state = nil
|
67
66
|
@specs = {}
|
68
67
|
|
@@ -91,8 +90,8 @@ module Bundler
|
|
91
90
|
send("parse_#{@state}", line)
|
92
91
|
end
|
93
92
|
end
|
94
|
-
@sources << @rubygems_aggregate
|
95
|
-
@specs = @specs.values
|
93
|
+
@sources << @rubygems_aggregate unless Bundler.feature_flag.lockfile_uses_separate_rubygems_sources?
|
94
|
+
@specs = @specs.values.sort_by(&:identifier)
|
96
95
|
warn_for_outdated_bundler_version
|
97
96
|
rescue ArgumentError => e
|
98
97
|
Bundler.ui.debug(e)
|
@@ -142,10 +141,16 @@ module Bundler
|
|
142
141
|
@sources << @current_source
|
143
142
|
end
|
144
143
|
when GEM
|
145
|
-
|
146
|
-
@
|
144
|
+
if Bundler.feature_flag.lockfile_uses_separate_rubygems_sources?
|
145
|
+
@opts["remotes"] = @opts.delete("remote")
|
146
|
+
@current_source = TYPES[@type].from_lock(@opts)
|
147
|
+
@sources << @current_source
|
148
|
+
else
|
149
|
+
Array(@opts["remote"]).each do |url|
|
150
|
+
@rubygems_aggregate.add_remote(url)
|
151
|
+
end
|
152
|
+
@current_source = @rubygems_aggregate
|
147
153
|
end
|
148
|
-
@current_source = @rubygems_aggregate
|
149
154
|
when PLUGIN
|
150
155
|
@current_source = Plugin.source_from_lock(@opts)
|
151
156
|
@sources << @current_source
|
@@ -172,43 +177,53 @@ module Bundler
|
|
172
177
|
end
|
173
178
|
end
|
174
179
|
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
180
|
+
space = / /
|
181
|
+
NAME_VERSION = /
|
182
|
+
^(#{space}{2}|#{space}{4}|#{space}{6})(?!#{space}) # Exactly 2, 4, or 6 spaces at the start of the line
|
183
|
+
(.*?) # Name
|
184
|
+
(?:#{space}\(([^-]*) # Space, followed by version
|
185
|
+
(?:-(.*))?\))? # Optional platform
|
186
|
+
(!)? # Optional pinned marker
|
187
|
+
$ # Line end
|
188
|
+
/xo
|
179
189
|
|
180
190
|
def parse_dependency(line)
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
191
|
+
return unless line =~ NAME_VERSION
|
192
|
+
spaces = $1
|
193
|
+
return unless spaces.size == 2
|
194
|
+
name = $2
|
195
|
+
version = $3
|
196
|
+
pinned = $5
|
186
197
|
|
187
|
-
|
198
|
+
version = version.split(",").map(&:strip) if version
|
188
199
|
|
189
|
-
|
190
|
-
spec = @specs.find {|_, v| v.name == dep.name }
|
191
|
-
dep.source = spec.last.source if spec
|
200
|
+
dep = Bundler::Dependency.new(name, version)
|
192
201
|
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
# TODO: Use the version from the spec instead of from the dependency
|
197
|
-
if version && version.size == 1 && version.first =~ /^\s*= (.+)\s*$/ && dep.source.is_a?(Bundler::Source::Path)
|
198
|
-
dep.source.name = name
|
199
|
-
dep.source.version = $1
|
200
|
-
end
|
201
|
-
end
|
202
|
+
if pinned && dep.name != "bundler"
|
203
|
+
spec = @specs.find {|_, v| v.name == dep.name }
|
204
|
+
dep.source = spec.last.source if spec
|
202
205
|
|
203
|
-
|
206
|
+
# Path sources need to know what the default name / version
|
207
|
+
# to use in the case that there are no gemspecs present. A fake
|
208
|
+
# gemspec is created based on the version set on the dependency
|
209
|
+
# TODO: Use the version from the spec instead of from the dependency
|
210
|
+
if version && version.size == 1 && version.first =~ /^\s*= (.+)\s*$/ && dep.source.is_a?(Bundler::Source::Path)
|
211
|
+
dep.source.name = name
|
212
|
+
dep.source.version = $1
|
213
|
+
end
|
204
214
|
end
|
215
|
+
|
216
|
+
@dependencies[dep.name] = dep
|
205
217
|
end
|
206
218
|
|
207
219
|
def parse_spec(line)
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
220
|
+
return unless line =~ NAME_VERSION
|
221
|
+
spaces = $1
|
222
|
+
name = $2
|
223
|
+
version = $3
|
224
|
+
platform = $4
|
225
|
+
|
226
|
+
if spaces.size == 4
|
212
227
|
version = Gem::Version.new(version)
|
213
228
|
platform = platform ? Gem::Platform.new(platform) : Gem::Platform::RUBY
|
214
229
|
@current_spec = LazySpecification.new(name, version, platform)
|
@@ -217,9 +232,7 @@ module Bundler
|
|
217
232
|
# Avoid introducing multiple copies of the same spec (caused by
|
218
233
|
# duplicate GIT sections)
|
219
234
|
@specs[@current_spec.identifier] ||= @current_spec
|
220
|
-
elsif
|
221
|
-
name = $1
|
222
|
-
version = $2
|
235
|
+
elsif spaces.size == 6
|
223
236
|
version = version.split(",").map(&:strip) if version
|
224
237
|
dep = Gem::Dependency.new(name, version)
|
225
238
|
@current_spec.dependencies << dep
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "bundler/gem_helpers"
|
3
4
|
|
4
5
|
module Bundler
|
@@ -6,9 +7,18 @@ module Bundler
|
|
6
7
|
include GemHelpers
|
7
8
|
|
8
9
|
def match_platform(p)
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
MatchPlatform.platforms_match?(platform, p)
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.platforms_match?(gemspec_platform, local_platform)
|
14
|
+
return true if gemspec_platform.nil?
|
15
|
+
return true if Gem::Platform::RUBY == gemspec_platform
|
16
|
+
return true if local_platform == gemspec_platform
|
17
|
+
gemspec_platform = Gem::Platform.new(gemspec_platform)
|
18
|
+
return true if GemHelpers.generic(gemspec_platform) === local_platform
|
19
|
+
return true if gemspec_platform === local_platform
|
20
|
+
|
21
|
+
false
|
12
22
|
end
|
13
23
|
end
|
14
24
|
end
|
data/lib/bundler/mirror.rb
CHANGED
@@ -1,4 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "socket"
|
4
|
+
|
2
5
|
module Bundler
|
3
6
|
class Settings
|
4
7
|
# Class used to build the mirror set and then find a mirror for a given URI
|
@@ -35,7 +38,7 @@ module Bundler
|
|
35
38
|
mirror = if config.all?
|
36
39
|
@all
|
37
40
|
else
|
38
|
-
|
41
|
+
@mirrors[config.uri] ||= Mirror.new
|
39
42
|
end
|
40
43
|
config.update_mirror(mirror)
|
41
44
|
end
|
@@ -43,7 +46,9 @@ module Bundler
|
|
43
46
|
private
|
44
47
|
|
45
48
|
def fetch_valid_mirror_for(uri)
|
46
|
-
|
49
|
+
downcased = uri.to_s.downcase
|
50
|
+
mirror = @mirrors[downcased] || @mirrors[URI(downcased).host] || Mirror.new(uri)
|
51
|
+
mirror.validate!(@prober)
|
47
52
|
mirror = Mirror.new(uri) unless mirror.valid?
|
48
53
|
mirror
|
49
54
|
end
|
@@ -115,7 +120,7 @@ module Bundler
|
|
115
120
|
|
116
121
|
def initialize(config_line, value)
|
117
122
|
uri, fallback =
|
118
|
-
config_line.match(%r{
|
123
|
+
config_line.match(%r{\Amirror\.(all|.+?)(\.fallback_timeout)?\/?\z}).captures
|
119
124
|
@fallback = !fallback.nil?
|
120
125
|
@all = false
|
121
126
|
if uri == "all"
|
@@ -147,7 +152,7 @@ module Bundler
|
|
147
152
|
socket.connect_nonblock(address)
|
148
153
|
rescue Errno::EINPROGRESS
|
149
154
|
wait_for_writtable_socket(socket, address, timeout)
|
150
|
-
rescue # Connection failed somehow, again
|
155
|
+
rescue RuntimeError # Connection failed somehow, again
|
151
156
|
false
|
152
157
|
end
|
153
158
|
end
|
@@ -167,7 +172,7 @@ module Bundler
|
|
167
172
|
socket.connect_nonblock(address)
|
168
173
|
rescue Errno::EISCONN
|
169
174
|
true
|
170
|
-
rescue # Connection failed
|
175
|
+
rescue StandardError # Connection failed
|
171
176
|
false
|
172
177
|
end
|
173
178
|
end
|
data/lib/bundler/plugin.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "bundler/plugin/api"
|
3
4
|
|
4
5
|
module Bundler
|
5
6
|
module Plugin
|
6
7
|
autoload :DSL, "bundler/plugin/dsl"
|
8
|
+
autoload :Events, "bundler/plugin/events"
|
7
9
|
autoload :Index, "bundler/plugin/index"
|
8
10
|
autoload :Installer, "bundler/plugin/installer"
|
9
11
|
autoload :SourceList, "bundler/plugin/source_list"
|
@@ -37,7 +39,11 @@ module Bundler
|
|
37
39
|
|
38
40
|
save_plugins names, specs
|
39
41
|
rescue PluginError => e
|
40
|
-
|
42
|
+
if specs
|
43
|
+
specs_to_delete = Hash[specs.select {|k, _v| names.include?(k) && !index.commands.values.include?(k) }]
|
44
|
+
specs_to_delete.values.each {|spec| Bundler.rm_rf(spec.full_gem_path) }
|
45
|
+
end
|
46
|
+
|
41
47
|
Bundler.ui.error "Failed to install plugin #{name}: #{e.message}\n #{e.backtrace.join("\n ")}"
|
42
48
|
end
|
43
49
|
|
@@ -61,8 +67,10 @@ module Bundler
|
|
61
67
|
installed_specs = Installer.new.install_definition(definition)
|
62
68
|
|
63
69
|
save_plugins plugins, installed_specs, builder.inferred_plugins
|
64
|
-
rescue => e
|
65
|
-
|
70
|
+
rescue RuntimeError => e
|
71
|
+
unless e.is_a?(GemfileError)
|
72
|
+
Bundler.ui.error "Failed to install plugin: #{e.message}\n #{e.backtrace[0]}"
|
73
|
+
end
|
66
74
|
raise
|
67
75
|
end
|
68
76
|
|
@@ -73,8 +81,8 @@ module Bundler
|
|
73
81
|
|
74
82
|
# The directory root for all plugin related data
|
75
83
|
#
|
76
|
-
#
|
77
|
-
# in user_bundle_path
|
84
|
+
# If run in an app, points to local root, in app_config_path
|
85
|
+
# Otherwise, points to global root, in Bundler.user_bundle_path("plugin")
|
78
86
|
def root
|
79
87
|
@root ||= if SharedHelpers.in_bundle?
|
80
88
|
local_root
|
@@ -89,7 +97,7 @@ module Bundler
|
|
89
97
|
|
90
98
|
# The global directory root for all plugin related data
|
91
99
|
def global_root
|
92
|
-
Bundler.user_bundle_path
|
100
|
+
Bundler.user_bundle_path("plugin")
|
93
101
|
end
|
94
102
|
|
95
103
|
# The cache directory for plugin stuffs
|
@@ -148,6 +156,9 @@ module Bundler
|
|
148
156
|
# To be called via the API to register a hooks and corresponding block that
|
149
157
|
# will be called to handle the hook
|
150
158
|
def add_hook(event, &block)
|
159
|
+
unless Events.defined_event?(event)
|
160
|
+
raise ArgumentError, "Event '#{event}' not defined in Bundler::Plugin::Events"
|
161
|
+
end
|
151
162
|
@hooks_by_event[event.to_s] << block
|
152
163
|
end
|
153
164
|
|
@@ -158,7 +169,10 @@ module Bundler
|
|
158
169
|
#
|
159
170
|
# @param [String] event
|
160
171
|
def hook(event, *args, &arg_blk)
|
161
|
-
return unless Bundler.
|
172
|
+
return unless Bundler.feature_flag.plugins?
|
173
|
+
unless Events.defined_event?(event)
|
174
|
+
raise ArgumentError, "Event '#{event}' not defined in Bundler::Plugin::Events"
|
175
|
+
end
|
162
176
|
|
163
177
|
plugins = index.hook_plugins(event)
|
164
178
|
return unless plugins.any?
|
@@ -257,7 +271,7 @@ module Bundler
|
|
257
271
|
load path.join(PLUGIN_FILE_NAME)
|
258
272
|
|
259
273
|
@loaded_plugin_names << name
|
260
|
-
rescue => e
|
274
|
+
rescue RuntimeError => e
|
261
275
|
Bundler.ui.error "Failed loading plugin #{name}: #{e.message}"
|
262
276
|
raise
|
263
277
|
end
|