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,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
class CLI::Add
|
5
|
+
def initialize(options, gems)
|
6
|
+
@gems = gems
|
7
|
+
@options = options
|
8
|
+
@options[:group] = @options[:group].split(",").map(&:strip) if !@options[:group].nil? && !@options[:group].empty?
|
9
|
+
end
|
10
|
+
|
11
|
+
def run
|
12
|
+
raise InvalidOption, "You can not specify `--strict` and `--optimistic` at the same time." if @options[:strict] && @options[:optimistic]
|
13
|
+
|
14
|
+
# raise error when no gems are specified
|
15
|
+
raise InvalidOption, "Please specify gems to add." if @gems.empty?
|
16
|
+
|
17
|
+
version = @options[:version].nil? ? nil : @options[:version].split(",").map(&:strip)
|
18
|
+
|
19
|
+
unless version.nil?
|
20
|
+
version.each do |v|
|
21
|
+
raise InvalidOption, "Invalid gem requirement pattern '#{v}'" unless Gem::Requirement::PATTERN =~ v.to_s
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
dependencies = @gems.map {|g| Bundler::Dependency.new(g, version, @options) }
|
26
|
+
|
27
|
+
Injector.inject(dependencies,
|
28
|
+
:conservative_versioning => @options[:version].nil?, # Perform conservative versioning only when version is not specified
|
29
|
+
:optimistic => @options[:optimistic],
|
30
|
+
:strict => @options[:strict])
|
31
|
+
|
32
|
+
Installer.install(Bundler.root, Bundler.definition) unless @options["skip-install"]
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/bundler/cli/binstubs.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require "bundler/cli/common"
|
3
2
|
|
4
3
|
module Bundler
|
5
4
|
class CLI::Binstubs
|
@@ -10,12 +9,20 @@ module Bundler
|
|
10
9
|
end
|
11
10
|
|
12
11
|
def run
|
13
|
-
Bundler.definition.
|
14
|
-
|
15
|
-
|
12
|
+
Bundler.definition.validate_runtime!
|
13
|
+
path_option = options["path"]
|
14
|
+
path_option = nil if path_option && path_option.empty?
|
15
|
+
Bundler.settings.set_command_option :bin, path_option if options["path"]
|
16
|
+
Bundler.settings.set_command_option_if_given :shebang, options["shebang"]
|
16
17
|
installer = Installer.new(Bundler.root, Bundler.definition)
|
17
18
|
|
18
|
-
|
19
|
+
installer_opts = { :force => options[:force], :binstubs_cmd => true }
|
20
|
+
|
21
|
+
if options[:all]
|
22
|
+
raise InvalidOption, "Cannot specify --all with specific gems" unless gems.empty?
|
23
|
+
@gems = Bundler.definition.specs.map(&:name)
|
24
|
+
installer_opts.delete(:binstubs_cmd)
|
25
|
+
elsif gems.empty?
|
19
26
|
Bundler.ui.error "`bundle binstubs` needs at least one gem to run."
|
20
27
|
exit 1
|
21
28
|
end
|
@@ -28,12 +35,13 @@ module Bundler
|
|
28
35
|
)
|
29
36
|
end
|
30
37
|
|
31
|
-
if
|
32
|
-
Bundler.ui.warn
|
33
|
-
|
34
|
-
|
38
|
+
if options[:standalone]
|
39
|
+
next Bundler.ui.warn("Sorry, Bundler can only be run via RubyGems.") if gem_name == "bundler"
|
40
|
+
Bundler.settings.temporary(:path => (Bundler.settings[:path] || Bundler.root)) do
|
41
|
+
installer.generate_standalone_bundler_executable_stubs(spec)
|
42
|
+
end
|
35
43
|
else
|
36
|
-
installer.generate_bundler_executable_stubs(spec,
|
44
|
+
installer.generate_bundler_executable_stubs(spec, installer_opts)
|
37
45
|
end
|
38
46
|
end
|
39
47
|
end
|
data/lib/bundler/cli/cache.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Bundler
|
3
4
|
class CLI::Cache
|
4
5
|
attr_reader :options
|
@@ -7,12 +8,12 @@ module Bundler
|
|
7
8
|
end
|
8
9
|
|
9
10
|
def run
|
10
|
-
Bundler.definition.
|
11
|
+
Bundler.definition.validate_runtime!
|
11
12
|
Bundler.definition.resolve_with_cache!
|
12
13
|
setup_cache_all
|
13
|
-
Bundler.settings
|
14
|
+
Bundler.settings.set_command_option_if_given :cache_all_platforms, options["all-platforms"]
|
14
15
|
Bundler.load.cache
|
15
|
-
Bundler.settings
|
16
|
+
Bundler.settings.set_command_option_if_given :no_prune, options["no-prune"]
|
16
17
|
Bundler.load.lock
|
17
18
|
rescue GemNotFound => e
|
18
19
|
Bundler.ui.error(e.message)
|
@@ -23,9 +24,9 @@ module Bundler
|
|
23
24
|
private
|
24
25
|
|
25
26
|
def setup_cache_all
|
26
|
-
Bundler.settings
|
27
|
+
Bundler.settings.set_command_option_if_given :cache_all, options[:all]
|
27
28
|
|
28
|
-
if Bundler.definition.has_local_dependencies? && !Bundler.
|
29
|
+
if Bundler.definition.has_local_dependencies? && !Bundler.feature_flag.cache_all?
|
29
30
|
Bundler.ui.warn "Your Gemfile contains path and git dependencies. If you want " \
|
30
31
|
"to package them as well, please pass the --all flag. This will be the default " \
|
31
32
|
"on Bundler 2.0."
|
data/lib/bundler/cli/check.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Bundler
|
3
4
|
class CLI::Check
|
4
5
|
attr_reader :options
|
@@ -8,14 +9,11 @@ module Bundler
|
|
8
9
|
end
|
9
10
|
|
10
11
|
def run
|
11
|
-
|
12
|
-
Bundler.settings[:path] = File.expand_path(options[:path])
|
13
|
-
Bundler.settings[:disable_shared_gems] = true
|
14
|
-
end
|
12
|
+
Bundler.settings.set_command_option_if_given :path, options[:path]
|
15
13
|
|
16
14
|
begin
|
17
15
|
definition = Bundler.definition
|
18
|
-
definition.
|
16
|
+
definition.validate_runtime!
|
19
17
|
not_installed = definition.missing_specs
|
20
18
|
rescue GemNotFound, VersionConflict
|
21
19
|
Bundler.ui.error "Bundler can't satisfy your Gemfile's dependencies."
|
@@ -28,7 +26,7 @@ module Bundler
|
|
28
26
|
not_installed.each {|s| Bundler.ui.error " * #{s.name} (#{s.version})" }
|
29
27
|
Bundler.ui.warn "Install missing gems with `bundle install`"
|
30
28
|
exit 1
|
31
|
-
elsif !Bundler.default_lockfile.
|
29
|
+
elsif !Bundler.default_lockfile.file? && Bundler.frozen_bundle?
|
32
30
|
Bundler.ui.error "This bundle has been frozen, but there is no #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} present"
|
33
31
|
exit 1
|
34
32
|
else
|
data/lib/bundler/cli/clean.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Bundler
|
3
4
|
class CLI::Clean
|
4
5
|
attr_reader :options
|
@@ -8,19 +9,17 @@ module Bundler
|
|
8
9
|
end
|
9
10
|
|
10
11
|
def run
|
11
|
-
require_path_or_force
|
12
|
+
require_path_or_force unless options[:"dry-run"]
|
12
13
|
Bundler.load.clean(options[:"dry-run"])
|
13
14
|
end
|
14
15
|
|
15
16
|
protected
|
16
17
|
|
17
18
|
def require_path_or_force
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
exit 1
|
23
|
-
end
|
19
|
+
return unless Bundler.use_system_gems? && !options[:force]
|
20
|
+
raise InvalidOption, "Cleaning all the gems on your system is dangerous! " \
|
21
|
+
"If you're sure you want to remove every system gem not in this " \
|
22
|
+
"bundle, run `bundle clean --force`."
|
24
23
|
end
|
25
24
|
end
|
26
25
|
end
|
data/lib/bundler/cli/common.rb
CHANGED
@@ -1,8 +1,26 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Bundler
|
3
4
|
module CLI::Common
|
5
|
+
def self.output_post_install_messages(messages)
|
6
|
+
return if Bundler.settings["ignore_messages"]
|
7
|
+
messages.to_a.each do |name, msg|
|
8
|
+
print_post_install_message(name, msg) unless Bundler.settings["ignore_messages.#{name}"]
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.print_post_install_message(name, msg)
|
13
|
+
Bundler.ui.confirm "Post-install message from #{name}:"
|
14
|
+
Bundler.ui.info msg
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.output_without_groups_message
|
18
|
+
return if Bundler.settings[:without].empty?
|
19
|
+
Bundler.ui.confirm without_groups_message
|
20
|
+
end
|
21
|
+
|
4
22
|
def self.without_groups_message
|
5
|
-
groups = Bundler.settings
|
23
|
+
groups = Bundler.settings[:without]
|
6
24
|
group_list = [groups[0...-1].join(", "), groups[-1..-1]].
|
7
25
|
reject {|s| s.to_s.empty? }.join(" and ")
|
8
26
|
group_str = (groups.size == 1) ? "group" : "groups"
|
@@ -52,5 +70,33 @@ module Bundler
|
|
52
70
|
message += "\nDid you mean #{suggestions}?" if suggestions
|
53
71
|
message
|
54
72
|
end
|
73
|
+
|
74
|
+
def self.ensure_all_gems_in_lockfile!(names, locked_gems = Bundler.locked_gems)
|
75
|
+
locked_names = locked_gems.specs.map(&:name)
|
76
|
+
names.-(locked_names).each do |g|
|
77
|
+
raise GemNotFound, gem_not_found_message(g, locked_names)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.configure_gem_version_promoter(definition, options)
|
82
|
+
patch_level = patch_level_options(options)
|
83
|
+
raise InvalidOption, "Provide only one of the following options: #{patch_level.join(", ")}" unless patch_level.length <= 1
|
84
|
+
definition.gem_version_promoter.tap do |gvp|
|
85
|
+
gvp.level = patch_level.first || :major
|
86
|
+
gvp.strict = options[:strict] || options["update-strict"]
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def self.patch_level_options(options)
|
91
|
+
[:major, :minor, :patch].select {|v| options.keys.include?(v.to_s) }
|
92
|
+
end
|
93
|
+
|
94
|
+
def self.clean_after_install?
|
95
|
+
clean = Bundler.settings[:clean]
|
96
|
+
return clean unless clean.nil?
|
97
|
+
clean ||= Bundler.feature_flag.auto_clean_without_path? && Bundler.settings[:path].nil?
|
98
|
+
clean &&= !Bundler.use_system_gems?
|
99
|
+
clean
|
100
|
+
end
|
55
101
|
end
|
56
102
|
end
|
data/lib/bundler/cli/config.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Bundler
|
3
4
|
class CLI::Config
|
4
5
|
attr_reader :name, :options, :scope, :thor
|
@@ -33,6 +34,13 @@ module Bundler
|
|
33
34
|
end
|
34
35
|
|
35
36
|
if args.empty?
|
37
|
+
if options[:parseable]
|
38
|
+
if value = Bundler.settings[name]
|
39
|
+
Bundler.ui.info("#{name}=#{value}")
|
40
|
+
end
|
41
|
+
return
|
42
|
+
end
|
43
|
+
|
36
44
|
confirm(name)
|
37
45
|
return
|
38
46
|
end
|
@@ -44,11 +52,20 @@ module Bundler
|
|
44
52
|
private
|
45
53
|
|
46
54
|
def confirm_all
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
55
|
+
if @options[:parseable]
|
56
|
+
thor.with_padding do
|
57
|
+
Bundler.settings.all.each do |setting|
|
58
|
+
val = Bundler.settings[setting]
|
59
|
+
Bundler.ui.info "#{setting}=#{val}"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
else
|
63
|
+
Bundler.ui.confirm "Settings are listed in order of priority. The top value will be used.\n"
|
64
|
+
Bundler.settings.all.each do |setting|
|
65
|
+
Bundler.ui.confirm "#{setting}"
|
66
|
+
show_pretty_values_for(setting)
|
67
|
+
Bundler.ui.confirm ""
|
68
|
+
end
|
52
69
|
end
|
53
70
|
end
|
54
71
|
|
@@ -68,7 +85,9 @@ module Bundler
|
|
68
85
|
|
69
86
|
def message
|
70
87
|
locations = Bundler.settings.locations(name)
|
71
|
-
if
|
88
|
+
if @options[:parseable]
|
89
|
+
"#{name}=#{new_value}" if new_value
|
90
|
+
elsif scope == "global"
|
72
91
|
if locations[:local]
|
73
92
|
"Your application has set #{name} to #{locations[:local].inspect}. " \
|
74
93
|
"This will override the global value you are currently setting"
|
@@ -94,7 +113,7 @@ module Bundler
|
|
94
113
|
end
|
95
114
|
|
96
115
|
def valid_scope?(scope)
|
97
|
-
%w
|
116
|
+
%w[delete local global].include?(scope)
|
98
117
|
end
|
99
118
|
end
|
100
119
|
end
|
data/lib/bundler/cli/console.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Bundler
|
3
4
|
class CLI::Console
|
4
5
|
attr_reader :options, :group
|
@@ -8,7 +9,7 @@ module Bundler
|
|
8
9
|
end
|
9
10
|
|
10
11
|
def run
|
11
|
-
Bundler::SharedHelpers.major_deprecation "bundle console will be replaced " \
|
12
|
+
Bundler::SharedHelpers.major_deprecation 2, "bundle console will be replaced " \
|
12
13
|
"by `bin/console` generated by `bundle gem <name>`"
|
13
14
|
|
14
15
|
group ? Bundler.require(:default, *(group.split.map!(&:to_sym))) : Bundler.require
|
data/lib/bundler/cli/doctor.rb
CHANGED
@@ -14,11 +14,11 @@ module Bundler
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def otool_available?
|
17
|
-
|
17
|
+
Bundler.which("otool")
|
18
18
|
end
|
19
19
|
|
20
20
|
def ldd_available?
|
21
|
-
|
21
|
+
Bundler.which("ldd")
|
22
22
|
end
|
23
23
|
|
24
24
|
def dylibs_darwin(path)
|
@@ -55,22 +55,19 @@ module Bundler
|
|
55
55
|
Dir.glob("#{spec.full_gem_path}/**/*.bundle")
|
56
56
|
end
|
57
57
|
|
58
|
+
def check!
|
59
|
+
require "bundler/cli/check"
|
60
|
+
Bundler::CLI::Check.new({}).run
|
61
|
+
end
|
62
|
+
|
58
63
|
def run
|
59
64
|
Bundler.ui.level = "error" if options[:quiet]
|
65
|
+
Bundler.settings.validate!
|
66
|
+
check!
|
60
67
|
|
68
|
+
definition = Bundler.definition
|
61
69
|
broken_links = {}
|
62
70
|
|
63
|
-
begin
|
64
|
-
definition = Bundler.definition
|
65
|
-
definition.validate_ruby!
|
66
|
-
not_installed = definition.missing_specs
|
67
|
-
raise GemNotFound if not_installed.any?
|
68
|
-
rescue GemNotFound
|
69
|
-
Bundler.ui.warn "This bundle's gems must be installed to run this command."
|
70
|
-
Bundler.ui.warn "Install missing gems with `bundle install`."
|
71
|
-
exit 0
|
72
|
-
end
|
73
|
-
|
74
71
|
definition.specs.each do |spec|
|
75
72
|
bundles_for_gem(spec).each do |bundle|
|
76
73
|
bad_paths = dylibs(bundle).select {|f| !File.exist?(f) }
|
@@ -81,15 +78,63 @@ module Bundler
|
|
81
78
|
end
|
82
79
|
end
|
83
80
|
|
81
|
+
permissions_valid = check_home_permissions
|
82
|
+
|
84
83
|
if broken_links.any?
|
85
|
-
|
86
|
-
broken_links.
|
87
|
-
paths.uniq.
|
88
|
-
|
84
|
+
message = "The following gems are missing OS dependencies:"
|
85
|
+
broken_links.map do |spec, paths|
|
86
|
+
paths.uniq.map do |path|
|
87
|
+
"\n * #{spec.name}: #{path}"
|
88
|
+
end
|
89
|
+
end.flatten.sort.each {|m| message += m }
|
90
|
+
raise ProductionError, message
|
91
|
+
elsif !permissions_valid
|
92
|
+
Bundler.ui.info "No issues found with the installed bundle"
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
private
|
97
|
+
|
98
|
+
def check_home_permissions
|
99
|
+
require "find"
|
100
|
+
files_not_readable_or_writable = []
|
101
|
+
files_not_rw_and_owned_by_different_user = []
|
102
|
+
files_not_owned_by_current_user_but_still_rw = []
|
103
|
+
Find.find(Bundler.home.to_s).each do |f|
|
104
|
+
if !File.writable?(f) || !File.readable?(f)
|
105
|
+
if File.stat(f).uid != Process.uid
|
106
|
+
files_not_rw_and_owned_by_different_user << f
|
107
|
+
else
|
108
|
+
files_not_readable_or_writable << f
|
89
109
|
end
|
110
|
+
elsif File.stat(f).uid != Process.uid
|
111
|
+
files_not_owned_by_current_user_but_still_rw << f
|
90
112
|
end
|
91
|
-
exit 1
|
92
113
|
end
|
114
|
+
|
115
|
+
ok = true
|
116
|
+
if files_not_owned_by_current_user_but_still_rw.any?
|
117
|
+
Bundler.ui.warn "Files exist in the Bundler home that are owned by another " \
|
118
|
+
"user, but are still readable/writable. These files are:\n - #{files_not_owned_by_current_user_but_still_rw.join("\n - ")}"
|
119
|
+
|
120
|
+
ok = false
|
121
|
+
end
|
122
|
+
|
123
|
+
if files_not_rw_and_owned_by_different_user.any?
|
124
|
+
Bundler.ui.warn "Files exist in the Bundler home that are owned by another " \
|
125
|
+
"user, and are not readable/writable. These files are:\n - #{files_not_rw_and_owned_by_different_user.join("\n - ")}"
|
126
|
+
|
127
|
+
ok = false
|
128
|
+
end
|
129
|
+
|
130
|
+
if files_not_readable_or_writable.any?
|
131
|
+
Bundler.ui.warn "Files exist in the Bundler home that are not " \
|
132
|
+
"readable/writable by the current user. These files are:\n - #{files_not_readable_or_writable.join("\n - ")}"
|
133
|
+
|
134
|
+
ok = false
|
135
|
+
end
|
136
|
+
|
137
|
+
ok
|
93
138
|
end
|
94
139
|
end
|
95
140
|
end
|
data/lib/bundler/cli/exec.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "bundler/current_ruby"
|
3
4
|
|
4
5
|
module Bundler
|
5
6
|
class CLI::Exec
|
6
7
|
attr_reader :options, :args, :cmd
|
7
8
|
|
8
|
-
|
9
|
+
TRAPPED_SIGNALS = %w[INT].freeze
|
9
10
|
|
10
11
|
def initialize(options, args)
|
11
12
|
@options = options
|
@@ -69,15 +70,14 @@ module Bundler
|
|
69
70
|
ui = Bundler.ui
|
70
71
|
Bundler.ui = nil
|
71
72
|
require "bundler/setup"
|
72
|
-
|
73
|
-
signals.each {|s| trap(s, "DEFAULT") }
|
73
|
+
TRAPPED_SIGNALS.each {|s| trap(s, "DEFAULT") }
|
74
74
|
Kernel.load(file)
|
75
|
-
rescue SystemExit
|
75
|
+
rescue SystemExit, SignalException
|
76
76
|
raise
|
77
77
|
rescue Exception => e # rubocop:disable Lint/RescueException
|
78
78
|
Bundler.ui = ui
|
79
79
|
Bundler.ui.error "bundler: failed to load command: #{cmd} (#{file})"
|
80
|
-
backtrace = e.backtrace.take_while {|bt| !bt.start_with?(__FILE__) }
|
80
|
+
backtrace = e.backtrace ? e.backtrace.take_while {|bt| !bt.start_with?(__FILE__) } : []
|
81
81
|
abort "#{e.class}: #{e.message}\n #{backtrace.join("\n ")}"
|
82
82
|
end
|
83
83
|
|
@@ -89,8 +89,15 @@ module Bundler
|
|
89
89
|
possibilities = [
|
90
90
|
"#!/usr/bin/env ruby\n",
|
91
91
|
"#!/usr/bin/env jruby\n",
|
92
|
+
"#!/usr/bin/env truffleruby\n",
|
92
93
|
"#!#{Gem.ruby}\n",
|
93
94
|
]
|
95
|
+
|
96
|
+
if File.zero?(file)
|
97
|
+
Bundler.ui.warn "#{file} is empty"
|
98
|
+
return false
|
99
|
+
end
|
100
|
+
|
94
101
|
first_line = File.open(file, "rb") {|f| f.read(possibilities.map(&:size).max) }
|
95
102
|
possibilities.any? {|shebang| first_line.start_with?(shebang) }
|
96
103
|
end
|