bundler 1.15.2 → 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 +302 -0
- data/README.md +17 -8
- data/bundler.gemspec +25 -9
- data/exe/bundle +1 -1
- 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 -61
- 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 +1 -0
- data/lib/bundler/cli.rb +227 -89
- data/lib/bundler/compact_index_client/cache.rb +1 -2
- data/lib/bundler/compact_index_client/updater.rb +14 -4
- 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 +5 -7
- data/lib/bundler/installer/gem_installer.rb +11 -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 +1 -0
- 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 +200 -77
- data/lib/bundler/setup.rb +1 -0
- 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 +8 -8
- 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 +10 -5
- 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 +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/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 +1 -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 +3 -3
- data/man/bundle-gem.1.txt +40 -39
- data/man/bundle-gem.ronn +2 -1
- 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 -23
- data/man/bundle.1.txt +63 -57
- data/man/bundle.ronn +35 -29
- 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 -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/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/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
|
@@ -10,9 +11,9 @@ module Bundler
|
|
10
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,10 +9,7 @@ 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
|
@@ -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.file? && Bundler.
|
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
|
@@ -15,12 +16,10 @@ module Bundler
|
|
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,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Bundler
|
3
4
|
module CLI::Common
|
4
5
|
def self.output_post_install_messages(messages)
|
@@ -14,12 +15,12 @@ module Bundler
|
|
14
15
|
end
|
15
16
|
|
16
17
|
def self.output_without_groups_message
|
17
|
-
return
|
18
|
+
return if Bundler.settings[:without].empty?
|
18
19
|
Bundler.ui.confirm without_groups_message
|
19
20
|
end
|
20
21
|
|
21
22
|
def self.without_groups_message
|
22
|
-
groups = Bundler.settings
|
23
|
+
groups = Bundler.settings[:without]
|
23
24
|
group_list = [groups[0...-1].join(", "), groups[-1..-1]].
|
24
25
|
reject {|s| s.to_s.empty? }.join(" and ")
|
25
26
|
group_str = (groups.size == 1) ? "group" : "groups"
|
@@ -89,5 +90,13 @@ module Bundler
|
|
89
90
|
def self.patch_level_options(options)
|
90
91
|
[:major, :minor, :patch].select {|v| options.keys.include?(v.to_s) }
|
91
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
|
92
101
|
end
|
93
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
|
@@ -112,7 +113,7 @@ module Bundler
|
|
112
113
|
end
|
113
114
|
|
114
115
|
def valid_scope?(scope)
|
115
|
-
%w
|
116
|
+
%w[delete local global].include?(scope)
|
116
117
|
end
|
117
118
|
end
|
118
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
@@ -62,6 +62,7 @@ module Bundler
|
|
62
62
|
|
63
63
|
def run
|
64
64
|
Bundler.ui.level = "error" if options[:quiet]
|
65
|
+
Bundler.settings.validate!
|
65
66
|
check!
|
66
67
|
|
67
68
|
definition = Bundler.definition
|
@@ -77,6 +78,8 @@ module Bundler
|
|
77
78
|
end
|
78
79
|
end
|
79
80
|
|
81
|
+
permissions_valid = check_home_permissions
|
82
|
+
|
80
83
|
if broken_links.any?
|
81
84
|
message = "The following gems are missing OS dependencies:"
|
82
85
|
broken_links.map do |spec, paths|
|
@@ -85,9 +88,53 @@ module Bundler
|
|
85
88
|
end
|
86
89
|
end.flatten.sort.each {|m| message += m }
|
87
90
|
raise ProductionError, message
|
88
|
-
|
91
|
+
elsif !permissions_valid
|
89
92
|
Bundler.ui.info "No issues found with the installed bundle"
|
90
93
|
end
|
91
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
|
109
|
+
end
|
110
|
+
elsif File.stat(f).uid != Process.uid
|
111
|
+
files_not_owned_by_current_user_but_still_rw << f
|
112
|
+
end
|
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
|
138
|
+
end
|
92
139
|
end
|
93
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,6 +89,7 @@ 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
|
]
|
94
95
|
|
data/lib/bundler/cli/gem.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "pathname"
|
3
4
|
|
4
5
|
module Bundler
|
@@ -71,10 +72,10 @@ module Bundler
|
|
71
72
|
"bin/setup.tt" => "bin/setup"
|
72
73
|
}
|
73
74
|
|
74
|
-
executables = %w
|
75
|
+
executables = %w[
|
75
76
|
bin/console
|
76
77
|
bin/setup
|
77
|
-
|
78
|
+
]
|
78
79
|
|
79
80
|
templates.merge!("gitignore.tt" => ".gitignore") if Bundler.git_present?
|
80
81
|
|
@@ -82,7 +83,7 @@ module Bundler
|
|
82
83
|
config[:test] = test_framework
|
83
84
|
config[:test_framework_version] = TEST_FRAMEWORK_VERSIONS[test_framework]
|
84
85
|
|
85
|
-
templates.merge!("
|
86
|
+
templates.merge!("travis.yml.tt" => ".travis.yml")
|
86
87
|
|
87
88
|
case test_framework
|
88
89
|
when "rspec"
|
@@ -104,7 +105,7 @@ module Bundler
|
|
104
105
|
if ask_and_set(:mit, "Do you want to license your code permissively under the MIT license?",
|
105
106
|
"This means that any other developer or company will be legally allowed to use your code " \
|
106
107
|
"for free as long as they admit you created it. You can read more about the MIT license " \
|
107
|
-
"at
|
108
|
+
"at https://choosealicense.com/licenses/mit.")
|
108
109
|
config[:mit] = true
|
109
110
|
Bundler.ui.info "MIT License enabled in config"
|
110
111
|
templates.merge!("LICENSE.txt.tt" => "LICENSE.txt")
|
@@ -117,7 +118,7 @@ module Bundler
|
|
117
118
|
"of enforcing it, so be sure that you are prepared to do that. Be sure that your email " \
|
118
119
|
"address is specified as a contact in the generated code of conduct so that people know " \
|
119
120
|
"who to contact in case of a violation. For suggestions about " \
|
120
|
-
"how to enforce codes of conduct, see
|
121
|
+
"how to enforce codes of conduct, see https://bit.ly/coc-enforcement.")
|
121
122
|
config[:coc] = true
|
122
123
|
Bundler.ui.info "Code of conduct enabled in config"
|
123
124
|
templates.merge!("CODE_OF_CONDUCT.md.tt" => "CODE_OF_CONDUCT.md")
|
@@ -141,9 +142,10 @@ module Bundler
|
|
141
142
|
end
|
142
143
|
|
143
144
|
executables.each do |file|
|
144
|
-
|
145
|
-
|
146
|
-
|
145
|
+
SharedHelpers.filesystem_access(target.join(file)) do |path|
|
146
|
+
executable = (path.stat.mode | 0o111)
|
147
|
+
path.chmod(executable)
|
148
|
+
end
|
147
149
|
end
|
148
150
|
|
149
151
|
if Bundler.git_present?
|
@@ -156,6 +158,9 @@ module Bundler
|
|
156
158
|
|
157
159
|
# Open gemspec in editor
|
158
160
|
open_editor(options["edit"], target.join("#{name}.gemspec")) if options[:edit]
|
161
|
+
|
162
|
+
Bundler.ui.info "Gem '#{name}' was successfully created. " \
|
163
|
+
"For more information on making a RubyGem visit https://bundler.io/guides/creating_gem.html"
|
159
164
|
rescue Errno::EEXIST => e
|
160
165
|
raise GenericSystemCallError.new(e, "There was a conflict while creating the new gem.")
|
161
166
|
end
|
data/lib/bundler/cli/info.rb
CHANGED
data/lib/bundler/cli/init.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Bundler
|
3
4
|
class CLI::Init
|
4
5
|
attr_reader :options
|
@@ -7,8 +8,13 @@ module Bundler
|
|
7
8
|
end
|
8
9
|
|
9
10
|
def run
|
10
|
-
if File.exist?(
|
11
|
-
Bundler.ui.error "
|
11
|
+
if File.exist?(gemfile)
|
12
|
+
Bundler.ui.error "#{gemfile} already exists at #{File.expand_path(gemfile)}"
|
13
|
+
exit 1
|
14
|
+
end
|
15
|
+
|
16
|
+
unless File.writable?(Dir.pwd)
|
17
|
+
Bundler.ui.error "Can not create #{gemfile} as the current directory is not writable."
|
12
18
|
exit 1
|
13
19
|
end
|
14
20
|
|
@@ -21,15 +27,21 @@ module Bundler
|
|
21
27
|
|
22
28
|
spec = Bundler.load_gemspec_uncached(gemspec)
|
23
29
|
|
24
|
-
|
25
|
-
File.open("Gemfile", "wb") do |file|
|
30
|
+
File.open(gemfile, "wb") do |file|
|
26
31
|
file << "# Generated from #{gemspec}\n"
|
27
32
|
file << spec.to_gemfile
|
28
33
|
end
|
29
34
|
else
|
30
|
-
|
31
|
-
FileUtils.cp(File.expand_path("../../templates/Gemfile", __FILE__), "Gemfile")
|
35
|
+
FileUtils.cp(File.expand_path("../../templates/#{gemfile}", __FILE__), gemfile)
|
32
36
|
end
|
37
|
+
|
38
|
+
puts "Writing new #{gemfile} to #{SharedHelpers.pwd}/#{gemfile}"
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def gemfile
|
44
|
+
@gemfile ||= Bundler.feature_flag.init_gems_rb? ? "gems.rb" : "Gemfile"
|
33
45
|
end
|
34
46
|
end
|
35
47
|
end
|
data/lib/bundler/cli/inject.rb
CHANGED
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,17 +12,9 @@ module Bundler
|
|
13
12
|
|
14
13
|
warn_if_root
|
15
14
|
|
16
|
-
[:with, :without].each do |option|
|
17
|
-
if options[option]
|
18
|
-
options[option] = options[option].join(":").tr(" ", ":").split(":")
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
check_for_group_conflicts
|
23
|
-
|
24
15
|
normalize_groups
|
25
16
|
|
26
|
-
|
17
|
+
Bundler::SharedHelpers.set_env "RB_USER_INSTALL", "1" if Bundler::FREEBSD
|
27
18
|
|
28
19
|
# Disable color in deployment mode
|
29
20
|
Bundler.ui.shell = Thor::Shell::Basic.new if options[:deployment]
|
@@ -32,22 +23,28 @@ module Bundler
|
|
32
23
|
|
33
24
|
check_trust_policy
|
34
25
|
|
35
|
-
if options[:deployment] || options[:frozen]
|
26
|
+
if options[:deployment] || options[:frozen] || Bundler.frozen_bundle?
|
36
27
|
unless Bundler.default_lockfile.exist?
|
37
|
-
flag
|
38
|
-
|
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 " \
|
39
32
|
"sure you have checked your #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} into version control " \
|
40
33
|
"before deploying."
|
41
34
|
end
|
42
35
|
|
43
36
|
options[:local] = true if Bundler.app_cache.exist?
|
44
37
|
|
45
|
-
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
|
46
43
|
end
|
47
44
|
|
48
45
|
# When install is called with --no-deployment, disable deployment mode
|
49
46
|
if options[:deployment] == false
|
50
|
-
Bundler.settings.
|
47
|
+
Bundler.settings.set_command_option :frozen, nil
|
51
48
|
options[:system] = true
|
52
49
|
end
|
53
50
|
|
@@ -56,7 +53,7 @@ module Bundler
|
|
56
53
|
Bundler::Fetcher.disable_endpoint = options["full-index"]
|
57
54
|
|
58
55
|
if options["binstubs"]
|
59
|
-
Bundler::SharedHelpers.major_deprecation
|
56
|
+
Bundler::SharedHelpers.major_deprecation 2,
|
60
57
|
"The --binstubs option will be removed in favor of `bundle binstubs`"
|
61
58
|
end
|
62
59
|
|
@@ -66,24 +63,23 @@ module Bundler
|
|
66
63
|
definition.validate_runtime!
|
67
64
|
|
68
65
|
installer = Installer.install(Bundler.root, definition, options)
|
69
|
-
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?
|
70
67
|
|
71
68
|
Bundler.ui.confirm "Bundle complete! #{dependencies_count_for(definition)}, #{gems_installed_for(definition)}."
|
72
69
|
Bundler::CLI::Common.output_without_groups_message
|
73
70
|
|
74
|
-
if Bundler.
|
75
|
-
absolute_path = File.expand_path(Bundler.settings[:path])
|
76
|
-
relative_path = absolute_path.sub(File.expand_path(".") + File::SEPARATOR, "." + File::SEPARATOR)
|
77
|
-
Bundler.ui.confirm "Bundled gems are installed into #{relative_path}."
|
78
|
-
else
|
71
|
+
if Bundler.use_system_gems?
|
79
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}`"
|
80
76
|
end
|
81
77
|
|
82
78
|
Bundler::CLI::Common.output_post_install_messages installer.post_install_messages
|
83
79
|
|
84
80
|
warn_ambiguous_gems
|
85
81
|
|
86
|
-
if
|
82
|
+
if CLI::Common.clean_after_install?
|
87
83
|
require "bundler/cli/clean"
|
88
84
|
Bundler::CLI::Clean.new(options).run
|
89
85
|
end
|
@@ -124,15 +120,11 @@ module Bundler
|
|
124
120
|
"#{count} #{count == 1 ? "gem" : "gems"} now installed"
|
125
121
|
end
|
126
122
|
|
127
|
-
def
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
" The offending groups are: #{conflicting_groups.join(", ")}."
|
133
|
-
exit 1
|
134
|
-
end
|
135
|
-
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(", ")}."
|
136
128
|
end
|
137
129
|
|
138
130
|
def check_for_options_conflicts
|
@@ -145,28 +137,29 @@ module Bundler
|
|
145
137
|
end
|
146
138
|
|
147
139
|
def check_trust_policy
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
exit 1
|
153
|
-
end
|
154
|
-
Bundler.settings["trust-policy"] = options["trust-policy"]
|
155
|
-
else
|
156
|
-
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(", ")}."
|
157
144
|
end
|
145
|
+
Bundler.settings.set_command_option_if_given :"trust-policy", trust_policy
|
158
146
|
end
|
159
147
|
|
160
148
|
def normalize_groups
|
161
|
-
|
162
|
-
|
149
|
+
options[:with] &&= options[:with].join(":").tr(" ", ":").split(":")
|
150
|
+
options[:without] &&= options[:without].join(":").tr(" ", ":").split(":")
|
151
|
+
|
152
|
+
check_for_group_conflicts_in_cli_options
|
163
153
|
|
164
|
-
with
|
165
|
-
|
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)
|
166
159
|
with -= options[:without] if options[:without]
|
167
160
|
|
168
|
-
without = options.fetch(
|
169
|
-
without |= Bundler.settings
|
161
|
+
without = options.fetch(:without, [])
|
162
|
+
without |= Bundler.settings[:without].map(&:to_s)
|
170
163
|
without -= options[:with] if options[:with]
|
171
164
|
|
172
165
|
options[:with] = with
|
@@ -174,28 +167,38 @@ module Bundler
|
|
174
167
|
end
|
175
168
|
|
176
169
|
def normalize_settings
|
177
|
-
Bundler.settings
|
178
|
-
Bundler.settings
|
179
|
-
|
180
|
-
|
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
|
181
178
|
|
182
|
-
|
183
|
-
|
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"]
|
184
182
|
|
185
|
-
Bundler.settings
|
183
|
+
Bundler.settings.set_command_option_if_given :shebang, options["shebang"]
|
186
184
|
|
187
|
-
Bundler.settings
|
185
|
+
Bundler.settings.set_command_option_if_given :jobs, options["jobs"]
|
188
186
|
|
189
|
-
Bundler.settings
|
187
|
+
Bundler.settings.set_command_option_if_given :no_prune, options["no-prune"]
|
190
188
|
|
191
|
-
Bundler.settings
|
189
|
+
Bundler.settings.set_command_option_if_given :no_install, options["no-install"]
|
192
190
|
|
193
|
-
Bundler.settings
|
191
|
+
Bundler.settings.set_command_option_if_given :clean, options["clean"]
|
194
192
|
|
195
|
-
Bundler.settings
|
196
|
-
|
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
|
197
200
|
|
198
|
-
|
201
|
+
options[:force] = options[:redownload]
|
199
202
|
end
|
200
203
|
|
201
204
|
def warn_ambiguous_gems
|