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/dep_proxy.rb
CHANGED
data/lib/bundler/dependency.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "rubygems/dependency"
|
3
4
|
require "bundler/shared_helpers"
|
4
5
|
require "bundler/rubygems_ext"
|
@@ -90,16 +91,14 @@ module Bundler
|
|
90
91
|
@autorequire = Array(options["require"] || []) if options.key?("require")
|
91
92
|
end
|
92
93
|
|
94
|
+
# Returns the platforms this dependency is valid for, in the same order as
|
95
|
+
# passed in the `valid_platforms` parameter
|
93
96
|
def gem_platforms(valid_platforms)
|
94
97
|
return valid_platforms if @platforms.empty?
|
95
98
|
|
96
|
-
platforms
|
97
|
-
|
98
|
-
|
99
|
-
next unless valid_platforms.include?(platform)
|
100
|
-
platforms |= [platform]
|
101
|
-
end
|
102
|
-
platforms
|
99
|
+
@gem_platforms ||= @platforms.map {|pl| PLATFORM_MAP[pl] }.compact.uniq
|
100
|
+
|
101
|
+
valid_platforms & @gem_platforms
|
103
102
|
end
|
104
103
|
|
105
104
|
def should_include?
|
data/lib/bundler/deployment.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "bundler/shared_helpers"
|
4
|
-
Bundler::SharedHelpers.major_deprecation "Bundler no longer integrates with " \
|
4
|
+
Bundler::SharedHelpers.major_deprecation 2, "Bundler no longer integrates with " \
|
5
5
|
"Capistrano, but Capistrano provides its own integration with " \
|
6
6
|
"Bundler via the capistrano-bundler gem. Use it instead."
|
7
7
|
|
data/lib/bundler/deprecate.rb
CHANGED
data/lib/bundler/dsl.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "bundler/dependency"
|
3
4
|
require "bundler/ruby_dsl"
|
4
5
|
|
@@ -14,6 +15,9 @@ module Bundler
|
|
14
15
|
|
15
16
|
VALID_PLATFORMS = Bundler::Dependency::PLATFORM_MAP.keys.freeze
|
16
17
|
|
18
|
+
VALID_KEYS = %w[group groups git path glob name branch ref tag require submodules
|
19
|
+
platform platforms type source install_if].freeze
|
20
|
+
|
17
21
|
attr_reader :gemspecs
|
18
22
|
attr_accessor :dependencies
|
19
23
|
|
@@ -30,14 +34,16 @@ module Bundler
|
|
30
34
|
@ruby_version = nil
|
31
35
|
@gemspecs = []
|
32
36
|
@gemfile = nil
|
37
|
+
@gemfiles = []
|
33
38
|
add_git_sources
|
34
39
|
end
|
35
40
|
|
36
41
|
def eval_gemfile(gemfile, contents = nil)
|
37
|
-
expanded_gemfile_path = Pathname.new(gemfile).expand_path
|
42
|
+
expanded_gemfile_path = Pathname.new(gemfile).expand_path(@gemfile && @gemfile.parent)
|
38
43
|
original_gemfile = @gemfile
|
39
44
|
@gemfile = expanded_gemfile_path
|
40
|
-
|
45
|
+
@gemfiles << expanded_gemfile_path
|
46
|
+
contents ||= Bundler.read_file(@gemfile.to_s)
|
41
47
|
instance_eval(contents.dup.untaint, gemfile.to_s, 1)
|
42
48
|
rescue Exception => e
|
43
49
|
message = "There was an error " \
|
@@ -95,10 +101,10 @@ module Bundler
|
|
95
101
|
|
96
102
|
# if there's already a dependency with this name we try to prefer one
|
97
103
|
if current = @dependencies.find {|d| d.name == dep.name }
|
104
|
+
deleted_dep = @dependencies.delete(current) if current.type == :development
|
105
|
+
|
98
106
|
if current.requirement != dep.requirement
|
99
|
-
|
100
|
-
@dependencies.delete current
|
101
|
-
else
|
107
|
+
unless deleted_dep
|
102
108
|
return if dep.type == :development
|
103
109
|
raise GemfileError, "You cannot specify the same gem twice with different version requirements.\n" \
|
104
110
|
"You specified: #{current.name} (#{current.requirement}) and #{dep.name} (#{dep.requirement})"
|
@@ -111,9 +117,7 @@ module Bundler
|
|
111
117
|
end
|
112
118
|
|
113
119
|
if current.source != dep.source
|
114
|
-
|
115
|
-
@dependencies.delete current
|
116
|
-
else
|
120
|
+
unless deleted_dep
|
117
121
|
return if dep.type == :development
|
118
122
|
raise GemfileError, "You cannot specify the same gem twice coming from different sources.\n" \
|
119
123
|
"You specified that #{dep.name} (#{dep.requirement}) should come from " \
|
@@ -128,10 +132,12 @@ module Bundler
|
|
128
132
|
def source(source, *args, &blk)
|
129
133
|
options = args.last.is_a?(Hash) ? args.pop.dup : {}
|
130
134
|
options = normalize_hash(options)
|
135
|
+
source = normalize_source(source)
|
136
|
+
|
131
137
|
if options.key?("type")
|
132
138
|
options["type"] = options["type"].to_s
|
133
139
|
unless Plugin.source?(options["type"])
|
134
|
-
raise "No sources available for #{options["type"]}"
|
140
|
+
raise InvalidOption, "No plugin sources available for #{options["type"]}"
|
135
141
|
end
|
136
142
|
|
137
143
|
unless block_given?
|
@@ -141,12 +147,10 @@ module Bundler
|
|
141
147
|
source_opts = options.merge("uri" => source)
|
142
148
|
with_source(@sources.add_plugin_source(options["type"], source_opts), &blk)
|
143
149
|
elsif block_given?
|
144
|
-
source = normalize_source(source)
|
145
150
|
with_source(@sources.add_rubygems_source("remotes" => source), &blk)
|
146
151
|
else
|
147
|
-
source = normalize_source(source)
|
148
152
|
check_primary_source_safety(@sources)
|
149
|
-
@sources.
|
153
|
+
@sources.global_rubygems_source = source
|
150
154
|
end
|
151
155
|
end
|
152
156
|
|
@@ -164,6 +168,19 @@ module Bundler
|
|
164
168
|
end
|
165
169
|
|
166
170
|
def path(path, options = {}, &blk)
|
171
|
+
unless block_given?
|
172
|
+
msg = "You can no longer specify a path source by itself. Instead, \n" \
|
173
|
+
"either use the :path option on a gem, or specify the gems that \n" \
|
174
|
+
"bundler should find in the path source by passing a block to \n" \
|
175
|
+
"the path method, like: \n\n" \
|
176
|
+
" path 'dir/containing/rails' do\n" \
|
177
|
+
" gem 'rails'\n" \
|
178
|
+
" end\n\n"
|
179
|
+
|
180
|
+
raise DeprecatedError, msg if Bundler.feature_flag.disable_multisource?
|
181
|
+
SharedHelpers.major_deprecation(2, msg.strip)
|
182
|
+
end
|
183
|
+
|
167
184
|
source_options = normalize_hash(options).merge(
|
168
185
|
"path" => Pathname.new(path),
|
169
186
|
"root_path" => gemfile_root,
|
@@ -190,6 +207,7 @@ module Bundler
|
|
190
207
|
|
191
208
|
def github(repo, options = {})
|
192
209
|
raise ArgumentError, "GitHub sources require a block" unless block_given?
|
210
|
+
raise DeprecatedError, "The #github method has been removed" if Bundler.feature_flag.skip_default_git_sources?
|
193
211
|
github_uri = @git_sources["github"].call(repo)
|
194
212
|
git_options = normalize_hash(options).merge("uri" => github_uri)
|
195
213
|
git_source = @sources.add_git_source(git_options)
|
@@ -197,16 +215,16 @@ module Bundler
|
|
197
215
|
end
|
198
216
|
|
199
217
|
def to_definition(lockfile, unlock)
|
200
|
-
Definition.new(lockfile, @dependencies, @sources, unlock, @ruby_version, @optional_groups)
|
218
|
+
Definition.new(lockfile, @dependencies, @sources, unlock, @ruby_version, @optional_groups, @gemfiles)
|
201
219
|
end
|
202
220
|
|
203
221
|
def group(*args, &blk)
|
204
|
-
|
205
|
-
normalize_group_options(
|
222
|
+
options = args.last.is_a?(Hash) ? args.pop.dup : {}
|
223
|
+
normalize_group_options(options, args)
|
206
224
|
|
207
225
|
@groups.concat args
|
208
226
|
|
209
|
-
if
|
227
|
+
if options["optional"]
|
210
228
|
optional_groups = args - @optional_groups
|
211
229
|
@optional_groups.concat optional_groups
|
212
230
|
end
|
@@ -216,9 +234,9 @@ module Bundler
|
|
216
234
|
args.each { @groups.pop }
|
217
235
|
end
|
218
236
|
|
219
|
-
def install_if(*args
|
237
|
+
def install_if(*args)
|
220
238
|
@install_conditionals.concat args
|
221
|
-
|
239
|
+
yield
|
222
240
|
ensure
|
223
241
|
args.each { @install_conditionals.pop }
|
224
242
|
end
|
@@ -250,7 +268,12 @@ module Bundler
|
|
250
268
|
private
|
251
269
|
|
252
270
|
def add_git_sources
|
271
|
+
return if Bundler.feature_flag.skip_default_git_sources?
|
272
|
+
|
253
273
|
git_source(:github) do |repo_name|
|
274
|
+
warn_deprecated_git_source(:github, <<-'RUBY'.strip, 'Change any "reponame" :github sources to "username/reponame".')
|
275
|
+
"https://github.com/#{repo_name}.git"
|
276
|
+
RUBY
|
254
277
|
# It would be better to use https instead of the git protocol, but this
|
255
278
|
# can break deployment of existing locked bundles when switching between
|
256
279
|
# different versions of Bundler. The change will be made in 2.0, which
|
@@ -267,23 +290,29 @@ module Bundler
|
|
267
290
|
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
|
268
291
|
# TODO: 2.0 upgrade this setting to the default
|
269
292
|
if Bundler.settings["github.https"]
|
293
|
+
Bundler::SharedHelpers.major_deprecation 2, "The `github.https` setting will be removed"
|
270
294
|
"https://github.com/#{repo_name}.git"
|
271
295
|
else
|
272
|
-
warn_github_source_change(repo_name)
|
273
296
|
"git://github.com/#{repo_name}.git"
|
274
297
|
end
|
275
298
|
end
|
276
299
|
|
277
300
|
# TODO: 2.0 remove this deprecated git source
|
278
301
|
git_source(:gist) do |repo_name|
|
279
|
-
warn_deprecated_git_source(:gist, 'https://gist.github.com/#{repo_name}.git')
|
302
|
+
warn_deprecated_git_source(:gist, '"https://gist.github.com/#{repo_name}.git"')
|
303
|
+
|
280
304
|
"https://gist.github.com/#{repo_name}.git"
|
281
305
|
end
|
282
306
|
|
283
307
|
# TODO: 2.0 remove this deprecated git source
|
284
308
|
git_source(:bitbucket) do |repo_name|
|
285
|
-
|
286
|
-
|
309
|
+
warn_deprecated_git_source(:bitbucket, <<-'RUBY'.strip)
|
310
|
+
user_name, repo_name = repo_name.split("/")
|
311
|
+
repo_name ||= user_name
|
312
|
+
"https://#{user_name}@bitbucket.org/#{user_name}/#{repo_name}.git"
|
313
|
+
RUBY
|
314
|
+
|
315
|
+
user_name, repo_name = repo_name.split("/")
|
287
316
|
repo_name ||= user_name
|
288
317
|
"https://#{user_name}@bitbucket.org/#{user_name}/#{repo_name}.git"
|
289
318
|
end
|
@@ -308,7 +337,7 @@ module Bundler
|
|
308
337
|
end
|
309
338
|
|
310
339
|
def valid_keys
|
311
|
-
@valid_keys ||=
|
340
|
+
@valid_keys ||= VALID_KEYS
|
312
341
|
end
|
313
342
|
|
314
343
|
def normalize_options(name, version, opts)
|
@@ -318,6 +347,9 @@ module Bundler
|
|
318
347
|
if name =~ /\s/
|
319
348
|
raise GemfileError, %('#{name}' is not a valid gem name because it contains whitespace)
|
320
349
|
end
|
350
|
+
if name.empty?
|
351
|
+
raise GemfileError, %(an empty gem name is not valid)
|
352
|
+
end
|
321
353
|
|
322
354
|
normalize_hash(opts)
|
323
355
|
|
@@ -355,7 +387,7 @@ module Bundler
|
|
355
387
|
opts["git"] = @git_sources[git_name].call(opts[git_name])
|
356
388
|
end
|
357
389
|
|
358
|
-
%w
|
390
|
+
%w[git path].each do |type|
|
359
391
|
next unless param = opts[type]
|
360
392
|
if version.first && version.first =~ /^\s*=?\s*(\d[^\s]*)\s*$/
|
361
393
|
options = opts.merge("name" => name, "version" => $1)
|
@@ -366,8 +398,8 @@ module Bundler
|
|
366
398
|
opts["source"] = source
|
367
399
|
end
|
368
400
|
|
369
|
-
opts["source"]
|
370
|
-
opts["env"]
|
401
|
+
opts["source"] ||= @source
|
402
|
+
opts["env"] ||= @env
|
371
403
|
opts["platforms"] = platforms.dup
|
372
404
|
opts["group"] = groups
|
373
405
|
opts["should_include"] = install_if
|
@@ -377,7 +409,7 @@ module Bundler
|
|
377
409
|
normalize_hash(opts)
|
378
410
|
|
379
411
|
groups = groups.map {|group| ":#{group}" }.join(", ")
|
380
|
-
validate_keys("group #{groups}", opts, %w
|
412
|
+
validate_keys("group #{groups}", opts, %w[optional])
|
381
413
|
|
382
414
|
opts["optional"] ||= false
|
383
415
|
end
|
@@ -390,25 +422,25 @@ module Bundler
|
|
390
422
|
raise GemfileError, %(The `branch` option for `#{command}` is not allowed. Only gems with a git source can specify a branch)
|
391
423
|
end
|
392
424
|
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
425
|
+
return true unless invalid_keys.any?
|
426
|
+
|
427
|
+
message = String.new
|
428
|
+
message << "You passed #{invalid_keys.map {|k| ":" + k }.join(", ")} "
|
429
|
+
message << if invalid_keys.size > 1
|
430
|
+
"as options for #{command}, but they are invalid."
|
431
|
+
else
|
432
|
+
"as an option for #{command}, but it is invalid."
|
433
|
+
end
|
434
|
+
|
435
|
+
message << " Valid options are: #{valid_keys.join(", ")}."
|
436
|
+
message << " You may be able to resolve this by upgrading Bundler to the newest version."
|
437
|
+
raise InvalidOption, message
|
406
438
|
end
|
407
439
|
|
408
440
|
def normalize_source(source)
|
409
441
|
case source
|
410
442
|
when :gemcutter, :rubygems, :rubyforge
|
411
|
-
Bundler::SharedHelpers.major_deprecation "The source :#{source} is deprecated because HTTP " \
|
443
|
+
Bundler::SharedHelpers.major_deprecation 2, "The source :#{source} is deprecated because HTTP " \
|
412
444
|
"requests are insecure.\nPlease change your source to 'https://" \
|
413
445
|
"rubygems.org' if possible, or 'http://rubygems.org' if not."
|
414
446
|
"http://rubygems.org"
|
@@ -419,17 +451,20 @@ module Bundler
|
|
419
451
|
end
|
420
452
|
end
|
421
453
|
|
422
|
-
def check_primary_source_safety(
|
423
|
-
return
|
454
|
+
def check_primary_source_safety(source_list)
|
455
|
+
return if source_list.rubygems_primary_remotes.empty? && source_list.global_rubygems_source.nil?
|
424
456
|
|
425
|
-
|
426
|
-
|
427
|
-
raise GemfileError, "Warning: this Gemfile contains multiple primary sources. " \
|
457
|
+
if Bundler.feature_flag.disable_multisource?
|
458
|
+
msg = "This Gemfile contains multiple primary sources. " \
|
428
459
|
"Each source after the first must include a block to indicate which gems " \
|
429
|
-
"should come from that source
|
430
|
-
|
460
|
+
"should come from that source"
|
461
|
+
unless Bundler.feature_flag.bundler_2_mode?
|
462
|
+
msg += ". To downgrade this error to a warning, run " \
|
463
|
+
"`bundle config --delete disable_multisource`"
|
464
|
+
end
|
465
|
+
raise GemfileEvalError, msg
|
431
466
|
else
|
432
|
-
Bundler::SharedHelpers.major_deprecation "Your Gemfile contains multiple primary sources. " \
|
467
|
+
Bundler::SharedHelpers.major_deprecation 2, "Your Gemfile contains multiple primary sources. " \
|
433
468
|
"Using `source` more than once without a block is a security risk, and " \
|
434
469
|
"may result in installing unexpected gems. To resolve this warning, use " \
|
435
470
|
"a block to indicate which gems should come from the secondary source. " \
|
@@ -438,20 +473,20 @@ module Bundler
|
|
438
473
|
end
|
439
474
|
end
|
440
475
|
|
441
|
-
def
|
476
|
+
def warn_deprecated_git_source(name, replacement, additional_message = nil)
|
442
477
|
# TODO: 2.0 remove deprecation
|
443
|
-
|
444
|
-
|
445
|
-
"
|
446
|
-
|
478
|
+
additional_message &&= " #{additional_message}"
|
479
|
+
replacement = if replacement.count("\n").zero?
|
480
|
+
"{|repo_name| #{replacement} }"
|
481
|
+
else
|
482
|
+
"do |repo_name|\n#{replacement.to_s.gsub(/^/, " ")}\n end"
|
483
|
+
end
|
484
|
+
|
485
|
+
Bundler::SharedHelpers.major_deprecation 2, <<-EOS
|
486
|
+
The :#{name} git source is deprecated, and will be removed in Bundler 2.0.#{additional_message} Add this code to the top of your Gemfile to ensure it continues to work:
|
487
|
+
|
488
|
+
git_source(:#{name}) #{replacement}
|
447
489
|
|
448
|
-
def warn_deprecated_git_source(name, repo_string)
|
449
|
-
# TODO: 2.0 remove deprecation
|
450
|
-
Bundler::SharedHelpers.major_deprecation <<-EOS
|
451
|
-
The :#{name} git source is deprecated, and will be removed in Bundler 2.0. Add this code to your Gemfile to ensure it continues to work:
|
452
|
-
git_source(:#{name}) do |repo_name|
|
453
|
-
"#{repo_string}"
|
454
|
-
end
|
455
490
|
EOS
|
456
491
|
end
|
457
492
|
|
@@ -530,7 +565,7 @@ The :#{name} git source is deprecated, and will be removed in Bundler 2.0. Add t
|
|
530
565
|
lines = contents.lines.to_a
|
531
566
|
indent = " # "
|
532
567
|
indicator = indent.tr("#", ">")
|
533
|
-
first_line =
|
568
|
+
first_line = line_numer.zero?
|
534
569
|
last_line = (line_numer == (lines.count - 1))
|
535
570
|
|
536
571
|
m << "\n"
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Bundler
|
3
4
|
# used for Creating Specifications from the Gemcutter Endpoint
|
4
5
|
class EndpointSpecification < Gem::Specification
|
@@ -9,11 +10,15 @@ module Bundler
|
|
9
10
|
attr_accessor :source, :remote, :dependencies
|
10
11
|
|
11
12
|
def initialize(name, version, platform, dependencies, metadata = nil)
|
13
|
+
super()
|
12
14
|
@name = name
|
13
15
|
@version = Gem::Version.create version
|
14
16
|
@platform = platform
|
15
17
|
@dependencies = dependencies.map {|dep, reqs| build_dependency(dep, reqs) }
|
16
18
|
|
19
|
+
@loaded_from = nil
|
20
|
+
@remote_specification = nil
|
21
|
+
|
17
22
|
parse_metadata(metadata)
|
18
23
|
end
|
19
24
|
|
@@ -71,6 +76,8 @@ module Bundler
|
|
71
76
|
@remote_specification.post_install_message
|
72
77
|
elsif _local_specification
|
73
78
|
_local_specification.post_install_message
|
79
|
+
else
|
80
|
+
super
|
74
81
|
end
|
75
82
|
end
|
76
83
|
|
@@ -80,6 +87,8 @@ module Bundler
|
|
80
87
|
@remote_specification.extensions
|
81
88
|
elsif _local_specification
|
82
89
|
_local_specification.extensions
|
90
|
+
else
|
91
|
+
super
|
83
92
|
end
|
84
93
|
end
|
85
94
|
|
data/lib/bundler/env.rb
CHANGED
@@ -1,33 +1,21 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "bundler/rubygems_integration"
|
3
4
|
require "bundler/source/git/git_proxy"
|
4
5
|
|
5
6
|
module Bundler
|
6
7
|
class Env
|
7
|
-
def write(io)
|
8
|
+
def self.write(io)
|
8
9
|
io.write report
|
9
10
|
end
|
10
11
|
|
11
|
-
def report(options = {})
|
12
|
+
def self.report(options = {})
|
12
13
|
print_gemfile = options.delete(:print_gemfile) { true }
|
13
14
|
print_gemspecs = options.delete(:print_gemspecs) { true }
|
14
15
|
|
15
|
-
out = String.new
|
16
|
-
|
17
|
-
|
18
|
-
out << "Ruby #{ruby_version}"
|
19
|
-
out << "GEM_HOME #{ENV["GEM_HOME"]}\n" unless ENV["GEM_HOME"].nil? || ENV["GEM_HOME"].empty?
|
20
|
-
out << "GEM_PATH #{ENV["GEM_PATH"]}\n" unless ENV["GEM_PATH"] == ENV["GEM_HOME"]
|
21
|
-
out << "RVM #{ENV["rvm_version"]}\n" if ENV["rvm_version"]
|
22
|
-
out << "Git #{git_version}\n"
|
23
|
-
out << "Platform #{Gem::Platform.local}\n"
|
24
|
-
out << "OpenSSL #{OpenSSL::OPENSSL_VERSION}\n" if defined?(OpenSSL::OPENSSL_VERSION)
|
25
|
-
%w(rubygems-bundler open_gem).each do |name|
|
26
|
-
specs = Bundler.rubygems.find_name(name)
|
27
|
-
out << "#{name} (#{specs.map(&:version).join(",")})\n" unless specs.empty?
|
28
|
-
end
|
29
|
-
|
30
|
-
out << "```\n"
|
16
|
+
out = String.new
|
17
|
+
append_formatted_table("Environment", environment, out)
|
18
|
+
append_formatted_table("Bundler Build Metadata", BuildMetadata.to_h, out)
|
31
19
|
|
32
20
|
unless Bundler.settings.all.empty?
|
33
21
|
out << "\n## Bundler settings\n\n```\n"
|
@@ -43,9 +31,18 @@ module Bundler
|
|
43
31
|
return out unless SharedHelpers.in_bundle?
|
44
32
|
|
45
33
|
if print_gemfile
|
34
|
+
gemfiles = [Bundler.default_gemfile]
|
35
|
+
begin
|
36
|
+
gemfiles = Bundler.definition.gemfiles
|
37
|
+
rescue GemfileNotFound
|
38
|
+
nil
|
39
|
+
end
|
40
|
+
|
46
41
|
out << "\n## Gemfile\n"
|
47
|
-
|
48
|
-
|
42
|
+
gemfiles.each do |gemfile|
|
43
|
+
out << "\n### #{Pathname.new(gemfile).relative_path_from(SharedHelpers.pwd)}\n\n"
|
44
|
+
out << "```ruby\n" << read_file(gemfile).chomp << "\n```\n"
|
45
|
+
end
|
49
46
|
|
50
47
|
out << "\n### #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)}\n\n"
|
51
48
|
out << "```\n" << read_file(Bundler.default_lockfile).chomp << "\n```\n"
|
@@ -63,9 +60,7 @@ module Bundler
|
|
63
60
|
out
|
64
61
|
end
|
65
62
|
|
66
|
-
|
67
|
-
|
68
|
-
def read_file(filename)
|
63
|
+
def self.read_file(filename)
|
69
64
|
File.read(filename.to_s).strip
|
70
65
|
rescue Errno::ENOENT
|
71
66
|
"<No #{filename} found>"
|
@@ -73,22 +68,63 @@ module Bundler
|
|
73
68
|
"#{e.class}: #{e.message}"
|
74
69
|
end
|
75
70
|
|
76
|
-
def ruby_version
|
71
|
+
def self.ruby_version
|
77
72
|
str = String.new("#{RUBY_VERSION}")
|
78
73
|
if RUBY_VERSION < "1.9"
|
79
74
|
str << " (#{RUBY_RELEASE_DATE}"
|
80
75
|
str << " patchlevel #{RUBY_PATCHLEVEL}" if defined? RUBY_PATCHLEVEL
|
81
|
-
str << ") [#{RUBY_PLATFORM}]
|
76
|
+
str << ") [#{RUBY_PLATFORM}]"
|
82
77
|
else
|
83
78
|
str << "p#{RUBY_PATCHLEVEL}" if defined? RUBY_PATCHLEVEL
|
84
|
-
str << " (#{RUBY_RELEASE_DATE} revision #{RUBY_REVISION}) [#{RUBY_PLATFORM}]
|
79
|
+
str << " (#{RUBY_RELEASE_DATE} revision #{RUBY_REVISION}) [#{RUBY_PLATFORM}]"
|
85
80
|
end
|
86
81
|
end
|
87
82
|
|
88
|
-
def git_version
|
83
|
+
def self.git_version
|
89
84
|
Bundler::Source::Git::GitProxy.new(nil, nil, nil).full_version
|
90
85
|
rescue Bundler::Source::Git::GitNotInstalledError
|
91
86
|
"not installed"
|
92
87
|
end
|
88
|
+
|
89
|
+
def self.environment
|
90
|
+
out = []
|
91
|
+
|
92
|
+
out << ["Bundler", Bundler::VERSION]
|
93
|
+
out << ["RubyGems", Gem::VERSION]
|
94
|
+
out << ["Ruby", ruby_version]
|
95
|
+
out << ["GEM_HOME", ENV["GEM_HOME"]] unless ENV["GEM_HOME"].nil? || ENV["GEM_HOME"].empty?
|
96
|
+
out << ["GEM_PATH", ENV["GEM_PATH"]] unless ENV["GEM_PATH"].nil? || ENV["GEM_PATH"].empty?
|
97
|
+
out << ["RVM", ENV["rvm_version"]] if ENV["rvm_version"]
|
98
|
+
out << ["Git", git_version]
|
99
|
+
out << ["Platform", Gem::Platform.local]
|
100
|
+
out << ["OpenSSL", OpenSSL::OPENSSL_VERSION] if defined?(OpenSSL::OPENSSL_VERSION)
|
101
|
+
%w[rubygems-bundler open_gem].each do |name|
|
102
|
+
specs = Bundler.rubygems.find_name(name)
|
103
|
+
out << [name, "(#{specs.map(&:version).join(",")})"] unless specs.empty?
|
104
|
+
end
|
105
|
+
if (exe = caller.last.split(":").first) && exe =~ %r{(exe|bin)/bundler?\z}
|
106
|
+
shebang = File.read(exe).lines.first
|
107
|
+
shebang.sub!(/^#!\s*/, "")
|
108
|
+
unless shebang.start_with?(Gem.ruby, "/usr/bin/env ruby")
|
109
|
+
out << ["Gem.ruby", Gem.ruby]
|
110
|
+
out << ["bundle #!", shebang]
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
out
|
115
|
+
end
|
116
|
+
|
117
|
+
def self.append_formatted_table(title, pairs, out)
|
118
|
+
return if pairs.empty?
|
119
|
+
out << "\n" unless out.empty?
|
120
|
+
out << "## #{title}\n\n```\n"
|
121
|
+
ljust = pairs.map {|k, _v| k.to_s.length }.max
|
122
|
+
pairs.each do |k, v|
|
123
|
+
out << "#{k.to_s.ljust(ljust)} #{v}\n"
|
124
|
+
end
|
125
|
+
out << "```\n"
|
126
|
+
end
|
127
|
+
|
128
|
+
private_class_method :read_file, :ruby_version, :git_version, :append_formatted_table
|
93
129
|
end
|
94
130
|
end
|