bundler 1.15.1 → 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 +320 -0
- data/README.md +17 -8
- data/bundler.gemspec +25 -9
- data/exe/bundle +1 -6
- data/exe/bundle_ruby +4 -3
- data/lib/bundler/build_metadata.rb +53 -0
- data/lib/bundler/capistrano.rb +5 -0
- data/lib/bundler/cli/add.rb +15 -6
- data/lib/bundler/cli/binstubs.rb +17 -9
- data/lib/bundler/cli/cache.rb +5 -4
- data/lib/bundler/cli/check.rb +3 -5
- data/lib/bundler/cli/clean.rb +5 -6
- data/lib/bundler/cli/common.rb +11 -2
- data/lib/bundler/cli/config.rb +2 -1
- data/lib/bundler/cli/console.rb +2 -1
- data/lib/bundler/cli/doctor.rb +48 -1
- data/lib/bundler/cli/exec.rb +6 -5
- data/lib/bundler/cli/gem.rb +13 -8
- data/lib/bundler/cli/info.rb +0 -1
- data/lib/bundler/cli/init.rb +18 -6
- data/lib/bundler/cli/inject.rb +1 -0
- data/lib/bundler/cli/install.rb +64 -77
- data/lib/bundler/cli/issue.rb +1 -1
- data/lib/bundler/cli/list.rb +58 -0
- data/lib/bundler/cli/lock.rb +0 -1
- data/lib/bundler/cli/open.rb +2 -2
- data/lib/bundler/cli/outdated.rb +20 -9
- data/lib/bundler/cli/package.rb +9 -6
- data/lib/bundler/cli/platform.rb +1 -0
- data/lib/bundler/cli/plugin.rb +1 -0
- data/lib/bundler/cli/pristine.rb +20 -6
- data/lib/bundler/cli/remove.rb +18 -0
- data/lib/bundler/cli/show.rb +0 -1
- data/lib/bundler/cli/update.rb +35 -7
- data/lib/bundler/cli/viz.rb +4 -0
- data/lib/bundler/cli.rb +234 -90
- data/lib/bundler/compact_index_client/cache.rb +1 -2
- data/lib/bundler/compact_index_client/updater.rb +35 -7
- data/lib/bundler/compact_index_client.rb +1 -0
- data/lib/bundler/compatibility_guard.rb +14 -0
- data/lib/bundler/constants.rb +1 -0
- data/lib/bundler/current_ruby.rb +13 -5
- data/lib/bundler/definition.rb +192 -139
- data/lib/bundler/dep_proxy.rb +3 -1
- data/lib/bundler/dependency.rb +9 -9
- data/lib/bundler/deployment.rb +1 -1
- data/lib/bundler/deprecate.rb +15 -3
- data/lib/bundler/dsl.rb +115 -64
- data/lib/bundler/endpoint_specification.rb +10 -1
- data/lib/bundler/env.rb +90 -29
- data/lib/bundler/environment_preserver.rb +27 -6
- data/lib/bundler/errors.rb +1 -0
- data/lib/bundler/feature_flag.rb +46 -4
- data/lib/bundler/fetcher/base.rb +1 -0
- data/lib/bundler/fetcher/compact_index.rb +2 -11
- data/lib/bundler/fetcher/dependency.rb +2 -1
- data/lib/bundler/fetcher/downloader.rb +11 -5
- data/lib/bundler/fetcher/index.rb +3 -2
- data/lib/bundler/fetcher.rb +18 -11
- data/lib/bundler/friendly_errors.rb +6 -1
- data/lib/bundler/gem_helper.rb +19 -10
- data/lib/bundler/gem_helpers.rb +1 -0
- 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 +1 -0
- data/lib/bundler/graph.rb +1 -0
- data/lib/bundler/index.rb +8 -8
- data/lib/bundler/injector.rb +192 -30
- data/lib/bundler/inline.rb +10 -10
- data/lib/bundler/installer/gem_installer.rb +12 -2
- data/lib/bundler/installer/parallel_installer.rb +78 -42
- data/lib/bundler/installer/standalone.rb +1 -0
- data/lib/bundler/installer.rb +138 -53
- data/lib/bundler/lazy_specification.rb +3 -2
- data/lib/bundler/lockfile_generator.rb +95 -0
- data/lib/bundler/lockfile_parser.rb +10 -4
- data/lib/bundler/match_platform.rb +1 -0
- data/lib/bundler/mirror.rb +8 -5
- data/lib/bundler/plugin/api/source.rb +9 -2
- data/lib/bundler/plugin/events.rb +61 -0
- data/lib/bundler/plugin/index.rb +7 -2
- data/lib/bundler/plugin/installer.rb +7 -6
- data/lib/bundler/plugin/source_list.rb +7 -8
- data/lib/bundler/plugin.rb +13 -5
- data/lib/bundler/process_lock.rb +24 -0
- data/lib/bundler/psyched_yaml.rb +10 -0
- data/lib/bundler/remote_specification.rb +10 -1
- data/lib/bundler/resolver/spec_group.rb +106 -0
- data/lib/bundler/resolver.rb +158 -195
- data/lib/bundler/retry.rb +1 -0
- data/lib/bundler/ruby_dsl.rb +1 -0
- data/lib/bundler/ruby_version.rb +2 -1
- data/lib/bundler/rubygems_ext.rb +5 -4
- data/lib/bundler/rubygems_gem_installer.rb +31 -1
- data/lib/bundler/rubygems_integration.rb +71 -32
- data/lib/bundler/runtime.rb +11 -9
- data/lib/bundler/settings/validator.rb +102 -0
- data/lib/bundler/settings.rb +213 -86
- data/lib/bundler/setup.rb +4 -7
- data/lib/bundler/shared_helpers.rb +131 -26
- data/lib/bundler/similarity_detector.rb +1 -0
- data/lib/bundler/source/gemspec.rb +1 -0
- data/lib/bundler/source/git/git_proxy.rb +21 -11
- data/lib/bundler/source/git.rb +24 -19
- data/lib/bundler/source/metadata.rb +62 -0
- data/lib/bundler/source/path/installer.rb +2 -0
- data/lib/bundler/source/path.rb +11 -7
- data/lib/bundler/source/rubygems/remote.rb +8 -2
- data/lib/bundler/source/rubygems.rb +161 -84
- data/lib/bundler/source.rb +36 -0
- data/lib/bundler/source_list.rb +75 -15
- data/lib/bundler/spec_set.rb +12 -6
- data/lib/bundler/ssl_certs/certificate_manager.rb +2 -1
- data/lib/bundler/stub_specification.rb +1 -0
- data/lib/bundler/templates/.document +1 -0
- data/lib/bundler/templates/Executable +12 -0
- data/lib/bundler/templates/Executable.bundler +105 -0
- data/lib/bundler/templates/Gemfile +3 -0
- data/lib/bundler/templates/gems.rb +8 -0
- data/lib/bundler/templates/newgem/Gemfile.tt +2 -0
- data/lib/bundler/templates/newgem/README.md.tt +1 -1
- data/lib/bundler/templates/newgem/gitignore.tt +0 -1
- data/lib/bundler/templates/newgem/lib/newgem.rb.tt +1 -0
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +12 -3
- data/lib/bundler/templates/newgem/rspec.tt +1 -0
- data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +0 -2
- data/lib/bundler/templates/newgem/{.travis.yml.tt → travis.yml.tt} +2 -0
- data/lib/bundler/ui/rg_proxy.rb +1 -0
- data/lib/bundler/ui/shell.rb +17 -4
- data/lib/bundler/ui/silent.rb +1 -0
- data/lib/bundler/ui.rb +1 -0
- 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/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/action.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +15 -4
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +3 -2
- 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 +491 -148
- 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/molinillo/lib/molinillo.rb +2 -0
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +3 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +1 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +1 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +9 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +45 -8
- data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +9 -3
- data/lib/bundler/vendor/thor/lib/thor/actions.rb +6 -3
- data/lib/bundler/vendor/thor/lib/thor/base.rb +27 -4
- data/lib/bundler/vendor/thor/lib/thor/command.rb +9 -7
- data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +12 -0
- data/lib/bundler/vendor/thor/lib/thor/group.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +2 -0
- data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +5 -5
- data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +6 -5
- data/lib/bundler/vendor/thor/lib/thor/runner.rb +6 -4
- data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +10 -9
- data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor.rb +25 -8
- data/lib/bundler/vendored_fileutils.rb +9 -0
- data/lib/bundler/vendored_molinillo.rb +1 -0
- data/lib/bundler/vendored_persistent.rb +35 -0
- data/lib/bundler/vendored_thor.rb +1 -0
- data/lib/bundler/version.rb +6 -2
- data/lib/bundler/version_ranges.rb +1 -0
- data/lib/bundler/vlad.rb +5 -0
- data/lib/bundler/worker.rb +1 -0
- data/lib/bundler/yaml_serializer.rb +3 -3
- data/lib/bundler.rb +86 -52
- data/man/bundle-add.1 +18 -3
- data/man/bundle-add.1.txt +26 -14
- data/man/bundle-add.ronn +13 -2
- data/man/bundle-binstubs.1 +11 -1
- data/man/bundle-binstubs.1.txt +33 -18
- data/man/bundle-binstubs.ronn +15 -1
- data/man/bundle-check.1 +4 -4
- data/man/bundle-check.1.txt +15 -14
- data/man/bundle-check.ronn +3 -3
- data/man/bundle-clean.1 +1 -1
- data/man/bundle-clean.1.txt +10 -10
- data/man/bundle-config.1 +129 -29
- data/man/bundle-config.1.txt +285 -174
- data/man/bundle-config.ronn +167 -88
- data/man/bundle-doctor.1 +44 -0
- data/man/bundle-doctor.1.txt +44 -0
- data/man/bundle-doctor.ronn +33 -0
- data/man/bundle-exec.1 +6 -3
- data/man/bundle-exec.1.txt +78 -71
- data/man/bundle-exec.ronn +10 -3
- data/man/bundle-gem.1 +4 -4
- data/man/bundle-gem.1.txt +41 -40
- data/man/bundle-gem.ronn +3 -2
- data/man/bundle-info.1 +1 -1
- data/man/bundle-info.1.txt +8 -8
- data/man/bundle-init.1 +9 -4
- data/man/bundle-init.1.txt +23 -13
- data/man/bundle-init.ronn +15 -4
- data/man/bundle-inject.1 +4 -4
- data/man/bundle-inject.1.txt +10 -10
- data/man/bundle-inject.ronn +3 -3
- data/man/bundle-install.1 +31 -28
- data/man/bundle-install.1.txt +205 -194
- data/man/bundle-install.ronn +44 -35
- data/man/bundle-list.1 +50 -0
- data/man/bundle-list.1.txt +43 -0
- data/man/bundle-list.ronn +33 -0
- data/man/bundle-lock.1 +1 -1
- data/man/bundle-lock.1.txt +47 -47
- data/man/bundle-lock.ronn +1 -1
- data/man/bundle-open.1 +1 -1
- data/man/bundle-open.1.txt +7 -7
- data/man/bundle-outdated.1 +7 -3
- data/man/bundle-outdated.1.txt +40 -36
- data/man/bundle-outdated.ronn +6 -2
- data/man/bundle-package.1 +6 -3
- data/man/bundle-package.1.txt +44 -39
- data/man/bundle-package.ronn +7 -2
- data/man/bundle-platform.1 +1 -1
- data/man/bundle-platform.1.txt +13 -13
- data/man/bundle-pristine.1 +21 -3
- data/man/bundle-pristine.1.txt +33 -10
- data/man/bundle-pristine.ronn +24 -3
- 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 +3 -3
- data/man/bundle-show.1.txt +14 -12
- data/man/bundle-show.ronn +3 -2
- data/man/bundle-update.1 +13 -9
- data/man/bundle-update.1.txt +133 -130
- data/man/bundle-update.ronn +21 -17
- data/man/bundle-viz.1 +7 -7
- data/man/bundle-viz.1.txt +17 -15
- data/man/bundle-viz.ronn +6 -6
- data/man/bundle.1 +31 -32
- data/man/bundle.1.txt +63 -75
- data/man/bundle.ronn +35 -47
- data/man/gemfile.5 +44 -8
- data/man/gemfile.5.ronn +54 -8
- data/man/gemfile.5.txt +218 -165
- data/man/index.txt +25 -15
- metadata +36 -44
- data/.codeclimate.yml +0 -25
- data/.gitignore +0 -18
- data/.rspec +0 -3
- data/.rubocop.yml +0 -131
- data/.rubocop_todo.yml +0 -418
- data/.travis.yml +0 -122
- data/CODE_OF_CONDUCT.md +0 -42
- data/CONTRIBUTING.md +0 -17
- data/Rakefile +0 -346
- data/bin/rake +0 -19
- data/bin/rspec +0 -15
- data/bin/rubocop +0 -17
- data/bin/with_rubygems +0 -39
- data/doc/README.md +0 -30
- data/doc/TROUBLESHOOTING.md +0 -64
- data/doc/contributing/BUG_TRIAGE.md +0 -36
- data/doc/contributing/COMMUNITY.md +0 -13
- data/doc/contributing/GETTING_HELP.md +0 -11
- data/doc/contributing/HOW_YOU_CAN_HELP.md +0 -27
- data/doc/contributing/ISSUES.md +0 -51
- data/doc/contributing/README.md +0 -38
- data/doc/development/NEW_FEATURES.md +0 -10
- data/doc/development/PULL_REQUESTS.md +0 -40
- data/doc/development/README.md +0 -19
- data/doc/development/RELEASING.md +0 -9
- data/doc/development/SETUP.md +0 -29
- data/doc/documentation/README.md +0 -29
- data/doc/documentation/VISION.md +0 -26
- data/doc/documentation/WRITING.md +0 -54
- data/lib/bundler/postit_trampoline.rb +0 -73
- 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/vendor/postit/lib/postit.rb +0 -15
- data/task/release.rake +0 -116
data/lib/bundler/retry.rb
CHANGED
data/lib/bundler/ruby_dsl.rb
CHANGED
data/lib/bundler/ruby_version.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Bundler
|
3
4
|
class RubyVersion
|
4
5
|
attr_reader :versions,
|
@@ -117,7 +118,7 @@ module Bundler
|
|
117
118
|
when "jruby"
|
118
119
|
JRUBY_VERSION.dup
|
119
120
|
else
|
120
|
-
|
121
|
+
RUBY_ENGINE_VERSION.dup
|
121
122
|
end
|
122
123
|
patchlevel = RUBY_PATCHLEVEL.to_s
|
123
124
|
|
data/lib/bundler/rubygems_ext.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "pathname"
|
3
4
|
|
4
5
|
if defined?(Gem::QuickLoader)
|
@@ -14,7 +15,7 @@ begin
|
|
14
15
|
# shouldn't be deferred.
|
15
16
|
require "rubygems/source"
|
16
17
|
rescue LoadError
|
17
|
-
# Not available before
|
18
|
+
# Not available before RubyGems 2.0.0, ignore
|
18
19
|
nil
|
19
20
|
end
|
20
21
|
|
@@ -135,7 +136,7 @@ module Gem
|
|
135
136
|
end
|
136
137
|
|
137
138
|
class Dependency
|
138
|
-
attr_accessor :source, :groups
|
139
|
+
attr_accessor :source, :groups, :all_sources
|
139
140
|
|
140
141
|
alias_method :eql?, :==
|
141
142
|
|
@@ -146,7 +147,7 @@ module Gem
|
|
146
147
|
end
|
147
148
|
|
148
149
|
def to_yaml_properties
|
149
|
-
instance_variables.reject {|p| ["@source", "@groups"].include?(p.to_s) }
|
150
|
+
instance_variables.reject {|p| ["@source", "@groups", "@all_sources"].include?(p.to_s) }
|
150
151
|
end
|
151
152
|
|
152
153
|
def to_lock
|
@@ -158,7 +159,7 @@ module Gem
|
|
158
159
|
out
|
159
160
|
end
|
160
161
|
|
161
|
-
# Backport of performance enhancement added to
|
162
|
+
# Backport of performance enhancement added to RubyGems 1.4
|
162
163
|
def matches_spec?(spec)
|
163
164
|
# name can be a Regexp, so use ===
|
164
165
|
return false unless name === spec.name
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "rubygems/installer"
|
3
4
|
|
4
5
|
module Bundler
|
@@ -9,6 +10,13 @@ module Bundler
|
|
9
10
|
end
|
10
11
|
end
|
11
12
|
|
13
|
+
attr_reader :options
|
14
|
+
|
15
|
+
def initialize(gem, options = {})
|
16
|
+
@options = {}
|
17
|
+
super
|
18
|
+
end
|
19
|
+
|
12
20
|
def check_executable_overwrite(filename)
|
13
21
|
# Bundler needs to install gems regardless of binstub overwriting
|
14
22
|
end
|
@@ -17,6 +25,28 @@ module Bundler
|
|
17
25
|
super && validate_bundler_checksum(options[:bundler_expected_checksum])
|
18
26
|
end
|
19
27
|
|
28
|
+
def build_extensions
|
29
|
+
extension_cache_path = options[:bundler_extension_cache_path]
|
30
|
+
return super unless extension_cache_path && extension_dir = Bundler.rubygems.spec_extension_dir(spec)
|
31
|
+
|
32
|
+
extension_dir = Pathname.new(extension_dir)
|
33
|
+
build_complete = SharedHelpers.filesystem_access(extension_cache_path.join("gem.build_complete"), :read, &:file?)
|
34
|
+
if build_complete && !options[:force]
|
35
|
+
SharedHelpers.filesystem_access(extension_dir.parent, &:mkpath)
|
36
|
+
SharedHelpers.filesystem_access(extension_cache_path) do
|
37
|
+
FileUtils.cp_r extension_cache_path, spec.extension_dir
|
38
|
+
end
|
39
|
+
else
|
40
|
+
super
|
41
|
+
if extension_dir.directory? # not made for gems without extensions
|
42
|
+
SharedHelpers.filesystem_access(extension_cache_path.parent, &:mkpath)
|
43
|
+
SharedHelpers.filesystem_access(extension_cache_path) do
|
44
|
+
FileUtils.cp_r extension_dir, extension_cache_path
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
20
50
|
private
|
21
51
|
|
22
52
|
def validate_bundler_checksum(checksum)
|
@@ -25,7 +55,7 @@ module Bundler
|
|
25
55
|
return true unless source = @package.instance_variable_get(:@gem)
|
26
56
|
return true unless source.respond_to?(:with_read_io)
|
27
57
|
digest = source.with_read_io do |io|
|
28
|
-
digest =
|
58
|
+
digest = SharedHelpers.digest(:SHA256).new
|
29
59
|
digest << io.read(16_384) until io.eof?
|
30
60
|
io.rewind
|
31
61
|
send(checksum_type(checksum), digest)
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "monitor"
|
3
4
|
require "rubygems"
|
4
5
|
require "rubygems/config_file"
|
@@ -84,6 +85,19 @@ module Bundler
|
|
84
85
|
spec.respond_to?(:default_gem?) && spec.default_gem?
|
85
86
|
end
|
86
87
|
|
88
|
+
def spec_matches_for_glob(spec, glob)
|
89
|
+
return spec.matches_for_glob(glob) if spec.respond_to?(:matches_for_glob)
|
90
|
+
|
91
|
+
spec.load_paths.map do |lp|
|
92
|
+
Dir["#{lp}/#{glob}#{suffix_pattern}"]
|
93
|
+
end.flatten(1)
|
94
|
+
end
|
95
|
+
|
96
|
+
def spec_extension_dir(spec)
|
97
|
+
return unless spec.respond_to?(:extension_dir)
|
98
|
+
spec.extension_dir
|
99
|
+
end
|
100
|
+
|
87
101
|
def stub_set_spec(stub, spec)
|
88
102
|
stub.instance_variable_set(:@spec, spec)
|
89
103
|
end
|
@@ -118,7 +132,11 @@ module Bundler
|
|
118
132
|
end
|
119
133
|
|
120
134
|
def inflate(obj)
|
121
|
-
Gem
|
135
|
+
if defined?(Gem::Util)
|
136
|
+
Gem::Util.inflate(obj)
|
137
|
+
else
|
138
|
+
Gem.inflate(obj)
|
139
|
+
end
|
122
140
|
end
|
123
141
|
|
124
142
|
def sources=(val)
|
@@ -158,6 +176,10 @@ module Bundler
|
|
158
176
|
Gem.post_reset_hooks
|
159
177
|
end
|
160
178
|
|
179
|
+
def suffix_pattern
|
180
|
+
Gem.suffix_pattern
|
181
|
+
end
|
182
|
+
|
161
183
|
def gem_cache
|
162
184
|
gem_path.map {|p| File.expand_path("cache", p) }
|
163
185
|
end
|
@@ -165,7 +187,7 @@ module Bundler
|
|
165
187
|
def spec_cache_dirs
|
166
188
|
@spec_cache_dirs ||= begin
|
167
189
|
dirs = gem_path.map {|dir| File.join(dir, "specifications") }
|
168
|
-
dirs << Gem.spec_cache_dir if Gem.respond_to?(:spec_cache_dir) # Not in
|
190
|
+
dirs << Gem.spec_cache_dir if Gem.respond_to?(:spec_cache_dir) # Not in RubyGems 2.0.3 or earlier
|
169
191
|
dirs.uniq.select {|dir| File.directory? dir }
|
170
192
|
end
|
171
193
|
end
|
@@ -179,7 +201,7 @@ module Bundler
|
|
179
201
|
end
|
180
202
|
|
181
203
|
def repository_subdirectories
|
182
|
-
%w
|
204
|
+
%w[cache doc gems specifications]
|
183
205
|
end
|
184
206
|
|
185
207
|
def clear_paths
|
@@ -190,8 +212,12 @@ module Bundler
|
|
190
212
|
Gem.bin_path(gem, bin, ver)
|
191
213
|
end
|
192
214
|
|
215
|
+
def path_separator
|
216
|
+
File::PATH_SEPARATOR
|
217
|
+
end
|
218
|
+
|
193
219
|
def preserve_paths
|
194
|
-
# this is a no-op outside of
|
220
|
+
# this is a no-op outside of RubyGems 1.8
|
195
221
|
yield
|
196
222
|
end
|
197
223
|
|
@@ -212,6 +238,10 @@ module Bundler
|
|
212
238
|
Gem.load_plugins if Gem.respond_to?(:load_plugins)
|
213
239
|
end
|
214
240
|
|
241
|
+
def load_plugin_files(files)
|
242
|
+
Gem.load_plugin_files(files) if Gem.respond_to?(:load_plugin_files)
|
243
|
+
end
|
244
|
+
|
215
245
|
def ui=(obj)
|
216
246
|
Gem::DefaultUserInteraction.ui = obj
|
217
247
|
end
|
@@ -233,9 +263,9 @@ module Bundler
|
|
233
263
|
{} # if we can't download them, there aren't any
|
234
264
|
end
|
235
265
|
|
236
|
-
# TODO: This is for older versions of
|
266
|
+
# TODO: This is for older versions of RubyGems... should we support the
|
237
267
|
# X-Gemfile-Source header on these old versions?
|
238
|
-
# Maybe the newer implementation will work on older
|
268
|
+
# Maybe the newer implementation will work on older RubyGems?
|
239
269
|
# It seems difficult to keep this implementation and still send the header.
|
240
270
|
def fetch_all_remote_specs(remote)
|
241
271
|
old_sources = Bundler.rubygems.sources
|
@@ -273,6 +303,7 @@ module Bundler
|
|
273
303
|
|
274
304
|
def spec_from_gem(path, policy = nil)
|
275
305
|
require "rubygems/security"
|
306
|
+
require "bundler/psyched_yaml"
|
276
307
|
gem_from_path(path, security_policies[policy]).spec
|
277
308
|
rescue Gem::Package::FormatError
|
278
309
|
raise GemspecError, "Could not read gem at #{path}. It may be corrupted."
|
@@ -300,13 +331,13 @@ module Bundler
|
|
300
331
|
def download_gem(spec, uri, path)
|
301
332
|
uri = Bundler.settings.mirror_for(uri)
|
302
333
|
fetcher = Gem::RemoteFetcher.new(configuration[:http_proxy])
|
303
|
-
Bundler::Retry.new("download gem #{uri}"
|
334
|
+
Bundler::Retry.new("download gem from #{uri}").attempts do
|
304
335
|
fetcher.download(spec, uri, path)
|
305
336
|
end
|
306
337
|
end
|
307
338
|
|
308
339
|
def security_policy_keys
|
309
|
-
%w
|
340
|
+
%w[High Medium Low AlmostNo No].map {|level| "#{level}Security" }
|
310
341
|
end
|
311
342
|
|
312
343
|
def security_policies
|
@@ -377,9 +408,8 @@ module Bundler
|
|
377
408
|
raise e
|
378
409
|
end
|
379
410
|
|
380
|
-
#
|
381
|
-
|
382
|
-
kernel_class.send(:public, :gem)
|
411
|
+
# backwards compatibility shim, see https://github.com/bundler/bundler/issues/5102
|
412
|
+
kernel_class.send(:public, :gem) if Bundler.feature_flag.setup_makes_kernel_gem_public?
|
383
413
|
end
|
384
414
|
end
|
385
415
|
|
@@ -434,9 +464,9 @@ module Bundler
|
|
434
464
|
|
435
465
|
raise Gem::Exception, "no default executable for #{spec.full_name}" unless exec_name ||= spec.default_executable
|
436
466
|
|
437
|
-
unless spec.name ==
|
438
|
-
Bundler::SharedHelpers.major_deprecation
|
439
|
-
"Bundler is using a binstub that was created for a different gem.\n" \
|
467
|
+
unless spec.name == gem_name
|
468
|
+
Bundler::SharedHelpers.major_deprecation 2,
|
469
|
+
"Bundler is using a binstub that was created for a different gem (#{spec.name}).\n" \
|
440
470
|
"You should run `bundle binstub #{gem_name}` " \
|
441
471
|
"to work around a system/bundle conflict."
|
442
472
|
end
|
@@ -476,7 +506,7 @@ module Bundler
|
|
476
506
|
redefine_method(gem_class, :refresh) {}
|
477
507
|
end
|
478
508
|
|
479
|
-
# Replace or hook into
|
509
|
+
# Replace or hook into RubyGems to provide a bundlerized view
|
480
510
|
# of the world.
|
481
511
|
def replace_entrypoints(specs)
|
482
512
|
specs_by_name = specs.reduce({}) do |h, s|
|
@@ -492,8 +522,8 @@ module Bundler
|
|
492
522
|
Gem.clear_paths
|
493
523
|
end
|
494
524
|
|
495
|
-
# This backports the correct segment generation code from
|
496
|
-
# by monkeypatching it into the method in
|
525
|
+
# This backports the correct segment generation code from RubyGems 1.4+
|
526
|
+
# by monkeypatching it into the method in RubyGems 1.3.6 and 1.3.7.
|
497
527
|
def backport_segment_generation
|
498
528
|
redefine_method(Gem::Version, :segments) do
|
499
529
|
@segments ||= @version.scan(/[0-9]+|[a-z]+/i).map do |s|
|
@@ -512,7 +542,7 @@ module Bundler
|
|
512
542
|
end
|
513
543
|
|
514
544
|
# This backports base_dir which replaces installation path
|
515
|
-
#
|
545
|
+
# RubyGems 1.8+
|
516
546
|
def backport_base_dir
|
517
547
|
redefine_method(Gem::Specification, :base_dir) do
|
518
548
|
return Gem.dir unless loaded_from
|
@@ -544,8 +574,10 @@ module Bundler
|
|
544
574
|
@replaced_methods.each do |(sym, klass), method|
|
545
575
|
redefine_method(klass, sym, method)
|
546
576
|
end
|
547
|
-
|
548
|
-
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__ }
|
549
581
|
end
|
550
582
|
@replaced_methods.clear
|
551
583
|
end
|
@@ -581,7 +613,7 @@ module Bundler
|
|
581
613
|
end
|
582
614
|
end
|
583
615
|
|
584
|
-
#
|
616
|
+
# RubyGems 1.4 through 1.6
|
585
617
|
class Legacy < RubygemsIntegration
|
586
618
|
def initialize
|
587
619
|
super
|
@@ -592,7 +624,7 @@ module Bundler
|
|
592
624
|
end
|
593
625
|
|
594
626
|
def stub_rubygems(specs)
|
595
|
-
#
|
627
|
+
# RubyGems versions lower than 1.7 use SourceIndex#from_gems_in
|
596
628
|
source_index_class = (class << Gem::SourceIndex; self; end)
|
597
629
|
redefine_method(source_index_class, :from_gems_in) do |*args|
|
598
630
|
Gem::SourceIndex.new.tap do |source_index|
|
@@ -624,7 +656,7 @@ module Bundler
|
|
624
656
|
end
|
625
657
|
end
|
626
658
|
|
627
|
-
#
|
659
|
+
# RubyGems versions 1.3.6 and 1.3.7
|
628
660
|
class Ancient < Legacy
|
629
661
|
def initialize
|
630
662
|
super
|
@@ -632,7 +664,7 @@ module Bundler
|
|
632
664
|
end
|
633
665
|
end
|
634
666
|
|
635
|
-
#
|
667
|
+
# RubyGems 1.7
|
636
668
|
class Transitional < Legacy
|
637
669
|
def stub_rubygems(specs)
|
638
670
|
stub_source_index(specs)
|
@@ -646,7 +678,7 @@ module Bundler
|
|
646
678
|
end
|
647
679
|
end
|
648
680
|
|
649
|
-
#
|
681
|
+
# RubyGems 1.8.5-1.8.19
|
650
682
|
class Modern < RubygemsIntegration
|
651
683
|
def stub_rubygems(specs)
|
652
684
|
Gem::Specification.all = specs
|
@@ -667,9 +699,9 @@ module Bundler
|
|
667
699
|
end
|
668
700
|
end
|
669
701
|
|
670
|
-
#
|
702
|
+
# RubyGems 1.8.0 to 1.8.4
|
671
703
|
class AlmostModern < Modern
|
672
|
-
#
|
704
|
+
# RubyGems [>= 1.8.0, < 1.8.5] has a bug that changes Gem.dir whenever
|
673
705
|
# you call Gem::Installer#install with an :install_dir set. We have to
|
674
706
|
# change it back for our sudo mode to work.
|
675
707
|
def preserve_paths
|
@@ -680,9 +712,9 @@ module Bundler
|
|
680
712
|
end
|
681
713
|
end
|
682
714
|
|
683
|
-
#
|
715
|
+
# RubyGems 1.8.20+
|
684
716
|
class MoreModern < Modern
|
685
|
-
#
|
717
|
+
# RubyGems 1.8.20 and adds the skip_validation parameter, so that's
|
686
718
|
# when we start passing it through.
|
687
719
|
def build(spec, skip_validation = false)
|
688
720
|
require "rubygems/builder"
|
@@ -690,7 +722,7 @@ module Bundler
|
|
690
722
|
end
|
691
723
|
end
|
692
724
|
|
693
|
-
#
|
725
|
+
# RubyGems 2.0
|
694
726
|
class Future < RubygemsIntegration
|
695
727
|
def stub_rubygems(specs)
|
696
728
|
Gem::Specification.all = specs
|
@@ -736,7 +768,9 @@ module Bundler
|
|
736
768
|
uri = Bundler.settings.mirror_for(uri)
|
737
769
|
fetcher = gem_remote_fetcher
|
738
770
|
fetcher.headers = { "X-Gemfile-Source" => spec.remote.original_uri.to_s } if spec.remote.original_uri
|
739
|
-
|
771
|
+
Bundler::Retry.new("download gem from #{uri}").attempts do
|
772
|
+
fetcher.download(spec, uri, path)
|
773
|
+
end
|
740
774
|
end
|
741
775
|
|
742
776
|
def gem_remote_fetcher
|
@@ -765,6 +799,10 @@ module Bundler
|
|
765
799
|
def install_with_build_args(args)
|
766
800
|
yield
|
767
801
|
end
|
802
|
+
|
803
|
+
def path_separator
|
804
|
+
Gem.path_separator
|
805
|
+
end
|
768
806
|
end
|
769
807
|
|
770
808
|
# RubyGems 2.1.0
|
@@ -814,6 +852,7 @@ module Bundler
|
|
814
852
|
|
815
853
|
def use_gemdeps(gemfile)
|
816
854
|
ENV["BUNDLE_GEMFILE"] ||= File.expand_path(gemfile)
|
855
|
+
require "bundler/gemdeps"
|
817
856
|
runtime = Bundler.setup
|
818
857
|
Bundler.ui = nil
|
819
858
|
activated_spec_names = runtime.requested_specs.map(&:to_spec).sort_by(&:name)
|
@@ -852,7 +891,7 @@ module Bundler
|
|
852
891
|
RubygemsIntegration::Transitional.new
|
853
892
|
elsif RubygemsIntegration.provides?(">= 1.4.0")
|
854
893
|
RubygemsIntegration::Legacy.new
|
855
|
-
else #
|
894
|
+
else # RubyGems 1.3.6 and 1.3.7
|
856
895
|
RubygemsIntegration::Ancient.new
|
857
896
|
end
|
858
897
|
end
|
data/lib/bundler/runtime.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require "digest/sha1"
|
3
2
|
|
4
3
|
module Bundler
|
5
4
|
class Runtime
|
@@ -11,7 +10,7 @@ module Bundler
|
|
11
10
|
end
|
12
11
|
|
13
12
|
def setup(*groups)
|
14
|
-
@definition.ensure_equivalent_gemfile_and_lockfile if Bundler.
|
13
|
+
@definition.ensure_equivalent_gemfile_and_lockfile if Bundler.frozen_bundle?
|
15
14
|
|
16
15
|
groups.map!(&:to_sym)
|
17
16
|
|
@@ -80,7 +79,7 @@ module Bundler
|
|
80
79
|
required_file = file
|
81
80
|
begin
|
82
81
|
Kernel.require file
|
83
|
-
rescue => e
|
82
|
+
rescue RuntimeError => e
|
84
83
|
raise e if e.is_a?(LoadError) # we handle this a little later
|
85
84
|
raise Bundler::GemRequireError.new e,
|
86
85
|
"There was an error while trying to load the gem '#{file}'."
|
@@ -164,6 +163,7 @@ module Bundler
|
|
164
163
|
gem_dirs = Dir["#{Gem.dir}/gems/*"]
|
165
164
|
gem_files = Dir["#{Gem.dir}/cache/*.gem"]
|
166
165
|
gemspec_files = Dir["#{Gem.dir}/specifications/*.gemspec"]
|
166
|
+
extension_dirs = Dir["#{Gem.dir}/extensions/*/*/*"]
|
167
167
|
spec_gem_paths = []
|
168
168
|
# need to keep git sources around
|
169
169
|
spec_git_paths = @definition.spec_git_paths
|
@@ -171,6 +171,7 @@ module Bundler
|
|
171
171
|
spec_gem_executables = []
|
172
172
|
spec_cache_paths = []
|
173
173
|
spec_gemspec_paths = []
|
174
|
+
spec_extension_paths = []
|
174
175
|
specs.each do |spec|
|
175
176
|
spec_gem_paths << spec.full_gem_path
|
176
177
|
# need to check here in case gems are nested like for the rails git repo
|
@@ -182,6 +183,7 @@ module Bundler
|
|
182
183
|
end
|
183
184
|
spec_cache_paths << spec.cache_file
|
184
185
|
spec_gemspec_paths << spec.spec_file
|
186
|
+
spec_extension_paths << spec.extension_dir if spec.respond_to?(:extension_dir)
|
185
187
|
spec_git_cache_dirs << spec.source.cache_path.to_s if spec.source.is_a?(Bundler::Source::Git)
|
186
188
|
end
|
187
189
|
spec_gem_paths.uniq!
|
@@ -193,6 +195,7 @@ module Bundler
|
|
193
195
|
stale_gem_dirs = gem_dirs - spec_gem_paths
|
194
196
|
stale_gem_files = gem_files - spec_cache_paths
|
195
197
|
stale_gemspec_files = gemspec_files - spec_gemspec_paths
|
198
|
+
stale_extension_dirs = extension_dirs - spec_extension_paths
|
196
199
|
|
197
200
|
removed_stale_gem_dirs = stale_gem_dirs.collect {|dir| remove_dir(dir, dry_run) }
|
198
201
|
removed_stale_git_dirs = stale_git_dirs.collect {|dir| remove_dir(dir, dry_run) }
|
@@ -205,8 +208,10 @@ module Bundler
|
|
205
208
|
FileUtils.rm(file) if File.exist?(file)
|
206
209
|
end
|
207
210
|
end
|
208
|
-
|
209
|
-
|
211
|
+
|
212
|
+
stale_dirs = stale_git_cache_dirs + stale_extension_dirs
|
213
|
+
stale_dirs.each do |stale_dir|
|
214
|
+
SharedHelpers.filesystem_access(stale_dir) do |dir|
|
210
215
|
FileUtils.rm_rf(dir) if File.exist?(dir)
|
211
216
|
end
|
212
217
|
end
|
@@ -262,9 +267,6 @@ module Bundler
|
|
262
267
|
end
|
263
268
|
|
264
269
|
def setup_manpath
|
265
|
-
# Store original MANPATH for restoration later in with_clean_env()
|
266
|
-
ENV["BUNDLER_ORIG_MANPATH"] = ENV["MANPATH"]
|
267
|
-
|
268
270
|
# Add man/ subdirectories from activated bundles to MANPATH for man(1)
|
269
271
|
manuals = $LOAD_PATH.map do |path|
|
270
272
|
man_subdir = path.sub(/lib$/, "man")
|
@@ -272,7 +274,7 @@ module Bundler
|
|
272
274
|
end.compact
|
273
275
|
|
274
276
|
return if manuals.empty?
|
275
|
-
|
277
|
+
Bundler::SharedHelpers.set_env "MANPATH", manuals.concat(
|
276
278
|
ENV["MANPATH"].to_s.split(File::PATH_SEPARATOR)
|
277
279
|
).uniq.join(File::PATH_SEPARATOR)
|
278
280
|
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
class Settings
|
5
|
+
class Validator
|
6
|
+
class Rule
|
7
|
+
attr_reader :description
|
8
|
+
|
9
|
+
def initialize(keys, description, &validate)
|
10
|
+
@keys = keys
|
11
|
+
@description = description
|
12
|
+
@validate = validate
|
13
|
+
end
|
14
|
+
|
15
|
+
def validate!(key, value, settings)
|
16
|
+
instance_exec(key, value, settings, &@validate)
|
17
|
+
end
|
18
|
+
|
19
|
+
def fail!(key, value, *reasons)
|
20
|
+
reasons.unshift @description
|
21
|
+
raise InvalidOption, "Setting `#{key}` to #{value.inspect} failed:\n#{reasons.map {|r| " - #{r}" }.join("\n")}"
|
22
|
+
end
|
23
|
+
|
24
|
+
def set(settings, key, value, *reasons)
|
25
|
+
hash_key = k(key)
|
26
|
+
return if settings[hash_key] == value
|
27
|
+
reasons.unshift @description
|
28
|
+
Bundler.ui.info "Setting `#{key}` to #{value.inspect}, since #{reasons.join(", ")}"
|
29
|
+
if value.nil?
|
30
|
+
settings.delete(hash_key)
|
31
|
+
else
|
32
|
+
settings[hash_key] = value
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def k(key)
|
37
|
+
Bundler.settings.key_for(key)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.rules
|
42
|
+
@rules ||= Hash.new {|h, k| h[k] = [] }
|
43
|
+
end
|
44
|
+
private_class_method :rules
|
45
|
+
|
46
|
+
def self.rule(keys, description, &blk)
|
47
|
+
rule = Rule.new(keys, description, &blk)
|
48
|
+
keys.each {|k| rules[k] << rule }
|
49
|
+
end
|
50
|
+
private_class_method :rule
|
51
|
+
|
52
|
+
def self.validate!(key, value, settings)
|
53
|
+
rules_to_validate = rules[key]
|
54
|
+
rules_to_validate.each {|rule| rule.validate!(key, value, settings) }
|
55
|
+
end
|
56
|
+
|
57
|
+
rule %w[path path.system], "path and path.system are mutually exclusive" do |key, value, settings|
|
58
|
+
if key == "path" && value
|
59
|
+
set(settings, "path.system", nil)
|
60
|
+
elsif key == "path.system" && value
|
61
|
+
set(settings, :path, nil)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
rule %w[with without], "a group cannot be in both `with` & `without` simultaneously" do |key, value, settings|
|
66
|
+
with = settings.fetch(k(:with), "").split(":").map(&:to_sym)
|
67
|
+
without = settings.fetch(k(:without), "").split(":").map(&:to_sym)
|
68
|
+
|
69
|
+
other_key = key == "with" ? :without : :with
|
70
|
+
other_setting = key == "with" ? without : with
|
71
|
+
|
72
|
+
conflicting = with & without
|
73
|
+
if conflicting.any?
|
74
|
+
fail!(key, value, "`#{other_key}` is current set to #{other_setting.inspect}", "the `#{conflicting.join("`, `")}` groups conflict")
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
rule %w[path], "relative paths are expanded relative to the current working directory" do |key, value, settings|
|
79
|
+
next if value.nil?
|
80
|
+
|
81
|
+
path = Pathname.new(value)
|
82
|
+
next if !path.relative? || !Bundler.feature_flag.path_relative_to_cwd?
|
83
|
+
|
84
|
+
path = path.expand_path
|
85
|
+
|
86
|
+
root = begin
|
87
|
+
Bundler.root
|
88
|
+
rescue GemfileNotFound
|
89
|
+
Pathname.pwd.expand_path
|
90
|
+
end
|
91
|
+
|
92
|
+
path = begin
|
93
|
+
path.relative_path_from(root)
|
94
|
+
rescue ArgumentError
|
95
|
+
path
|
96
|
+
end
|
97
|
+
|
98
|
+
set(settings, key, path.to_s)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|