bundler 1.15.4 → 1.16.0.pre.1
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 +43 -0
- data/README.md +12 -7
- data/exe/bundle +1 -1
- data/exe/bundle_ruby +4 -3
- data/lib/bundler.rb +47 -37
- data/lib/bundler/build_metadata.rb +38 -0
- data/lib/bundler/capistrano.rb +5 -0
- data/lib/bundler/cli.rb +155 -67
- data/lib/bundler/cli/add.rb +0 -1
- data/lib/bundler/cli/binstubs.rb +9 -7
- 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 +1 -0
- data/lib/bundler/cli/exec.rb +2 -1
- data/lib/bundler/cli/gem.rb +3 -2
- data/lib/bundler/cli/info.rb +0 -1
- data/lib/bundler/cli/init.rb +17 -6
- data/lib/bundler/cli/inject.rb +1 -0
- data/lib/bundler/cli/install.rb +61 -61
- data/lib/bundler/cli/issue.rb +1 -1
- data/lib/bundler/cli/list.rb +22 -0
- data/lib/bundler/cli/lock.rb +0 -1
- data/lib/bundler/cli/open.rb +2 -2
- data/lib/bundler/cli/outdated.rb +13 -8
- 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 +9 -2
- data/lib/bundler/cli/show.rb +0 -1
- data/lib/bundler/cli/update.rb +31 -5
- data/lib/bundler/cli/viz.rb +1 -0
- data/lib/bundler/compact_index_client.rb +1 -0
- data/lib/bundler/compact_index_client/cache.rb +1 -0
- data/lib/bundler/compact_index_client/updater.rb +3 -2
- data/lib/bundler/compatibility_guard.rb +14 -0
- data/lib/bundler/constants.rb +1 -0
- data/lib/bundler/current_ruby.rb +5 -4
- data/lib/bundler/definition.rb +140 -95
- data/lib/bundler/dep_proxy.rb +2 -0
- data/lib/bundler/dependency.rb +6 -7
- data/lib/bundler/deployment.rb +1 -1
- data/lib/bundler/deprecate.rb +1 -0
- data/lib/bundler/dsl.rb +97 -62
- data/lib/bundler/endpoint_specification.rb +9 -0
- data/lib/bundler/env.rb +63 -27
- data/lib/bundler/environment_preserver.rb +26 -6
- data/lib/bundler/errors.rb +1 -0
- data/lib/bundler/feature_flag.rb +39 -4
- data/lib/bundler/fetcher.rb +15 -8
- data/lib/bundler/fetcher/base.rb +1 -0
- data/lib/bundler/fetcher/compact_index.rb +2 -11
- data/lib/bundler/fetcher/dependency.rb +1 -0
- data/lib/bundler/fetcher/downloader.rb +1 -0
- data/lib/bundler/fetcher/index.rb +1 -0
- data/lib/bundler/friendly_errors.rb +2 -1
- data/lib/bundler/gem_helper.rb +14 -9
- 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 +1 -0
- data/lib/bundler/gemdeps.rb +1 -0
- data/lib/bundler/graph.rb +1 -0
- data/lib/bundler/index.rb +15 -8
- data/lib/bundler/injector.rb +25 -22
- data/lib/bundler/inline.rb +5 -7
- data/lib/bundler/installer.rb +93 -45
- data/lib/bundler/installer/gem_installer.rb +2 -0
- data/lib/bundler/installer/parallel_installer.rb +73 -42
- data/lib/bundler/installer/standalone.rb +1 -0
- data/lib/bundler/lazy_specification.rb +2 -1
- 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 +6 -3
- data/lib/bundler/plugin.rb +1 -0
- data/lib/bundler/plugin/api/source.rb +8 -0
- 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 +1 -0
- data/lib/bundler/remote_specification.rb +1 -0
- data/lib/bundler/resolver.rb +138 -191
- data/lib/bundler/resolver/spec_group.rb +111 -0
- data/lib/bundler/retry.rb +1 -0
- data/lib/bundler/ruby_dsl.rb +1 -0
- data/lib/bundler/ruby_version.rb +1 -0
- data/lib/bundler/rubygems_ext.rb +5 -4
- data/lib/bundler/rubygems_gem_installer.rb +23 -0
- data/lib/bundler/rubygems_integration.rb +56 -27
- data/lib/bundler/runtime.rb +3 -5
- data/lib/bundler/settings.rb +177 -76
- data/lib/bundler/settings/validator.rb +79 -0
- data/lib/bundler/setup.rb +1 -0
- data/lib/bundler/shared_helpers.rb +86 -26
- data/lib/bundler/similarity_detector.rb +1 -0
- data/lib/bundler/source.rb +32 -0
- data/lib/bundler/source/gemspec.rb +1 -0
- data/lib/bundler/source/git.rb +21 -16
- data/lib/bundler/source/git/git_proxy.rb +14 -10
- data/lib/bundler/source/metadata.rb +63 -0
- data/lib/bundler/source/path.rb +8 -8
- data/lib/bundler/source/path/installer.rb +2 -0
- data/lib/bundler/source/rubygems.rb +131 -84
- data/lib/bundler/source/rubygems/remote.rb +3 -0
- data/lib/bundler/source_list.rb +75 -15
- data/lib/bundler/spec_set.rb +2 -1
- data/lib/bundler/ssl_certs/certificate_manager.rb +2 -1
- data/lib/bundler/stub_specification.rb +1 -0
- data/lib/bundler/templates/Executable +4 -0
- data/lib/bundler/templates/Executable.bundler +105 -0
- data/lib/bundler/templates/Gemfile +1 -0
- data/lib/bundler/templates/gems.rb +8 -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/newgem.gemspec.tt +4 -1
- data/lib/bundler/templates/newgem/rspec.tt +1 -0
- data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +0 -2
- data/lib/bundler/ui.rb +1 -0
- data/lib/bundler/ui/rg_proxy.rb +1 -0
- data/lib/bundler/ui/shell.rb +15 -4
- data/lib/bundler/ui/silent.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.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 +3 -2
- 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 +3 -2
- data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +69 -6
- 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 +487 -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/net-http-persistent/lib/net/http/persistent.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 +34 -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/man/bundle-add.1 +43 -0
- data/man/bundle-add.1.txt +40 -0
- data/man/bundle-binstubs.1 +40 -0
- data/man/bundle-binstubs.1.txt +48 -0
- data/man/bundle-binstubs.ronn +14 -0
- data/man/bundle-check.1 +31 -0
- data/man/bundle-check.1.txt +32 -0
- data/man/bundle-clean.1 +24 -0
- data/man/bundle-clean.1.txt +26 -0
- data/man/bundle-config.1 +455 -0
- data/man/bundle-config.1.txt +491 -0
- data/man/bundle-config.ronn +133 -79
- data/man/bundle-exec.1 +165 -0
- data/man/bundle-exec.1.txt +178 -0
- data/man/bundle-exec.ronn +7 -0
- data/man/bundle-gem.1 +80 -0
- data/man/bundle-gem.1.txt +91 -0
- data/man/bundle-gem.ronn +2 -1
- data/man/bundle-info.1 +20 -0
- data/man/bundle-info.1.txt +21 -0
- data/man/bundle-init.1 +20 -0
- data/man/bundle-init.1.txt +24 -0
- data/man/bundle-inject.1 +33 -0
- data/man/bundle-inject.1.txt +32 -0
- data/man/bundle-install.1 +305 -0
- data/man/bundle-install.1.txt +385 -0
- data/man/bundle-install.ronn +32 -32
- data/man/bundle-list.1 +20 -0
- data/man/bundle-list.1.txt +21 -0
- data/man/bundle-list.ronn +15 -0
- data/man/bundle-lock.1 +84 -0
- data/man/bundle-lock.1.txt +93 -0
- data/man/bundle-open.1 +32 -0
- data/man/bundle-open.1.txt +29 -0
- data/man/bundle-outdated.1 +151 -0
- data/man/bundle-outdated.1.txt +127 -0
- data/man/bundle-outdated.ronn +1 -1
- data/man/bundle-package.1 +55 -0
- data/man/bundle-package.1.txt +79 -0
- data/man/bundle-package.ronn +5 -0
- data/man/bundle-platform.1 +61 -0
- 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 +24 -3
- data/man/bundle-show.1 +23 -0
- data/man/bundle-show.1.txt +25 -0
- data/man/bundle-update.1 +390 -0
- data/man/bundle-update.1.txt +386 -0
- data/man/bundle-update.ronn +2 -2
- data/man/bundle-viz.1 +39 -0
- data/man/bundle-viz.1.txt +38 -0
- data/man/bundle-viz.ronn +5 -5
- data/man/bundle.1 +132 -0
- data/man/bundle.1.txt +113 -0
- data/man/bundle.ronn +5 -2
- data/man/gemfile.5 +679 -0
- data/man/gemfile.5.ronn +31 -0
- data/man/gemfile.5.txt +636 -0
- data/man/index.txt +23 -0
- metadata +21 -36
- 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 -338
- data/bin/rake +0 -19
- data/bin/rspec +0 -15
- data/bin/rubocop +0 -17
- data/bin/with_rubygems +0 -39
- data/bundler.gemspec +0 -48
- 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 -27
- data/doc/documentation/README.md +0 -29
- data/doc/documentation/VISION.md +0 -26
- data/doc/documentation/WRITING.md +0 -54
- data/task/release.rake +0 -116
data/lib/bundler/runtime.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "digest/sha1"
|
3
4
|
|
4
5
|
module Bundler
|
@@ -11,7 +12,7 @@ module Bundler
|
|
11
12
|
end
|
12
13
|
|
13
14
|
def setup(*groups)
|
14
|
-
@definition.ensure_equivalent_gemfile_and_lockfile if Bundler.
|
15
|
+
@definition.ensure_equivalent_gemfile_and_lockfile if Bundler.frozen?
|
15
16
|
|
16
17
|
groups.map!(&:to_sym)
|
17
18
|
|
@@ -262,9 +263,6 @@ module Bundler
|
|
262
263
|
end
|
263
264
|
|
264
265
|
def setup_manpath
|
265
|
-
# Store original MANPATH for restoration later in with_clean_env()
|
266
|
-
ENV["BUNDLER_ORIG_MANPATH"] = ENV["MANPATH"]
|
267
|
-
|
268
266
|
# Add man/ subdirectories from activated bundles to MANPATH for man(1)
|
269
267
|
manuals = $LOAD_PATH.map do |path|
|
270
268
|
man_subdir = path.sub(/lib$/, "man")
|
@@ -272,7 +270,7 @@ module Bundler
|
|
272
270
|
end.compact
|
273
271
|
|
274
272
|
return if manuals.empty?
|
275
|
-
|
273
|
+
Bundler::SharedHelpers.set_env "MANPATH", manuals.concat(
|
276
274
|
ENV["MANPATH"].to_s.split(File::PATH_SEPARATOR)
|
277
275
|
).uniq.join(File::PATH_SEPARATOR)
|
278
276
|
end
|
data/lib/bundler/settings.rb
CHANGED
@@ -1,40 +1,71 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "uri"
|
3
4
|
|
4
5
|
module Bundler
|
5
6
|
class Settings
|
6
7
|
autoload :Mirror, "bundler/mirror"
|
7
8
|
autoload :Mirrors, "bundler/mirror"
|
9
|
+
autoload :Validator, "bundler/settings/validator"
|
8
10
|
|
9
|
-
BOOL_KEYS = %w
|
11
|
+
BOOL_KEYS = %w[
|
12
|
+
allow_bundler_dependency_conflicts
|
13
|
+
allow_deployment_source_credential_changes
|
10
14
|
allow_offline_install
|
15
|
+
auto_clean_without_path
|
11
16
|
auto_install
|
12
17
|
cache_all
|
13
18
|
cache_all_platforms
|
19
|
+
cache_command_is_package
|
20
|
+
console_command
|
21
|
+
default_install_uses_path
|
22
|
+
deployment
|
23
|
+
deployment_means_frozen
|
14
24
|
disable_checksum_validation
|
15
25
|
disable_exec_load
|
16
26
|
disable_local_branch_check
|
27
|
+
disable_multisource
|
17
28
|
disable_shared_gems
|
18
29
|
disable_version_check
|
30
|
+
error_on_stderr
|
19
31
|
force_ruby_platform
|
32
|
+
forget_cli_options
|
20
33
|
frozen
|
21
34
|
gem.coc
|
22
35
|
gem.mit
|
36
|
+
global_gem_cache
|
23
37
|
ignore_messages
|
38
|
+
init_gems_rb
|
39
|
+
list_command
|
40
|
+
lockfile_uses_separate_rubygems_sources
|
24
41
|
major_deprecations
|
25
42
|
no_install
|
26
43
|
no_prune
|
27
44
|
only_update_to_newer_versions
|
45
|
+
path.system
|
28
46
|
plugins
|
47
|
+
prefer_gems_rb
|
48
|
+
print_only_version_number
|
49
|
+
setup_makes_kernel_gem_public
|
29
50
|
silence_root_warning
|
30
|
-
|
31
|
-
|
32
|
-
|
51
|
+
skip_default_git_sources
|
52
|
+
specific_platform
|
53
|
+
suppress_install_using_messages
|
54
|
+
unlock_source_unlocks_spec
|
55
|
+
update_requires_all_flag
|
56
|
+
].freeze
|
57
|
+
|
58
|
+
NUMBER_KEYS = %w[
|
33
59
|
redirect
|
34
60
|
retry
|
35
61
|
ssl_verify_mode
|
36
62
|
timeout
|
37
|
-
|
63
|
+
].freeze
|
64
|
+
|
65
|
+
ARRAY_KEYS = %w[
|
66
|
+
with
|
67
|
+
without
|
68
|
+
].freeze
|
38
69
|
|
39
70
|
DEFAULT_CONFIG = {
|
40
71
|
:redirect => 5,
|
@@ -42,19 +73,16 @@ module Bundler
|
|
42
73
|
:timeout => 10,
|
43
74
|
}.freeze
|
44
75
|
|
45
|
-
attr_accessor :cli_flags_given
|
46
|
-
|
47
76
|
def initialize(root = nil)
|
48
77
|
@root = root
|
49
78
|
@local_config = load_config(local_config_file)
|
50
79
|
@global_config = load_config(global_config_file)
|
51
|
-
@cli_flags_given = false
|
52
80
|
@temporary = {}
|
53
81
|
end
|
54
82
|
|
55
83
|
def [](name)
|
56
84
|
key = key_for(name)
|
57
|
-
value = @temporary.fetch(
|
85
|
+
value = @temporary.fetch(key) do
|
58
86
|
@local_config.fetch(key) do
|
59
87
|
ENV.fetch(key) do
|
60
88
|
@global_config.fetch(key) do
|
@@ -65,48 +93,59 @@ module Bundler
|
|
65
93
|
converted_value(value, name)
|
66
94
|
end
|
67
95
|
|
68
|
-
def
|
69
|
-
if
|
96
|
+
def set_command_option(key, value)
|
97
|
+
if Bundler.feature_flag.forget_cli_options?
|
98
|
+
temporary(key => value)
|
99
|
+
value
|
100
|
+
else
|
70
101
|
command = if value.nil?
|
71
102
|
"bundle config --delete #{key}"
|
72
103
|
else
|
73
104
|
"bundle config #{key} #{Array(value).join(":")}"
|
74
105
|
end
|
75
106
|
|
76
|
-
Bundler::SharedHelpers.major_deprecation
|
107
|
+
Bundler::SharedHelpers.major_deprecation 2,\
|
77
108
|
"flags passed to commands " \
|
78
109
|
"will no longer be automatically remembered. Instead please set flags " \
|
79
110
|
"you want remembered between commands using `bundle config " \
|
80
111
|
"<setting name> <setting value>`, i.e. `#{command}`"
|
112
|
+
|
113
|
+
set_local(key, value)
|
81
114
|
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def set_command_option_if_given(key, value)
|
118
|
+
return if value.nil?
|
119
|
+
set_command_option(key, value)
|
120
|
+
end
|
121
|
+
|
122
|
+
def set_local(key, value)
|
82
123
|
local_config_file || raise(GemfileNotFound, "Could not locate Gemfile")
|
124
|
+
|
83
125
|
set_key(key, value, @local_config, local_config_file)
|
84
126
|
end
|
85
|
-
alias_method :set_local, :[]=
|
86
127
|
|
87
128
|
def temporary(update)
|
88
|
-
existing = Hash[update.map {|k, _| [k, @temporary[k]] }]
|
89
|
-
|
129
|
+
existing = Hash[update.map {|k, _| [k, @temporary[key_for(k)]] }]
|
130
|
+
update.each do |k, v|
|
131
|
+
set_key(k, v, @temporary, nil)
|
132
|
+
end
|
90
133
|
return unless block_given?
|
91
134
|
begin
|
92
135
|
yield
|
93
136
|
ensure
|
94
|
-
existing.each {|k, v|
|
137
|
+
existing.each {|k, v| set_key(k, v, @temporary, nil) }
|
95
138
|
end
|
96
139
|
end
|
97
140
|
|
98
|
-
def delete(key)
|
99
|
-
@local_config.delete(key_for(key))
|
100
|
-
end
|
101
|
-
|
102
141
|
def set_global(key, value)
|
103
142
|
set_key(key, value, @global_config, global_config_file)
|
104
143
|
end
|
105
144
|
|
106
145
|
def all
|
107
|
-
env_keys = ENV.keys.
|
146
|
+
env_keys = ENV.keys.grep(/\ABUNDLE_.+/)
|
108
147
|
|
109
|
-
keys = @global_config.keys | @local_config.keys | env_keys
|
148
|
+
keys = @temporary.keys | @global_config.keys | @local_config.keys | env_keys
|
110
149
|
|
111
150
|
keys.map do |key|
|
112
151
|
key.sub(/^BUNDLE_/, "").gsub(/__/, ".").downcase
|
@@ -132,7 +171,7 @@ module Bundler
|
|
132
171
|
|
133
172
|
def gem_mirrors
|
134
173
|
all.inject(Mirrors.new) do |mirrors, k|
|
135
|
-
mirrors.parse(k, self[k]) if k
|
174
|
+
mirrors.parse(k, self[k]) if k.start_with?("mirror.")
|
136
175
|
mirrors
|
137
176
|
end
|
138
177
|
end
|
@@ -140,6 +179,7 @@ module Bundler
|
|
140
179
|
def locations(key)
|
141
180
|
key = key_for(key)
|
142
181
|
locations = {}
|
182
|
+
locations[:temporary] = @temporary[key] if @temporary.key?(key)
|
143
183
|
locations[:local] = @local_config[key] if @local_config.key?(key)
|
144
184
|
locations[:env] = ENV[key] if ENV[key]
|
145
185
|
locations[:global] = @global_config[key] if @global_config.key?(key)
|
@@ -151,6 +191,11 @@ module Bundler
|
|
151
191
|
key = key_for(exposed_key)
|
152
192
|
|
153
193
|
locations = []
|
194
|
+
|
195
|
+
if @temporary.key?(key)
|
196
|
+
locations << "Set for the current command: #{converted_value(@temporary[key], exposed_key).inspect}"
|
197
|
+
end
|
198
|
+
|
154
199
|
if @local_config.key?(key)
|
155
200
|
locations << "Set for your local app (#{local_config_file}): #{converted_value(@local_config[key], exposed_key).inspect}"
|
156
201
|
end
|
@@ -167,37 +212,56 @@ module Bundler
|
|
167
212
|
locations
|
168
213
|
end
|
169
214
|
|
170
|
-
|
171
|
-
|
172
|
-
|
215
|
+
# for legacy reasons, the ruby scope isnt appended when the setting comes from ENV or the global config,
|
216
|
+
# nor do we respect :disable_shared_gems
|
217
|
+
def path
|
218
|
+
key = key_for(:path)
|
219
|
+
path = ENV[key] || @global_config[key]
|
220
|
+
if path && !@temporary.key?(key) && !@local_config.key?(key)
|
221
|
+
return Path.new(path, false, false, false)
|
222
|
+
end
|
173
223
|
|
174
|
-
|
175
|
-
|
224
|
+
system_path = self["path.system"] || (self[:disable_shared_gems] == false)
|
225
|
+
Path.new(self[:path], true, system_path, Bundler.feature_flag.default_install_uses_path?)
|
176
226
|
end
|
177
227
|
|
178
|
-
|
179
|
-
|
180
|
-
|
228
|
+
Path = Struct.new(:explicit_path, :append_ruby_scope, :system_path, :default_install_uses_path) do
|
229
|
+
def path
|
230
|
+
path = base_path
|
231
|
+
path = File.join(path, Bundler.ruby_scope) if append_ruby_scope && !use_system_gems?
|
232
|
+
path
|
233
|
+
end
|
181
234
|
|
182
|
-
|
183
|
-
|
184
|
-
|
235
|
+
def use_system_gems?
|
236
|
+
return true if system_path
|
237
|
+
return false if explicit_path
|
238
|
+
!default_install_uses_path
|
239
|
+
end
|
185
240
|
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
241
|
+
def base_path
|
242
|
+
path = explicit_path
|
243
|
+
path ||= ".bundle" unless use_system_gems?
|
244
|
+
path ||= Bundler.rubygems.gem_dir
|
245
|
+
path
|
246
|
+
end
|
191
247
|
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
248
|
+
def validate!
|
249
|
+
return unless explicit_path && system_path
|
250
|
+
path = Bundler.settings.pretty_values_for(:path)
|
251
|
+
path.unshift(nil, "path:") unless path.empty?
|
252
|
+
system_path = Bundler.settings.pretty_values_for("path.system")
|
253
|
+
system_path.unshift(nil, "path.system:") unless system_path.empty?
|
254
|
+
disable_shared_gems = Bundler.settings.pretty_values_for(:disable_shared_gems)
|
255
|
+
disable_shared_gems.unshift(nil, "disable_shared_gems:") unless disable_shared_gems.empty?
|
256
|
+
raise InvalidOption,
|
257
|
+
"Using a custom path while using system gems is unsupported.\n#{path.join("\n")}\n#{system_path.join("\n")}\n#{disable_shared_gems.join("\n")}"
|
196
258
|
end
|
197
259
|
end
|
198
260
|
|
199
261
|
def allow_sudo?
|
200
|
-
|
262
|
+
key = key_for(:path)
|
263
|
+
path_configured = @temporary.key?(key) || @local_config.key?(key)
|
264
|
+
!path_configured
|
201
265
|
end
|
202
266
|
|
203
267
|
def ignore_config?
|
@@ -205,14 +269,17 @@ module Bundler
|
|
205
269
|
end
|
206
270
|
|
207
271
|
def app_cache_path
|
208
|
-
@app_cache_path ||=
|
209
|
-
path = self[:cache_path] || "vendor/cache"
|
210
|
-
raise InvalidOption, "Cache path must be relative to the bundle path" if path.start_with?("/")
|
211
|
-
path
|
212
|
-
end
|
272
|
+
@app_cache_path ||= self[:cache_path] || "vendor/cache"
|
213
273
|
end
|
214
274
|
|
215
|
-
|
275
|
+
def validate!
|
276
|
+
all.each do |raw_key|
|
277
|
+
[@local_config, ENV, @global_config].each do |settings|
|
278
|
+
value = converted_value(settings[key_for(raw_key)], raw_key)
|
279
|
+
Validator.validate!(raw_key, value, settings.to_hash.dup)
|
280
|
+
end
|
281
|
+
end
|
282
|
+
end
|
216
283
|
|
217
284
|
def key_for(key)
|
218
285
|
key = Settings.normalize_uri(key).to_s if key.is_a?(String) && /https?:/ =~ key
|
@@ -220,15 +287,17 @@ module Bundler
|
|
220
287
|
"BUNDLE_#{key}"
|
221
288
|
end
|
222
289
|
|
290
|
+
private
|
291
|
+
|
223
292
|
def parent_setting_for(name)
|
224
|
-
|
293
|
+
split_specific_setting_for(name)[0]
|
225
294
|
end
|
226
295
|
|
227
|
-
def
|
228
|
-
|
296
|
+
def specific_gem_for(name)
|
297
|
+
split_specific_setting_for(name)[1]
|
229
298
|
end
|
230
299
|
|
231
|
-
def
|
300
|
+
def split_specific_setting_for(name)
|
232
301
|
name.split(".")
|
233
302
|
end
|
234
303
|
|
@@ -245,43 +314,57 @@ module Bundler
|
|
245
314
|
end
|
246
315
|
end
|
247
316
|
|
248
|
-
def is_num(
|
249
|
-
NUMBER_KEYS.include?(
|
317
|
+
def is_num(key)
|
318
|
+
NUMBER_KEYS.include?(key.to_s)
|
250
319
|
end
|
251
320
|
|
252
|
-
def
|
253
|
-
|
321
|
+
def is_array(key)
|
322
|
+
ARRAY_KEYS.include?(key.to_s)
|
254
323
|
end
|
255
324
|
|
256
|
-
def
|
257
|
-
|
325
|
+
def to_array(value)
|
326
|
+
return [] unless value
|
327
|
+
value.split(":").map(&:to_sym)
|
258
328
|
end
|
259
329
|
|
260
|
-
def
|
261
|
-
|
330
|
+
def array_to_s(array)
|
331
|
+
array = Array(array)
|
332
|
+
return nil if array.empty?
|
333
|
+
array.join(":").tr(" ", ":")
|
334
|
+
end
|
262
335
|
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
336
|
+
def set_key(raw_key, value, hash, file)
|
337
|
+
raw_key = raw_key.to_s
|
338
|
+
value = array_to_s(value) if is_array(raw_key)
|
339
|
+
|
340
|
+
key = key_for(raw_key)
|
341
|
+
|
342
|
+
return if hash[key] == value
|
343
|
+
|
344
|
+
hash[key] = value
|
345
|
+
hash.delete(key) if value.nil?
|
272
346
|
|
273
|
-
value
|
347
|
+
Validator.validate!(raw_key, converted_value(value, raw_key), hash)
|
348
|
+
|
349
|
+
return unless file
|
350
|
+
SharedHelpers.filesystem_access(file) do |p|
|
351
|
+
FileUtils.mkdir_p(p.dirname)
|
352
|
+
require "bundler/yaml_serializer"
|
353
|
+
p.open("w") {|f| f.write(YAMLSerializer.dump(hash)) }
|
354
|
+
end
|
274
355
|
end
|
275
356
|
|
276
357
|
def converted_value(value, key)
|
277
|
-
if
|
358
|
+
if is_array(key)
|
359
|
+
to_array(value)
|
360
|
+
elsif value.nil?
|
278
361
|
nil
|
279
362
|
elsif is_bool(key) || value == "false"
|
280
363
|
to_bool(value)
|
281
364
|
elsif is_num(key)
|
282
365
|
value.to_i
|
283
366
|
else
|
284
|
-
value
|
367
|
+
value.to_s
|
285
368
|
end
|
286
369
|
end
|
287
370
|
|
@@ -325,16 +408,34 @@ module Bundler
|
|
325
408
|
end
|
326
409
|
end
|
327
410
|
|
411
|
+
PER_URI_OPTIONS = %w[
|
412
|
+
fallback_timeout
|
413
|
+
].freeze
|
414
|
+
|
415
|
+
NORMALIZE_URI_OPTIONS_PATTERN =
|
416
|
+
/
|
417
|
+
\A
|
418
|
+
(\w+\.)? # optional prefix key
|
419
|
+
(https?.*?) # URI
|
420
|
+
(\.#{Regexp.union(PER_URI_OPTIONS)})? # optional suffix key
|
421
|
+
\z
|
422
|
+
/ix
|
423
|
+
|
328
424
|
# TODO: duplicates Rubygems#normalize_uri
|
329
425
|
# TODO: is this the correct place to validate mirror URIs?
|
330
426
|
def self.normalize_uri(uri)
|
331
427
|
uri = uri.to_s
|
332
|
-
|
428
|
+
if uri =~ NORMALIZE_URI_OPTIONS_PATTERN
|
429
|
+
prefix = $1
|
430
|
+
uri = $2
|
431
|
+
suffix = $3
|
432
|
+
end
|
433
|
+
uri = "#{uri}/" unless uri.end_with?("/")
|
333
434
|
uri = URI(uri)
|
334
435
|
unless uri.absolute?
|
335
436
|
raise ArgumentError, format("Gem sources must be absolute. You provided '%s'.", uri)
|
336
437
|
end
|
337
|
-
uri
|
438
|
+
"#{prefix}#{uri}#{suffix}"
|
338
439
|
end
|
339
440
|
end
|
340
441
|
end
|