bundler 1.15.1 → 1.17.3
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of bundler might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/CHANGELOG.md +320 -0
- data/README.md +17 -8
- data/bundler.gemspec +25 -9
- data/exe/bundle +1 -6
- data/exe/bundle_ruby +4 -3
- data/lib/bundler/build_metadata.rb +53 -0
- data/lib/bundler/capistrano.rb +5 -0
- data/lib/bundler/cli/add.rb +15 -6
- data/lib/bundler/cli/binstubs.rb +17 -9
- data/lib/bundler/cli/cache.rb +5 -4
- data/lib/bundler/cli/check.rb +3 -5
- data/lib/bundler/cli/clean.rb +5 -6
- data/lib/bundler/cli/common.rb +11 -2
- data/lib/bundler/cli/config.rb +2 -1
- data/lib/bundler/cli/console.rb +2 -1
- data/lib/bundler/cli/doctor.rb +48 -1
- data/lib/bundler/cli/exec.rb +6 -5
- data/lib/bundler/cli/gem.rb +13 -8
- data/lib/bundler/cli/info.rb +0 -1
- data/lib/bundler/cli/init.rb +18 -6
- data/lib/bundler/cli/inject.rb +1 -0
- data/lib/bundler/cli/install.rb +64 -77
- data/lib/bundler/cli/issue.rb +1 -1
- data/lib/bundler/cli/list.rb +58 -0
- data/lib/bundler/cli/lock.rb +0 -1
- data/lib/bundler/cli/open.rb +2 -2
- data/lib/bundler/cli/outdated.rb +20 -9
- data/lib/bundler/cli/package.rb +9 -6
- data/lib/bundler/cli/platform.rb +1 -0
- data/lib/bundler/cli/plugin.rb +1 -0
- data/lib/bundler/cli/pristine.rb +20 -6
- data/lib/bundler/cli/remove.rb +18 -0
- data/lib/bundler/cli/show.rb +0 -1
- data/lib/bundler/cli/update.rb +35 -7
- data/lib/bundler/cli/viz.rb +4 -0
- data/lib/bundler/cli.rb +234 -90
- data/lib/bundler/compact_index_client/cache.rb +1 -2
- data/lib/bundler/compact_index_client/updater.rb +35 -7
- data/lib/bundler/compact_index_client.rb +1 -0
- data/lib/bundler/compatibility_guard.rb +14 -0
- data/lib/bundler/constants.rb +1 -0
- data/lib/bundler/current_ruby.rb +13 -5
- data/lib/bundler/definition.rb +192 -139
- data/lib/bundler/dep_proxy.rb +3 -1
- data/lib/bundler/dependency.rb +9 -9
- data/lib/bundler/deployment.rb +1 -1
- data/lib/bundler/deprecate.rb +15 -3
- data/lib/bundler/dsl.rb +115 -64
- data/lib/bundler/endpoint_specification.rb +10 -1
- data/lib/bundler/env.rb +90 -29
- data/lib/bundler/environment_preserver.rb +27 -6
- data/lib/bundler/errors.rb +1 -0
- data/lib/bundler/feature_flag.rb +46 -4
- data/lib/bundler/fetcher/base.rb +1 -0
- data/lib/bundler/fetcher/compact_index.rb +2 -11
- data/lib/bundler/fetcher/dependency.rb +2 -1
- data/lib/bundler/fetcher/downloader.rb +11 -5
- data/lib/bundler/fetcher/index.rb +3 -2
- data/lib/bundler/fetcher.rb +18 -11
- data/lib/bundler/friendly_errors.rb +6 -1
- data/lib/bundler/gem_helper.rb +19 -10
- data/lib/bundler/gem_helpers.rb +1 -0
- data/lib/bundler/gem_remote_fetcher.rb +1 -0
- data/lib/bundler/gem_tasks.rb +1 -0
- data/lib/bundler/gem_version_promoter.rb +17 -2
- data/lib/bundler/gemdeps.rb +1 -0
- data/lib/bundler/graph.rb +1 -0
- data/lib/bundler/index.rb +8 -8
- data/lib/bundler/injector.rb +192 -30
- data/lib/bundler/inline.rb +10 -10
- data/lib/bundler/installer/gem_installer.rb +12 -2
- data/lib/bundler/installer/parallel_installer.rb +78 -42
- data/lib/bundler/installer/standalone.rb +1 -0
- data/lib/bundler/installer.rb +138 -53
- data/lib/bundler/lazy_specification.rb +3 -2
- data/lib/bundler/lockfile_generator.rb +95 -0
- data/lib/bundler/lockfile_parser.rb +10 -4
- data/lib/bundler/match_platform.rb +1 -0
- data/lib/bundler/mirror.rb +8 -5
- data/lib/bundler/plugin/api/source.rb +9 -2
- data/lib/bundler/plugin/events.rb +61 -0
- data/lib/bundler/plugin/index.rb +7 -2
- data/lib/bundler/plugin/installer.rb +7 -6
- data/lib/bundler/plugin/source_list.rb +7 -8
- data/lib/bundler/plugin.rb +13 -5
- data/lib/bundler/process_lock.rb +24 -0
- data/lib/bundler/psyched_yaml.rb +10 -0
- data/lib/bundler/remote_specification.rb +10 -1
- data/lib/bundler/resolver/spec_group.rb +106 -0
- data/lib/bundler/resolver.rb +158 -195
- data/lib/bundler/retry.rb +1 -0
- data/lib/bundler/ruby_dsl.rb +1 -0
- data/lib/bundler/ruby_version.rb +2 -1
- data/lib/bundler/rubygems_ext.rb +5 -4
- data/lib/bundler/rubygems_gem_installer.rb +31 -1
- data/lib/bundler/rubygems_integration.rb +71 -32
- data/lib/bundler/runtime.rb +11 -9
- data/lib/bundler/settings/validator.rb +102 -0
- data/lib/bundler/settings.rb +213 -86
- data/lib/bundler/setup.rb +4 -7
- data/lib/bundler/shared_helpers.rb +131 -26
- data/lib/bundler/similarity_detector.rb +1 -0
- data/lib/bundler/source/gemspec.rb +1 -0
- data/lib/bundler/source/git/git_proxy.rb +21 -11
- data/lib/bundler/source/git.rb +24 -19
- data/lib/bundler/source/metadata.rb +62 -0
- data/lib/bundler/source/path/installer.rb +2 -0
- data/lib/bundler/source/path.rb +11 -7
- data/lib/bundler/source/rubygems/remote.rb +8 -2
- data/lib/bundler/source/rubygems.rb +161 -84
- data/lib/bundler/source.rb +36 -0
- data/lib/bundler/source_list.rb +75 -15
- data/lib/bundler/spec_set.rb +12 -6
- data/lib/bundler/ssl_certs/certificate_manager.rb +2 -1
- data/lib/bundler/stub_specification.rb +1 -0
- data/lib/bundler/templates/.document +1 -0
- data/lib/bundler/templates/Executable +12 -0
- data/lib/bundler/templates/Executable.bundler +105 -0
- data/lib/bundler/templates/Gemfile +3 -0
- data/lib/bundler/templates/gems.rb +8 -0
- data/lib/bundler/templates/newgem/Gemfile.tt +2 -0
- data/lib/bundler/templates/newgem/README.md.tt +1 -1
- data/lib/bundler/templates/newgem/gitignore.tt +0 -1
- data/lib/bundler/templates/newgem/lib/newgem.rb.tt +1 -0
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +12 -3
- data/lib/bundler/templates/newgem/rspec.tt +1 -0
- data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +0 -2
- data/lib/bundler/templates/newgem/{.travis.yml.tt → travis.yml.tt} +2 -0
- data/lib/bundler/ui/rg_proxy.rb +1 -0
- data/lib/bundler/ui/shell.rb +17 -4
- data/lib/bundler/ui/silent.rb +1 -0
- data/lib/bundler/ui.rb +1 -0
- data/lib/bundler/uri_credentials_filter.rb +1 -0
- data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1638 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +26 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +15 -4
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +3 -2
- data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +75 -7
- data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +2 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +3 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +491 -148
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +8 -4
- data/lib/bundler/vendor/molinillo/lib/molinillo.rb +2 -0
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +3 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +1 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +1 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +9 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +45 -8
- data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +9 -3
- data/lib/bundler/vendor/thor/lib/thor/actions.rb +6 -3
- data/lib/bundler/vendor/thor/lib/thor/base.rb +27 -4
- data/lib/bundler/vendor/thor/lib/thor/command.rb +9 -7
- data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +12 -0
- data/lib/bundler/vendor/thor/lib/thor/group.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +2 -0
- data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +5 -5
- data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +6 -5
- data/lib/bundler/vendor/thor/lib/thor/runner.rb +6 -4
- data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +10 -9
- data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor.rb +25 -8
- data/lib/bundler/vendored_fileutils.rb +9 -0
- data/lib/bundler/vendored_molinillo.rb +1 -0
- data/lib/bundler/vendored_persistent.rb +35 -0
- data/lib/bundler/vendored_thor.rb +1 -0
- data/lib/bundler/version.rb +6 -2
- data/lib/bundler/version_ranges.rb +1 -0
- data/lib/bundler/vlad.rb +5 -0
- data/lib/bundler/worker.rb +1 -0
- data/lib/bundler/yaml_serializer.rb +3 -3
- data/lib/bundler.rb +86 -52
- data/man/bundle-add.1 +18 -3
- data/man/bundle-add.1.txt +26 -14
- data/man/bundle-add.ronn +13 -2
- data/man/bundle-binstubs.1 +11 -1
- data/man/bundle-binstubs.1.txt +33 -18
- data/man/bundle-binstubs.ronn +15 -1
- data/man/bundle-check.1 +4 -4
- data/man/bundle-check.1.txt +15 -14
- data/man/bundle-check.ronn +3 -3
- data/man/bundle-clean.1 +1 -1
- data/man/bundle-clean.1.txt +10 -10
- data/man/bundle-config.1 +129 -29
- data/man/bundle-config.1.txt +285 -174
- data/man/bundle-config.ronn +167 -88
- data/man/bundle-doctor.1 +44 -0
- data/man/bundle-doctor.1.txt +44 -0
- data/man/bundle-doctor.ronn +33 -0
- data/man/bundle-exec.1 +6 -3
- data/man/bundle-exec.1.txt +78 -71
- data/man/bundle-exec.ronn +10 -3
- data/man/bundle-gem.1 +4 -4
- data/man/bundle-gem.1.txt +41 -40
- data/man/bundle-gem.ronn +3 -2
- data/man/bundle-info.1 +1 -1
- data/man/bundle-info.1.txt +8 -8
- data/man/bundle-init.1 +9 -4
- data/man/bundle-init.1.txt +23 -13
- data/man/bundle-init.ronn +15 -4
- data/man/bundle-inject.1 +4 -4
- data/man/bundle-inject.1.txt +10 -10
- data/man/bundle-inject.ronn +3 -3
- data/man/bundle-install.1 +31 -28
- data/man/bundle-install.1.txt +205 -194
- data/man/bundle-install.ronn +44 -35
- data/man/bundle-list.1 +50 -0
- data/man/bundle-list.1.txt +43 -0
- data/man/bundle-list.ronn +33 -0
- data/man/bundle-lock.1 +1 -1
- data/man/bundle-lock.1.txt +47 -47
- data/man/bundle-lock.ronn +1 -1
- data/man/bundle-open.1 +1 -1
- data/man/bundle-open.1.txt +7 -7
- data/man/bundle-outdated.1 +7 -3
- data/man/bundle-outdated.1.txt +40 -36
- data/man/bundle-outdated.ronn +6 -2
- data/man/bundle-package.1 +6 -3
- data/man/bundle-package.1.txt +44 -39
- data/man/bundle-package.ronn +7 -2
- data/man/bundle-platform.1 +1 -1
- data/man/bundle-platform.1.txt +13 -13
- data/man/bundle-pristine.1 +21 -3
- data/man/bundle-pristine.1.txt +33 -10
- data/man/bundle-pristine.ronn +24 -3
- data/man/bundle-remove.1 +31 -0
- data/man/bundle-remove.1.txt +34 -0
- data/man/bundle-remove.ronn +23 -0
- data/man/bundle-show.1 +3 -3
- data/man/bundle-show.1.txt +14 -12
- data/man/bundle-show.ronn +3 -2
- data/man/bundle-update.1 +13 -9
- data/man/bundle-update.1.txt +133 -130
- data/man/bundle-update.ronn +21 -17
- data/man/bundle-viz.1 +7 -7
- data/man/bundle-viz.1.txt +17 -15
- data/man/bundle-viz.ronn +6 -6
- data/man/bundle.1 +31 -32
- data/man/bundle.1.txt +63 -75
- data/man/bundle.ronn +35 -47
- data/man/gemfile.5 +44 -8
- data/man/gemfile.5.ronn +54 -8
- data/man/gemfile.5.txt +218 -165
- data/man/index.txt +25 -15
- metadata +36 -44
- data/.codeclimate.yml +0 -25
- data/.gitignore +0 -18
- data/.rspec +0 -3
- data/.rubocop.yml +0 -131
- data/.rubocop_todo.yml +0 -418
- data/.travis.yml +0 -122
- data/CODE_OF_CONDUCT.md +0 -42
- data/CONTRIBUTING.md +0 -17
- data/Rakefile +0 -346
- data/bin/rake +0 -19
- data/bin/rspec +0 -15
- data/bin/rubocop +0 -17
- data/bin/with_rubygems +0 -39
- data/doc/README.md +0 -30
- data/doc/TROUBLESHOOTING.md +0 -64
- data/doc/contributing/BUG_TRIAGE.md +0 -36
- data/doc/contributing/COMMUNITY.md +0 -13
- data/doc/contributing/GETTING_HELP.md +0 -11
- data/doc/contributing/HOW_YOU_CAN_HELP.md +0 -27
- data/doc/contributing/ISSUES.md +0 -51
- data/doc/contributing/README.md +0 -38
- data/doc/development/NEW_FEATURES.md +0 -10
- data/doc/development/PULL_REQUESTS.md +0 -40
- data/doc/development/README.md +0 -19
- data/doc/development/RELEASING.md +0 -9
- data/doc/development/SETUP.md +0 -29
- data/doc/documentation/README.md +0 -29
- data/doc/documentation/VISION.md +0 -26
- data/doc/documentation/WRITING.md +0 -54
- data/lib/bundler/postit_trampoline.rb +0 -73
- data/lib/bundler/vendor/postit/lib/postit/environment.rb +0 -44
- data/lib/bundler/vendor/postit/lib/postit/installer.rb +0 -28
- data/lib/bundler/vendor/postit/lib/postit/parser.rb +0 -21
- data/lib/bundler/vendor/postit/lib/postit/setup.rb +0 -12
- data/lib/bundler/vendor/postit/lib/postit/version.rb +0 -3
- data/lib/bundler/vendor/postit/lib/postit.rb +0 -15
- data/task/release.rake +0 -116
data/lib/bundler/cli/install.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::Install
|
@@ -13,19 +12,9 @@ module Bundler
|
|
13
12
|
|
14
13
|
warn_if_root
|
15
14
|
|
16
|
-
warn_if_outdated
|
17
|
-
|
18
|
-
[:with, :without].each do |option|
|
19
|
-
if options[option]
|
20
|
-
options[option] = options[option].join(":").tr(" ", ":").split(":")
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
check_for_group_conflicts
|
25
|
-
|
26
15
|
normalize_groups
|
27
16
|
|
28
|
-
|
17
|
+
Bundler::SharedHelpers.set_env "RB_USER_INSTALL", "1" if Bundler::FREEBSD
|
29
18
|
|
30
19
|
# Disable color in deployment mode
|
31
20
|
Bundler.ui.shell = Thor::Shell::Basic.new if options[:deployment]
|
@@ -34,22 +23,28 @@ module Bundler
|
|
34
23
|
|
35
24
|
check_trust_policy
|
36
25
|
|
37
|
-
if options[:deployment] || options[:frozen]
|
26
|
+
if options[:deployment] || options[:frozen] || Bundler.frozen_bundle?
|
38
27
|
unless Bundler.default_lockfile.exist?
|
39
|
-
flag
|
40
|
-
|
28
|
+
flag = "--deployment flag" if options[:deployment]
|
29
|
+
flag ||= "--frozen flag" if options[:frozen]
|
30
|
+
flag ||= "deployment setting"
|
31
|
+
raise ProductionError, "The #{flag} requires a #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)}. Please make " \
|
41
32
|
"sure you have checked your #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} into version control " \
|
42
33
|
"before deploying."
|
43
34
|
end
|
44
35
|
|
45
36
|
options[:local] = true if Bundler.app_cache.exist?
|
46
37
|
|
47
|
-
Bundler.
|
38
|
+
if Bundler.feature_flag.deployment_means_frozen?
|
39
|
+
Bundler.settings.set_command_option :deployment, true
|
40
|
+
else
|
41
|
+
Bundler.settings.set_command_option :frozen, true
|
42
|
+
end
|
48
43
|
end
|
49
44
|
|
50
45
|
# When install is called with --no-deployment, disable deployment mode
|
51
46
|
if options[:deployment] == false
|
52
|
-
Bundler.settings.
|
47
|
+
Bundler.settings.set_command_option :frozen, nil
|
53
48
|
options[:system] = true
|
54
49
|
end
|
55
50
|
|
@@ -58,7 +53,7 @@ module Bundler
|
|
58
53
|
Bundler::Fetcher.disable_endpoint = options["full-index"]
|
59
54
|
|
60
55
|
if options["binstubs"]
|
61
|
-
Bundler::SharedHelpers.major_deprecation
|
56
|
+
Bundler::SharedHelpers.major_deprecation 2,
|
62
57
|
"The --binstubs option will be removed in favor of `bundle binstubs`"
|
63
58
|
end
|
64
59
|
|
@@ -68,24 +63,23 @@ module Bundler
|
|
68
63
|
definition.validate_runtime!
|
69
64
|
|
70
65
|
installer = Installer.install(Bundler.root, definition, options)
|
71
|
-
Bundler.load.cache if Bundler.app_cache.exist? && !options["no-cache"] && !Bundler.
|
66
|
+
Bundler.load.cache if Bundler.app_cache.exist? && !options["no-cache"] && !Bundler.frozen_bundle?
|
72
67
|
|
73
68
|
Bundler.ui.confirm "Bundle complete! #{dependencies_count_for(definition)}, #{gems_installed_for(definition)}."
|
74
69
|
Bundler::CLI::Common.output_without_groups_message
|
75
70
|
|
76
|
-
if Bundler.
|
77
|
-
absolute_path = File.expand_path(Bundler.settings[:path])
|
78
|
-
relative_path = absolute_path.sub(File.expand_path(".") + File::SEPARATOR, "." + File::SEPARATOR)
|
79
|
-
Bundler.ui.confirm "Bundled gems are installed into #{relative_path}."
|
80
|
-
else
|
71
|
+
if Bundler.use_system_gems?
|
81
72
|
Bundler.ui.confirm "Use `bundle info [gemname]` to see where a bundled gem is installed."
|
73
|
+
else
|
74
|
+
relative_path = Bundler.configured_bundle_path.base_path_relative_to_pwd
|
75
|
+
Bundler.ui.confirm "Bundled gems are installed into `#{relative_path}`"
|
82
76
|
end
|
83
77
|
|
84
78
|
Bundler::CLI::Common.output_post_install_messages installer.post_install_messages
|
85
79
|
|
86
80
|
warn_ambiguous_gems
|
87
81
|
|
88
|
-
if
|
82
|
+
if CLI::Common.clean_after_install?
|
89
83
|
require "bundler/cli/clean"
|
90
84
|
Bundler::CLI::Clean.new(options).run
|
91
85
|
end
|
@@ -116,20 +110,6 @@ module Bundler
|
|
116
110
|
"application for all non-root users on this machine.", :wrap => true
|
117
111
|
end
|
118
112
|
|
119
|
-
def warn_if_outdated
|
120
|
-
return if ENV["BUNDLE_POSTIT_TRAMPOLINING_VERSION"].nil?
|
121
|
-
installed_version = Gem::Version.new(ENV["BUNDLE_POSTIT_TRAMPOLINING_VERSION"].dup)
|
122
|
-
running_version = Gem::Version.new(Bundler::VERSION)
|
123
|
-
return if Gem::Requirement.new(installed_version).satisfied_by?(running_version)
|
124
|
-
if Bundler.settings[:warned_version].nil? || running_version > Gem::Version.new(Bundler.settings[:warned_version])
|
125
|
-
Bundler.settings[:warned_version] = running_version
|
126
|
-
Bundler.ui.warn "You're running Bundler #{installed_version} but this " \
|
127
|
-
"project uses #{running_version}. To update, run `bundle update " \
|
128
|
-
"--bundler`. You won't see this message again unless you upgrade " \
|
129
|
-
"to a newer version of Bundler.", :wrap => true
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
113
|
def dependencies_count_for(definition)
|
134
114
|
count = definition.dependencies.count
|
135
115
|
"#{count} Gemfile #{count == 1 ? "dependency" : "dependencies"}"
|
@@ -140,15 +120,11 @@ module Bundler
|
|
140
120
|
"#{count} #{count == 1 ? "gem" : "gems"} now installed"
|
141
121
|
end
|
142
122
|
|
143
|
-
def
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
"The offending groups are: #{conflicting_groups.join(", ")}."
|
149
|
-
exit 1
|
150
|
-
end
|
151
|
-
end
|
123
|
+
def check_for_group_conflicts_in_cli_options
|
124
|
+
conflicting_groups = Array(options[:without]) & Array(options[:with])
|
125
|
+
return if conflicting_groups.empty?
|
126
|
+
raise InvalidOption, "You can't list a group in both with and without." \
|
127
|
+
" The offending groups are: #{conflicting_groups.join(", ")}."
|
152
128
|
end
|
153
129
|
|
154
130
|
def check_for_options_conflicts
|
@@ -161,28 +137,29 @@ module Bundler
|
|
161
137
|
end
|
162
138
|
|
163
139
|
def check_trust_policy
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
exit 1
|
169
|
-
end
|
170
|
-
Bundler.settings["trust-policy"] = options["trust-policy"]
|
171
|
-
else
|
172
|
-
Bundler.settings["trust-policy"] = nil if Bundler.settings["trust-policy"]
|
140
|
+
trust_policy = options["trust-policy"]
|
141
|
+
unless Bundler.rubygems.security_policies.keys.unshift(nil).include?(trust_policy)
|
142
|
+
raise InvalidOption, "RubyGems doesn't know about trust policy '#{trust_policy}'. " \
|
143
|
+
"The known policies are: #{Bundler.rubygems.security_policies.keys.join(", ")}."
|
173
144
|
end
|
145
|
+
Bundler.settings.set_command_option_if_given :"trust-policy", trust_policy
|
174
146
|
end
|
175
147
|
|
176
148
|
def normalize_groups
|
177
|
-
|
178
|
-
|
149
|
+
options[:with] &&= options[:with].join(":").tr(" ", ":").split(":")
|
150
|
+
options[:without] &&= options[:without].join(":").tr(" ", ":").split(":")
|
179
151
|
|
180
|
-
|
181
|
-
|
152
|
+
check_for_group_conflicts_in_cli_options
|
153
|
+
|
154
|
+
Bundler.settings.set_command_option :with, nil if options[:with] == []
|
155
|
+
Bundler.settings.set_command_option :without, nil if options[:without] == []
|
156
|
+
|
157
|
+
with = options.fetch(:with, [])
|
158
|
+
with |= Bundler.settings[:with].map(&:to_s)
|
182
159
|
with -= options[:without] if options[:without]
|
183
160
|
|
184
|
-
without = options.fetch(
|
185
|
-
without |= Bundler.settings
|
161
|
+
without = options.fetch(:without, [])
|
162
|
+
without |= Bundler.settings[:without].map(&:to_s)
|
186
163
|
without -= options[:with] if options[:with]
|
187
164
|
|
188
165
|
options[:with] = with
|
@@ -190,28 +167,38 @@ module Bundler
|
|
190
167
|
end
|
191
168
|
|
192
169
|
def normalize_settings
|
193
|
-
Bundler.settings
|
194
|
-
Bundler.settings
|
195
|
-
|
196
|
-
|
170
|
+
Bundler.settings.set_command_option :path, nil if options[:system]
|
171
|
+
Bundler.settings.temporary(:path_relative_to_cwd => false) do
|
172
|
+
Bundler.settings.set_command_option :path, "vendor/bundle" if options[:deployment]
|
173
|
+
end
|
174
|
+
Bundler.settings.set_command_option_if_given :path, options[:path]
|
175
|
+
Bundler.settings.temporary(:path_relative_to_cwd => false) do
|
176
|
+
Bundler.settings.set_command_option :path, "bundle" if options["standalone"] && Bundler.settings[:path].nil?
|
177
|
+
end
|
197
178
|
|
198
|
-
|
199
|
-
|
179
|
+
bin_option = options["binstubs"]
|
180
|
+
bin_option = nil if bin_option && bin_option.empty?
|
181
|
+
Bundler.settings.set_command_option :bin, bin_option if options["binstubs"]
|
200
182
|
|
201
|
-
Bundler.settings
|
183
|
+
Bundler.settings.set_command_option_if_given :shebang, options["shebang"]
|
202
184
|
|
203
|
-
Bundler.settings
|
185
|
+
Bundler.settings.set_command_option_if_given :jobs, options["jobs"]
|
204
186
|
|
205
|
-
Bundler.settings
|
187
|
+
Bundler.settings.set_command_option_if_given :no_prune, options["no-prune"]
|
206
188
|
|
207
|
-
Bundler.settings
|
189
|
+
Bundler.settings.set_command_option_if_given :no_install, options["no-install"]
|
208
190
|
|
209
|
-
Bundler.settings
|
191
|
+
Bundler.settings.set_command_option_if_given :clean, options["clean"]
|
210
192
|
|
211
|
-
Bundler.settings
|
212
|
-
|
193
|
+
unless Bundler.settings[:without] == options[:without] && Bundler.settings[:with] == options[:with]
|
194
|
+
# need to nil them out first to get around validation for backwards compatibility
|
195
|
+
Bundler.settings.set_command_option :without, nil
|
196
|
+
Bundler.settings.set_command_option :with, nil
|
197
|
+
Bundler.settings.set_command_option :without, options[:without] - options[:with]
|
198
|
+
Bundler.settings.set_command_option :with, options[:with]
|
199
|
+
end
|
213
200
|
|
214
|
-
|
201
|
+
options[:force] = options[:redownload]
|
215
202
|
end
|
216
203
|
|
217
204
|
def warn_ambiguous_gems
|
data/lib/bundler/cli/issue.rb
CHANGED
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
class CLI::List
|
5
|
+
def initialize(options)
|
6
|
+
@options = options
|
7
|
+
end
|
8
|
+
|
9
|
+
def run
|
10
|
+
raise InvalidOption, "The `--only-group` and `--without-group` options cannot be used together" if @options["only-group"] && @options["without-group"]
|
11
|
+
|
12
|
+
raise InvalidOption, "The `--name-only` and `--paths` options cannot be used together" if @options["name-only"] && @options[:paths]
|
13
|
+
|
14
|
+
specs = if @options["only-group"] || @options["without-group"]
|
15
|
+
filtered_specs_by_groups
|
16
|
+
else
|
17
|
+
Bundler.load.specs
|
18
|
+
end.reject {|s| s.name == "bundler" }.sort_by(&:name)
|
19
|
+
|
20
|
+
return Bundler.ui.info "No gems in the Gemfile" if specs.empty?
|
21
|
+
|
22
|
+
return specs.each {|s| Bundler.ui.info s.name } if @options["name-only"]
|
23
|
+
return specs.each {|s| Bundler.ui.info s.full_gem_path } if @options["paths"]
|
24
|
+
|
25
|
+
Bundler.ui.info "Gems included by the bundle:"
|
26
|
+
|
27
|
+
specs.each {|s| Bundler.ui.info " * #{s.name} (#{s.version}#{s.git_version})" }
|
28
|
+
|
29
|
+
Bundler.ui.info "Use `bundle info` to print more detailed information about a gem"
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def verify_group_exists(groups)
|
35
|
+
raise InvalidOption, "`#{@options["without-group"]}` group could not be found." if @options["without-group"] && !groups.include?(@options["without-group"].to_sym)
|
36
|
+
|
37
|
+
raise InvalidOption, "`#{@options["only-group"]}` group could not be found." if @options["only-group"] && !groups.include?(@options["only-group"].to_sym)
|
38
|
+
end
|
39
|
+
|
40
|
+
def filtered_specs_by_groups
|
41
|
+
definition = Bundler.definition
|
42
|
+
groups = definition.groups
|
43
|
+
|
44
|
+
verify_group_exists(groups)
|
45
|
+
|
46
|
+
show_groups =
|
47
|
+
if @options["without-group"]
|
48
|
+
groups.reject {|g| g == @options["without-group"].to_sym }
|
49
|
+
elsif @options["only-group"]
|
50
|
+
groups.select {|g| g == @options["only-group"].to_sym }
|
51
|
+
else
|
52
|
+
groups
|
53
|
+
end.map(&:to_sym)
|
54
|
+
|
55
|
+
definition.specs_for(show_groups)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/lib/bundler/cli/lock.rb
CHANGED
data/lib/bundler/cli/open.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
2
|
+
|
3
3
|
require "shellwords"
|
4
4
|
|
5
5
|
module Bundler
|
@@ -17,7 +17,7 @@ module Bundler
|
|
17
17
|
path = spec.full_gem_path
|
18
18
|
Dir.chdir(path) do
|
19
19
|
command = Shellwords.split(editor) + [path]
|
20
|
-
Bundler.
|
20
|
+
Bundler.with_original_env do
|
21
21
|
system(*command)
|
22
22
|
end || Bundler.ui.info("Could not run '#{command.join(" ")}'")
|
23
23
|
end
|
data/lib/bundler/cli/outdated.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::Outdated
|
@@ -46,7 +45,7 @@ module Bundler
|
|
46
45
|
Bundler::CLI::Common.patch_level_options(options).any?
|
47
46
|
|
48
47
|
filter_options_patch = options.keys &
|
49
|
-
%w
|
48
|
+
%w[filter-major filter-minor filter-patch]
|
50
49
|
|
51
50
|
definition_resolution = proc do
|
52
51
|
options[:local] ? definition.resolve_with_cache! : definition.resolve_remotely!
|
@@ -67,7 +66,13 @@ module Bundler
|
|
67
66
|
current_dependencies.key? spec.name
|
68
67
|
end
|
69
68
|
|
70
|
-
|
69
|
+
specs = if options["only-explicit"]
|
70
|
+
gemfile_specs
|
71
|
+
else
|
72
|
+
gemfile_specs + dependency_specs
|
73
|
+
end
|
74
|
+
|
75
|
+
specs.sort_by(&:name).each do |current_spec|
|
71
76
|
next if !gems.empty? && !gems.include?(current_spec.name)
|
72
77
|
|
73
78
|
dependency = current_dependencies[current_spec.name]
|
@@ -214,13 +219,19 @@ module Bundler
|
|
214
219
|
end
|
215
220
|
|
216
221
|
def check_for_deployment_mode
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
222
|
+
return unless Bundler.frozen_bundle?
|
223
|
+
suggested_command = if Bundler.settings.locations("frozen")[:global]
|
224
|
+
"bundle config --delete frozen"
|
225
|
+
elsif Bundler.settings.locations("deployment").keys.&([:global, :local]).any?
|
226
|
+
"bundle config --delete deployment"
|
227
|
+
else
|
228
|
+
"bundle install --no-deployment"
|
223
229
|
end
|
230
|
+
raise ProductionError, "You are trying to check outdated gems in " \
|
231
|
+
"deployment mode. Run `bundle outdated` elsewhere.\n" \
|
232
|
+
"\nIf this is a development machine, remove the " \
|
233
|
+
"#{Bundler.default_gemfile} freeze" \
|
234
|
+
"\nby running `#{suggested_command}`."
|
224
235
|
end
|
225
236
|
|
226
237
|
def update_present_via_semver_portions(current_spec, active_spec, options)
|
data/lib/bundler/cli/package.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Bundler
|
3
4
|
class CLI::Package
|
4
5
|
attr_reader :options
|
@@ -9,15 +10,15 @@ module Bundler
|
|
9
10
|
|
10
11
|
def run
|
11
12
|
Bundler.ui.level = "error" if options[:quiet]
|
12
|
-
Bundler.settings
|
13
|
-
Bundler.settings
|
14
|
-
Bundler.settings
|
13
|
+
Bundler.settings.set_command_option_if_given :path, options[:path]
|
14
|
+
Bundler.settings.set_command_option_if_given :cache_all_platforms, options["all-platforms"]
|
15
|
+
Bundler.settings.set_command_option_if_given :cache_path, options["cache-path"]
|
15
16
|
|
16
17
|
setup_cache_all
|
17
18
|
install
|
18
19
|
|
19
20
|
# TODO: move cache contents here now that all bundles are locked
|
20
|
-
custom_path =
|
21
|
+
custom_path = Bundler.settings[:path] if options[:path]
|
21
22
|
Bundler.load.cache(custom_path)
|
22
23
|
end
|
23
24
|
|
@@ -34,9 +35,11 @@ module Bundler
|
|
34
35
|
end
|
35
36
|
|
36
37
|
def setup_cache_all
|
37
|
-
|
38
|
+
all = options.fetch(:all, Bundler.feature_flag.cache_command_is_package? || nil)
|
39
|
+
|
40
|
+
Bundler.settings.set_command_option_if_given :cache_all, all
|
38
41
|
|
39
|
-
if Bundler.definition.has_local_dependencies? && !Bundler.
|
42
|
+
if Bundler.definition.has_local_dependencies? && !Bundler.feature_flag.cache_all?
|
40
43
|
Bundler.ui.warn "Your Gemfile contains path and git dependencies. If you want " \
|
41
44
|
"to package them as well, please pass the --all flag. This will be the default " \
|
42
45
|
"on Bundler 2.0."
|
data/lib/bundler/cli/platform.rb
CHANGED
data/lib/bundler/cli/plugin.rb
CHANGED
data/lib/bundler/cli/pristine.rb
CHANGED
@@ -1,16 +1,25 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require "bundler/cli/common"
|
3
2
|
|
4
3
|
module Bundler
|
5
4
|
class CLI::Pristine
|
5
|
+
def initialize(gems)
|
6
|
+
@gems = gems
|
7
|
+
end
|
8
|
+
|
6
9
|
def run
|
10
|
+
CLI::Common.ensure_all_gems_in_lockfile!(@gems)
|
11
|
+
definition = Bundler.definition
|
12
|
+
definition.validate_runtime!
|
13
|
+
installer = Bundler::Installer.new(Bundler.root, definition)
|
14
|
+
|
7
15
|
Bundler.load.specs.each do |spec|
|
8
16
|
next if spec.name == "bundler" # Source::Rubygems doesn't install bundler
|
17
|
+
next if !@gems.empty? && !@gems.include?(spec.name)
|
9
18
|
|
10
19
|
gem_name = "#{spec.name} (#{spec.version}#{spec.git_version})"
|
11
20
|
gem_name += " (#{spec.platform})" if !spec.platform.nil? && spec.platform != Gem::Platform::RUBY
|
12
21
|
|
13
|
-
case spec.source
|
22
|
+
case source = spec.source
|
14
23
|
when Source::Rubygems
|
15
24
|
cached_gem = spec.cache_file
|
16
25
|
unless File.exist?(cached_gem)
|
@@ -19,14 +28,19 @@ module Bundler
|
|
19
28
|
end
|
20
29
|
|
21
30
|
FileUtils.rm_rf spec.full_gem_path
|
22
|
-
spec.source.install(spec, :force => true)
|
23
31
|
when Source::Git
|
24
|
-
|
25
|
-
|
26
|
-
|
32
|
+
source.remote!
|
33
|
+
if extension_cache_path = source.extension_cache_path(spec)
|
34
|
+
FileUtils.rm_rf extension_cache_path
|
35
|
+
end
|
36
|
+
FileUtils.rm_rf spec.extension_dir if spec.respond_to?(:extension_dir)
|
37
|
+
FileUtils.rm_rf spec.full_gem_path
|
27
38
|
else
|
28
39
|
Bundler.ui.warn("Cannot pristine #{gem_name}. Gem is sourced from local path.")
|
40
|
+
next
|
29
41
|
end
|
42
|
+
|
43
|
+
Bundler::GemInstaller.new(spec, installer, false, 0, true).install_from_spec
|
30
44
|
end
|
31
45
|
end
|
32
46
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
class CLI::Remove
|
5
|
+
def initialize(gems, options)
|
6
|
+
@gems = gems
|
7
|
+
@options = options
|
8
|
+
end
|
9
|
+
|
10
|
+
def run
|
11
|
+
raise InvalidOption, "Please specify gems to remove." if @gems.empty?
|
12
|
+
|
13
|
+
Injector.remove(@gems, {})
|
14
|
+
|
15
|
+
Installer.install(Bundler.root, Bundler.definition) if @options["install"]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/bundler/cli/show.rb
CHANGED
data/lib/bundler/cli/update.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::Update
|
@@ -17,7 +16,18 @@ module Bundler
|
|
17
16
|
sources = Array(options[:source])
|
18
17
|
groups = Array(options[:group]).map(&:to_sym)
|
19
18
|
|
20
|
-
|
19
|
+
full_update = gems.empty? && sources.empty? && groups.empty? && !options[:ruby] && !options[:bundler]
|
20
|
+
|
21
|
+
if full_update && !options[:all]
|
22
|
+
if Bundler.feature_flag.update_requires_all_flag?
|
23
|
+
raise InvalidOption, "To update everything, pass the `--all` flag."
|
24
|
+
end
|
25
|
+
SharedHelpers.major_deprecation 2, "Pass --all to `bundle update` to update everything"
|
26
|
+
elsif !full_update && options[:all]
|
27
|
+
raise InvalidOption, "Cannot specify --all along with specific options."
|
28
|
+
end
|
29
|
+
|
30
|
+
if full_update
|
21
31
|
# We're doing a full update
|
22
32
|
Bundler.definition(true)
|
23
33
|
else
|
@@ -28,12 +38,13 @@ module Bundler
|
|
28
38
|
Bundler::CLI::Common.ensure_all_gems_in_lockfile!(gems)
|
29
39
|
|
30
40
|
if groups.any?
|
31
|
-
|
32
|
-
gems.concat(
|
41
|
+
deps = Bundler.definition.dependencies.select {|d| (d.groups & groups).any? }
|
42
|
+
gems.concat(deps.map(&:name))
|
33
43
|
end
|
34
44
|
|
35
45
|
Bundler.definition(:gems => gems, :sources => sources, :ruby => options[:ruby],
|
36
|
-
:lock_shared_dependencies => options[:conservative]
|
46
|
+
:lock_shared_dependencies => options[:conservative],
|
47
|
+
:bundler => options[:bundler])
|
37
48
|
end
|
38
49
|
|
39
50
|
Bundler::CLI::Common.configure_gem_version_promoter(Bundler.definition, options)
|
@@ -44,17 +55,34 @@ module Bundler
|
|
44
55
|
opts["update"] = true
|
45
56
|
opts["local"] = options[:local]
|
46
57
|
|
47
|
-
Bundler.settings
|
58
|
+
Bundler.settings.set_command_option_if_given :jobs, opts["jobs"]
|
48
59
|
|
49
60
|
Bundler.definition.validate_runtime!
|
50
61
|
installer = Installer.install Bundler.root, Bundler.definition, opts
|
51
62
|
Bundler.load.cache if Bundler.app_cache.exist?
|
52
63
|
|
53
|
-
if
|
64
|
+
if CLI::Common.clean_after_install?
|
54
65
|
require "bundler/cli/clean"
|
55
66
|
Bundler::CLI::Clean.new(options).run
|
56
67
|
end
|
57
68
|
|
69
|
+
if locked_gems = Bundler.definition.locked_gems
|
70
|
+
gems.each do |name|
|
71
|
+
locked_version = locked_gems.specs.find {|s| s.name == name }
|
72
|
+
locked_version &&= locked_version.version
|
73
|
+
next unless locked_version
|
74
|
+
new_version = Bundler.definition.specs[name].first
|
75
|
+
new_version &&= new_version.version
|
76
|
+
if !new_version
|
77
|
+
Bundler.ui.warn "Bundler attempted to update #{name} but it was removed from the bundle"
|
78
|
+
elsif new_version < locked_version
|
79
|
+
Bundler.ui.warn "Note: #{name} version regressed from #{locked_version} to #{new_version}"
|
80
|
+
elsif new_version == locked_version
|
81
|
+
Bundler.ui.warn "Bundler attempted to update #{name} but its version stayed the same"
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
58
86
|
Bundler.ui.confirm "Bundle updated!"
|
59
87
|
Bundler::CLI::Common.output_without_groups_message
|
60
88
|
Bundler::CLI::Common.output_post_install_messages installer.post_install_messages
|
data/lib/bundler/cli/viz.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Bundler
|
3
4
|
class CLI::Viz
|
4
5
|
attr_reader :options, :gem_name
|
@@ -7,6 +8,9 @@ module Bundler
|
|
7
8
|
end
|
8
9
|
|
9
10
|
def run
|
11
|
+
# make sure we get the right `graphviz`. There is also a `graphviz`
|
12
|
+
# gem we're not built to support
|
13
|
+
gem "ruby-graphviz"
|
10
14
|
require "graphviz"
|
11
15
|
|
12
16
|
options[:without] = options[:without].join(":").tr(" ", ":").split(":")
|