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
@@ -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
|
data/lib/bundler/setup.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
2
|
+
|
3
3
|
require "bundler/shared_helpers"
|
4
4
|
|
5
5
|
if Bundler::SharedHelpers.in_bundle?
|
@@ -20,12 +20,9 @@ if Bundler::SharedHelpers.in_bundle?
|
|
20
20
|
Bundler.setup
|
21
21
|
end
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
bundler_lib = File.expand_path("../..", __FILE__)
|
27
|
-
$LOAD_PATH.unshift(bundler_lib) unless $LOAD_PATH.include?(bundler_lib)
|
28
|
-
end
|
23
|
+
# Add bundler to the load path after disabling system gems
|
24
|
+
bundler_lib = File.expand_path("../..", __FILE__)
|
25
|
+
$LOAD_PATH.unshift(bundler_lib) unless $LOAD_PATH.include?(bundler_lib)
|
29
26
|
|
30
27
|
Bundler.ui = nil
|
31
28
|
end
|
@@ -1,13 +1,18 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "bundler/compatibility_guard"
|
4
|
+
|
2
5
|
require "pathname"
|
3
6
|
require "rubygems"
|
4
7
|
|
8
|
+
require "bundler/version"
|
5
9
|
require "bundler/constants"
|
6
10
|
require "bundler/rubygems_integration"
|
7
11
|
require "bundler/current_ruby"
|
8
12
|
|
9
13
|
module Gem
|
10
14
|
class Dependency
|
15
|
+
# This is only needed for RubyGems < 1.4
|
11
16
|
unless method_defined? :requirement
|
12
17
|
def requirement
|
13
18
|
version_requirements
|
@@ -18,12 +23,16 @@ end
|
|
18
23
|
|
19
24
|
module Bundler
|
20
25
|
module SharedHelpers
|
21
|
-
|
26
|
+
def root
|
27
|
+
gemfile = find_gemfile
|
28
|
+
raise GemfileNotFound, "Could not locate Gemfile" unless gemfile
|
29
|
+
Pathname.new(gemfile).untaint.expand_path.parent
|
30
|
+
end
|
22
31
|
|
23
32
|
def default_gemfile
|
24
|
-
gemfile = find_gemfile
|
33
|
+
gemfile = find_gemfile(:order_matters)
|
25
34
|
raise GemfileNotFound, "Could not locate Gemfile" unless gemfile
|
26
|
-
Pathname.new(gemfile).untaint
|
35
|
+
Pathname.new(gemfile).untaint.expand_path
|
27
36
|
end
|
28
37
|
|
29
38
|
def default_lockfile
|
@@ -39,10 +48,12 @@ module Bundler
|
|
39
48
|
bundle_dir = find_directory(".bundle")
|
40
49
|
return nil unless bundle_dir
|
41
50
|
|
42
|
-
|
51
|
+
bundle_dir = Pathname.new(bundle_dir)
|
52
|
+
|
53
|
+
global_bundle_dir = Bundler.user_home.join(".bundle")
|
43
54
|
return nil if bundle_dir == global_bundle_dir
|
44
55
|
|
45
|
-
|
56
|
+
bundle_dir
|
46
57
|
end
|
47
58
|
|
48
59
|
def in_bundle?
|
@@ -62,7 +73,7 @@ module Bundler
|
|
62
73
|
end
|
63
74
|
|
64
75
|
def with_clean_git_env(&block)
|
65
|
-
keys = %w
|
76
|
+
keys = %w[GIT_DIR GIT_WORK_TREE]
|
66
77
|
old_env = keys.inject({}) do |h, k|
|
67
78
|
h.update(k => ENV[k])
|
68
79
|
end
|
@@ -101,16 +112,24 @@ module Bundler
|
|
101
112
|
# end
|
102
113
|
#
|
103
114
|
# @see {Bundler::PermissionError}
|
104
|
-
def filesystem_access(path, action = :write)
|
105
|
-
yield
|
115
|
+
def filesystem_access(path, action = :write, &block)
|
116
|
+
# Use block.call instead of yield because of a bug in Ruby 2.2.2
|
117
|
+
# See https://github.com/bundler/bundler/issues/5341 for details
|
118
|
+
block.call(path.dup.untaint)
|
106
119
|
rescue Errno::EACCES
|
107
120
|
raise PermissionError.new(path, action)
|
108
121
|
rescue Errno::EAGAIN
|
109
122
|
raise TemporaryResourceError.new(path, action)
|
110
123
|
rescue Errno::EPROTO
|
111
124
|
raise VirtualProtocolError.new
|
125
|
+
rescue Errno::ENOSPC
|
126
|
+
raise NoSpaceOnDeviceError.new(path, action)
|
112
127
|
rescue *[const_get_safely(:ENOTSUP, Errno)].compact
|
113
128
|
raise OperationNotSupportedError.new(path, action)
|
129
|
+
rescue Errno::EEXIST, Errno::ENOENT
|
130
|
+
raise
|
131
|
+
rescue SystemCallError => e
|
132
|
+
raise GenericSystemCallError.new(e, "There was an error accessing `#{path}`.")
|
114
133
|
end
|
115
134
|
|
116
135
|
def const_get_safely(constant_name, namespace)
|
@@ -120,28 +139,120 @@ module Bundler
|
|
120
139
|
namespace.const_get(constant_name)
|
121
140
|
end
|
122
141
|
|
123
|
-
def major_deprecation(message)
|
142
|
+
def major_deprecation(major_version, message)
|
143
|
+
if Bundler.bundler_major_version >= major_version
|
144
|
+
require "bundler/errors"
|
145
|
+
raise DeprecatedError, "[REMOVED FROM #{major_version}.0] #{message}"
|
146
|
+
end
|
147
|
+
|
124
148
|
return unless prints_major_deprecations?
|
125
149
|
@major_deprecation_ui ||= Bundler::UI::Shell.new("no-color" => true)
|
126
150
|
ui = Bundler.ui.is_a?(@major_deprecation_ui.class) ? Bundler.ui : @major_deprecation_ui
|
127
|
-
ui.warn("[DEPRECATED FOR #{
|
151
|
+
ui.warn("[DEPRECATED FOR #{major_version}.0] #{message}")
|
128
152
|
end
|
129
153
|
|
130
154
|
def print_major_deprecations!
|
131
|
-
|
155
|
+
multiple_gemfiles = search_up(".") do |dir|
|
156
|
+
gemfiles = gemfile_names.select {|gf| File.file? File.expand_path(gf, dir) }
|
157
|
+
next if gemfiles.empty?
|
158
|
+
break false if gemfiles.size == 1
|
159
|
+
end
|
160
|
+
if multiple_gemfiles && Bundler.bundler_major_version == 1
|
161
|
+
Bundler::SharedHelpers.major_deprecation 2, \
|
162
|
+
"gems.rb and gems.locked will be preferred to Gemfile and Gemfile.lock."
|
163
|
+
end
|
164
|
+
|
132
165
|
if RUBY_VERSION < "2"
|
133
|
-
major_deprecation("Bundler will only support ruby >= 2.0, you are running #{RUBY_VERSION}")
|
166
|
+
major_deprecation(2, "Bundler will only support ruby >= 2.0, you are running #{RUBY_VERSION}")
|
134
167
|
end
|
135
168
|
return if Bundler.rubygems.provides?(">= 2")
|
136
|
-
major_deprecation("Bundler will only support rubygems >= 2.0, you are running #{Bundler.rubygems.version}")
|
169
|
+
major_deprecation(2, "Bundler will only support rubygems >= 2.0, you are running #{Bundler.rubygems.version}")
|
170
|
+
end
|
171
|
+
|
172
|
+
def trap(signal, override = false, &block)
|
173
|
+
prior = Signal.trap(signal) do
|
174
|
+
block.call
|
175
|
+
prior.call unless override
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
def ensure_same_dependencies(spec, old_deps, new_deps)
|
180
|
+
new_deps = new_deps.reject {|d| d.type == :development }
|
181
|
+
old_deps = old_deps.reject {|d| d.type == :development }
|
182
|
+
|
183
|
+
without_type = proc {|d| Gem::Dependency.new(d.name, d.requirements_list.sort) }
|
184
|
+
new_deps.map!(&without_type)
|
185
|
+
old_deps.map!(&without_type)
|
186
|
+
|
187
|
+
extra_deps = new_deps - old_deps
|
188
|
+
return if extra_deps.empty?
|
189
|
+
|
190
|
+
Bundler.ui.debug "#{spec.full_name} from #{spec.remote} has either corrupted API or lockfile dependencies" \
|
191
|
+
" (was expecting #{old_deps.map(&:to_s)}, but the real spec has #{new_deps.map(&:to_s)})"
|
192
|
+
raise APIResponseMismatchError,
|
193
|
+
"Downloading #{spec.full_name} revealed dependencies not in the API or the lockfile (#{extra_deps.join(", ")})." \
|
194
|
+
"\nEither installing with `--full-index` or running `bundle update #{spec.name}` should fix the problem."
|
195
|
+
end
|
196
|
+
|
197
|
+
def pretty_dependency(dep, print_source = false)
|
198
|
+
msg = String.new(dep.name)
|
199
|
+
msg << " (#{dep.requirement})" unless dep.requirement == Gem::Requirement.default
|
200
|
+
|
201
|
+
if dep.is_a?(Bundler::Dependency)
|
202
|
+
platform_string = dep.platforms.join(", ")
|
203
|
+
msg << " " << platform_string if !platform_string.empty? && platform_string != Gem::Platform::RUBY
|
204
|
+
end
|
205
|
+
|
206
|
+
msg << " from the `#{dep.source}` source" if print_source && dep.source
|
207
|
+
msg
|
208
|
+
end
|
209
|
+
|
210
|
+
def md5_available?
|
211
|
+
return @md5_available if defined?(@md5_available)
|
212
|
+
@md5_available = begin
|
213
|
+
require "openssl"
|
214
|
+
OpenSSL::Digest::MD5.digest("")
|
215
|
+
true
|
216
|
+
rescue LoadError
|
217
|
+
true
|
218
|
+
rescue OpenSSL::Digest::DigestError
|
219
|
+
false
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
def digest(name)
|
224
|
+
require "digest"
|
225
|
+
Digest(name)
|
226
|
+
end
|
227
|
+
|
228
|
+
def write_to_gemfile(gemfile_path, contents)
|
229
|
+
filesystem_access(gemfile_path) {|g| File.open(g, "w") {|file| file.puts contents } }
|
137
230
|
end
|
138
231
|
|
139
232
|
private
|
140
233
|
|
141
|
-
def
|
234
|
+
def validate_bundle_path
|
235
|
+
path_separator = Bundler.rubygems.path_separator
|
236
|
+
return unless Bundler.bundle_path.to_s.split(path_separator).size > 1
|
237
|
+
message = "Your bundle path contains text matching #{path_separator.inspect}, " \
|
238
|
+
"which is the path separator for your system. Bundler cannot " \
|
239
|
+
"function correctly when the Bundle path contains the " \
|
240
|
+
"system's PATH separator. Please change your " \
|
241
|
+
"bundle path to not match #{path_separator.inspect}." \
|
242
|
+
"\nYour current bundle path is '#{Bundler.bundle_path}'."
|
243
|
+
raise Bundler::PathError, message
|
244
|
+
end
|
245
|
+
|
246
|
+
def find_gemfile(order_matters = false)
|
142
247
|
given = ENV["BUNDLE_GEMFILE"]
|
143
248
|
return given if given && !given.empty?
|
144
|
-
|
249
|
+
names = gemfile_names
|
250
|
+
names.reverse! if order_matters && Bundler.feature_flag.prefer_gems_rb?
|
251
|
+
find_file(*names)
|
252
|
+
end
|
253
|
+
|
254
|
+
def gemfile_names
|
255
|
+
["Gemfile", "gems.rb"]
|
145
256
|
end
|
146
257
|
|
147
258
|
def find_file(*names)
|
@@ -163,7 +274,15 @@ module Bundler
|
|
163
274
|
until !File.directory?(current) || current == previous
|
164
275
|
if ENV["BUNDLE_SPEC_RUN"]
|
165
276
|
# avoid stepping above the tmp directory when testing
|
166
|
-
|
277
|
+
gemspec = if ENV["BUNDLE_RUBY"] && ENV["BUNDLE_GEM"]
|
278
|
+
# for Ruby Core
|
279
|
+
"lib/bundler.gemspec"
|
280
|
+
else
|
281
|
+
"bundler.gemspec"
|
282
|
+
end
|
283
|
+
|
284
|
+
# avoid stepping above the tmp directory when testing
|
285
|
+
return nil if File.file?(File.join(current, gemspec))
|
167
286
|
end
|
168
287
|
|
169
288
|
names.each do |name|
|
@@ -175,67 +294,91 @@ module Bundler
|
|
175
294
|
end
|
176
295
|
end
|
177
296
|
|
297
|
+
def set_env(key, value)
|
298
|
+
raise ArgumentError, "new key #{key}" unless EnvironmentPreserver::BUNDLER_KEYS.include?(key)
|
299
|
+
orig_key = "#{EnvironmentPreserver::BUNDLER_PREFIX}#{key}"
|
300
|
+
orig = ENV[key]
|
301
|
+
orig ||= EnvironmentPreserver::INTENTIONALLY_NIL
|
302
|
+
ENV[orig_key] ||= orig
|
303
|
+
|
304
|
+
ENV[key] = value
|
305
|
+
end
|
306
|
+
public :set_env
|
307
|
+
|
178
308
|
def set_bundle_variables
|
179
309
|
begin
|
180
|
-
|
310
|
+
exe_file = Bundler.rubygems.bin_path("bundler", "bundle", VERSION)
|
311
|
+
unless File.exist?(exe_file)
|
312
|
+
exe_file = File.expand_path("../../../exe/bundle", __FILE__)
|
313
|
+
end
|
314
|
+
Bundler::SharedHelpers.set_env "BUNDLE_BIN_PATH", exe_file
|
181
315
|
rescue Gem::GemNotFoundException
|
182
|
-
|
316
|
+
exe_file = File.expand_path("../../../exe/bundle", __FILE__)
|
317
|
+
# for Ruby core repository
|
318
|
+
exe_file = File.expand_path("../../../../bin/bundle", __FILE__) unless File.exist?(exe_file)
|
319
|
+
Bundler::SharedHelpers.set_env "BUNDLE_BIN_PATH", exe_file
|
183
320
|
end
|
184
321
|
|
185
322
|
# Set BUNDLE_GEMFILE
|
186
|
-
|
187
|
-
|
323
|
+
Bundler::SharedHelpers.set_env "BUNDLE_GEMFILE", find_gemfile(:order_matters).to_s
|
324
|
+
Bundler::SharedHelpers.set_env "BUNDLER_VERSION", Bundler::VERSION
|
188
325
|
end
|
189
326
|
|
190
327
|
def set_path
|
328
|
+
validate_bundle_path
|
191
329
|
paths = (ENV["PATH"] || "").split(File::PATH_SEPARATOR)
|
192
330
|
paths.unshift "#{Bundler.bundle_path}/bin"
|
193
|
-
|
331
|
+
Bundler::SharedHelpers.set_env "PATH", paths.uniq.join(File::PATH_SEPARATOR)
|
194
332
|
end
|
195
333
|
|
196
334
|
def set_rubyopt
|
197
335
|
rubyopt = [ENV["RUBYOPT"]].compact
|
198
336
|
return if !rubyopt.empty? && rubyopt.first =~ %r{-rbundler/setup}
|
199
337
|
rubyopt.unshift %(-rbundler/setup)
|
200
|
-
|
338
|
+
Bundler::SharedHelpers.set_env "RUBYOPT", rubyopt.join(" ")
|
201
339
|
end
|
202
340
|
|
203
341
|
def set_rubylib
|
204
342
|
rubylib = (ENV["RUBYLIB"] || "").split(File::PATH_SEPARATOR)
|
205
|
-
rubylib.unshift
|
206
|
-
|
343
|
+
rubylib.unshift bundler_ruby_lib
|
344
|
+
Bundler::SharedHelpers.set_env "RUBYLIB", rubylib.uniq.join(File::PATH_SEPARATOR)
|
345
|
+
end
|
346
|
+
|
347
|
+
def bundler_ruby_lib
|
348
|
+
resolve_path File.expand_path("../..", __FILE__)
|
207
349
|
end
|
208
350
|
|
209
351
|
def clean_load_path
|
210
352
|
# handle 1.9 where system gems are always on the load path
|
211
|
-
|
212
|
-
me = File.expand_path("../../", __FILE__)
|
213
|
-
me = /^#{Regexp.escape(me)}/
|
353
|
+
return unless defined?(::Gem)
|
214
354
|
|
215
|
-
|
355
|
+
bundler_lib = bundler_ruby_lib
|
216
356
|
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
357
|
+
loaded_gem_paths = Bundler.rubygems.loaded_gem_paths
|
358
|
+
|
359
|
+
$LOAD_PATH.reject! do |p|
|
360
|
+
next if resolve_path(p).start_with?(bundler_lib)
|
361
|
+
loaded_gem_paths.delete(p)
|
222
362
|
end
|
363
|
+
$LOAD_PATH.uniq!
|
364
|
+
end
|
365
|
+
|
366
|
+
def resolve_path(path)
|
367
|
+
expanded = File.expand_path(path)
|
368
|
+
return expanded unless File.respond_to?(:realpath) && File.exist?(expanded)
|
369
|
+
|
370
|
+
File.realpath(expanded)
|
223
371
|
end
|
224
372
|
|
225
373
|
def prints_major_deprecations?
|
226
374
|
require "bundler"
|
227
|
-
|
375
|
+
deprecation_release = Bundler::VERSION.split(".").drop(1).include?("99")
|
376
|
+
return false if !deprecation_release && !Bundler.settings[:major_deprecations]
|
228
377
|
require "bundler/deprecate"
|
229
378
|
return false if Bundler::Deprecate.skip
|
230
379
|
true
|
231
380
|
end
|
232
381
|
|
233
|
-
def deprecate_gemfile(gemfile)
|
234
|
-
return unless gemfile && File.basename(gemfile) == "Gemfile"
|
235
|
-
Bundler::SharedHelpers.major_deprecation \
|
236
|
-
"gems.rb and gems.locked will be prefered to Gemfile and Gemfile.lock."
|
237
|
-
end
|
238
|
-
|
239
382
|
extend self
|
240
383
|
end
|
241
384
|
end
|