bundler 1.9.0 → 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 +1157 -6
- data/README.md +33 -6
- data/bundler.gemspec +51 -18
- data/exe/bundle +31 -0
- data/{bin → exe}/bundle_ruby +10 -6
- data/exe/bundler +4 -0
- data/lib/bundler.rb +326 -207
- data/lib/bundler/build_metadata.rb +53 -0
- data/lib/bundler/capistrano.rb +9 -3
- data/lib/bundler/cli.rb +522 -141
- data/lib/bundler/cli/add.rb +35 -0
- data/lib/bundler/cli/binstubs.rb +22 -11
- data/lib/bundler/cli/cache.rb +7 -6
- data/lib/bundler/cli/check.rb +11 -8
- data/lib/bundler/cli/clean.rb +7 -8
- data/lib/bundler/cli/common.rb +53 -7
- data/lib/bundler/cli/config.rb +84 -49
- data/lib/bundler/cli/console.rb +13 -8
- data/lib/bundler/cli/doctor.rb +140 -0
- data/lib/bundler/cli/exec.rb +77 -16
- data/lib/bundler/cli/gem.rb +120 -52
- data/lib/bundler/cli/info.rb +50 -0
- data/lib/bundler/cli/init.rb +21 -7
- data/lib/bundler/cli/inject.rb +37 -10
- data/lib/bundler/cli/install.rb +139 -78
- data/lib/bundler/cli/issue.rb +40 -0
- data/lib/bundler/cli/list.rb +58 -0
- data/lib/bundler/cli/lock.rb +63 -0
- data/lib/bundler/cli/open.rb +9 -6
- data/lib/bundler/cli/outdated.rb +221 -35
- data/lib/bundler/cli/package.rb +11 -7
- data/lib/bundler/cli/platform.rb +7 -4
- data/lib/bundler/cli/plugin.rb +24 -0
- data/lib/bundler/cli/pristine.rb +47 -0
- data/lib/bundler/cli/remove.rb +18 -0
- data/lib/bundler/cli/show.rb +11 -10
- data/lib/bundler/cli/update.rb +47 -29
- data/lib/bundler/cli/viz.rb +12 -8
- 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 +3 -1
- data/lib/bundler/current_ruby.rb +47 -137
- data/lib/bundler/definition.rb +599 -230
- data/lib/bundler/dep_proxy.rb +15 -10
- data/lib/bundler/dependency.rb +54 -25
- data/lib/bundler/deployment.rb +12 -2
- data/lib/bundler/deprecate.rb +33 -4
- data/lib/bundler/dsl.rb +383 -99
- data/lib/bundler/endpoint_specification.rb +72 -7
- data/lib/bundler/env.rb +121 -41
- data/lib/bundler/environment_preserver.rb +59 -0
- data/lib/bundler/errors.rb +158 -0
- data/lib/bundler/feature_flag.rb +74 -0
- data/lib/bundler/fetcher.rb +171 -280
- data/lib/bundler/fetcher/base.rb +52 -0
- data/lib/bundler/fetcher/compact_index.rb +126 -0
- data/lib/bundler/fetcher/dependency.rb +82 -0
- data/lib/bundler/fetcher/downloader.rb +84 -0
- data/lib/bundler/fetcher/index.rb +52 -0
- data/lib/bundler/friendly_errors.rb +113 -58
- data/lib/bundler/gem_helper.rb +73 -46
- data/lib/bundler/gem_helpers.rb +85 -9
- data/lib/bundler/gem_remote_fetcher.rb +43 -0
- data/lib/bundler/gem_tasks.rb +6 -1
- data/lib/bundler/gem_version_promoter.rb +190 -0
- data/lib/bundler/gemdeps.rb +29 -0
- data/lib/bundler/graph.rb +32 -49
- data/lib/bundler/index.rb +79 -67
- data/lib/bundler/injector.rb +219 -30
- data/lib/bundler/inline.rb +74 -0
- data/lib/bundler/installer.rb +191 -206
- data/lib/bundler/installer/gem_installer.rb +85 -0
- data/lib/bundler/installer/parallel_installer.rb +233 -0
- data/lib/bundler/installer/standalone.rb +53 -0
- data/lib/bundler/lazy_specification.rb +53 -13
- data/lib/bundler/lockfile_generator.rb +95 -0
- data/lib/bundler/lockfile_parser.rb +157 -62
- data/lib/bundler/match_platform.rb +15 -4
- data/lib/bundler/mirror.rb +223 -0
- data/lib/bundler/plugin.rb +292 -0
- data/lib/bundler/plugin/api.rb +81 -0
- data/lib/bundler/plugin/api/source.rb +306 -0
- data/lib/bundler/plugin/dsl.rb +53 -0
- data/lib/bundler/plugin/events.rb +61 -0
- data/lib/bundler/plugin/index.rb +162 -0
- data/lib/bundler/plugin/installer.rb +96 -0
- data/lib/bundler/plugin/installer/git.rb +38 -0
- data/lib/bundler/plugin/installer/rubygems.rb +27 -0
- data/lib/bundler/plugin/source_list.rb +27 -0
- data/lib/bundler/process_lock.rb +24 -0
- data/lib/bundler/psyched_yaml.rb +17 -6
- data/lib/bundler/remote_specification.rb +68 -11
- data/lib/bundler/resolver.rb +263 -229
- data/lib/bundler/resolver/spec_group.rb +106 -0
- data/lib/bundler/retry.rb +25 -19
- data/lib/bundler/ruby_dsl.rb +9 -2
- data/lib/bundler/ruby_version.rb +101 -66
- data/lib/bundler/rubygems_ext.rb +77 -37
- data/lib/bundler/rubygems_gem_installer.rb +106 -0
- data/lib/bundler/rubygems_integration.rb +450 -163
- data/lib/bundler/runtime.rb +133 -103
- data/lib/bundler/settings.rb +344 -83
- data/lib/bundler/settings/validator.rb +102 -0
- data/lib/bundler/setup.rb +7 -3
- data/lib/bundler/shared_helpers.rb +284 -54
- data/lib/bundler/similarity_detector.rb +21 -21
- data/lib/bundler/source.rb +68 -15
- data/lib/bundler/source/gemspec.rb +18 -0
- data/lib/bundler/source/git.rb +90 -55
- data/lib/bundler/source/git/git_proxy.rb +135 -35
- data/lib/bundler/source/metadata.rb +62 -0
- data/lib/bundler/source/path.rb +84 -61
- data/lib/bundler/source/path/installer.rb +53 -17
- data/lib/bundler/source/rubygems.rb +282 -122
- data/lib/bundler/source/rubygems/remote.rb +69 -0
- data/lib/bundler/source_list.rb +107 -22
- data/lib/bundler/spec_set.rb +83 -45
- data/lib/bundler/ssl_certs/certificate_manager.rb +8 -7
- data/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +21 -0
- data/lib/bundler/ssl_certs/{DigiCertHighAssuranceEVRootCA.pem → rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem} +0 -0
- data/lib/bundler/ssl_certs/{AddTrustExternalCARoot-2048.pem → rubygems.org/AddTrustExternalCARoot.pem} +0 -0
- data/lib/bundler/stub_specification.rb +108 -0
- data/lib/bundler/templates/.document +1 -0
- data/lib/bundler/templates/Executable +19 -6
- data/lib/bundler/templates/Executable.bundler +105 -0
- data/lib/bundler/templates/Executable.standalone +6 -4
- data/lib/bundler/templates/Gemfile +4 -1
- data/lib/bundler/templates/gems.rb +8 -0
- data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +68 -7
- 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 +19 -11
- data/lib/bundler/templates/newgem/Rakefile.tt +10 -6
- data/lib/bundler/templates/newgem/bin/console.tt +1 -1
- data/lib/bundler/templates/newgem/bin/setup.tt +2 -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 +31 -15
- data/lib/bundler/templates/newgem/rspec.tt +1 -0
- data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +3 -5
- data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +14 -2
- data/lib/bundler/templates/newgem/test/{test_newgem.rb.tt → newgem_test.rb.tt} +2 -2
- data/lib/bundler/templates/newgem/test/test_helper.rb.tt +4 -0
- data/lib/bundler/templates/newgem/travis.yml.tt +7 -0
- data/lib/bundler/ui.rb +5 -3
- data/lib/bundler/ui/rg_proxy.rb +5 -7
- data/lib/bundler/ui/shell.rb +69 -18
- data/lib/bundler/ui/silent.rb +26 -1
- data/lib/bundler/uri_credentials_filter.rb +37 -0
- data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1638 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo.rb +12 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +26 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +81 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +223 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +36 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +66 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +62 -0
- 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 +61 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +126 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +46 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +36 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +136 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +143 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +6 -0
- data/lib/bundler/vendor/{Molinillo-0.2.1 → molinillo}/lib/molinillo/modules/specification_provider.rb +11 -0
- data/lib/bundler/vendor/{Molinillo-0.2.1 → molinillo}/lib/molinillo/modules/ui.rb +6 -2
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +837 -0
- data/lib/bundler/vendor/{Molinillo-0.2.1 → molinillo}/lib/molinillo/resolver.rb +6 -3
- data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +58 -0
- 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-0.19.1 → thor}/lib/thor.rb +47 -22
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions.rb +31 -29
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/create_file.rb +3 -2
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/create_link.rb +3 -2
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/directory.rb +3 -3
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/empty_directory.rb +16 -8
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/file_manipulation.rb +66 -18
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/inject_into_file.rb +18 -16
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/base.rb +67 -44
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/command.rb +13 -11
- data/lib/bundler/vendor/{thor-0.19.1 → 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 +12 -0
- data/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +129 -0
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/error.rb +3 -3
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/group.rb +14 -14
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/invocation.rb +4 -5
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/line_editor.rb +2 -2
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/line_editor/basic.rb +2 -0
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/line_editor/readline.rb +0 -0
- data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -0
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/parser/argument.rb +4 -7
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/parser/arguments.rb +16 -16
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/parser/option.rb +42 -21
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/parser/options.rb +13 -10
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/rake_compat.rb +1 -1
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/runner.rb +35 -33
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/shell.rb +4 -4
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/shell/basic.rb +49 -33
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/shell/color.rb +2 -2
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/shell/html.rb +5 -5
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/util.rb +8 -7
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/version.rb +1 -1
- data/lib/bundler/vendored_fileutils.rb +9 -0
- data/lib/bundler/vendored_molinillo.rb +4 -5
- data/lib/bundler/vendored_persistent.rb +45 -4
- data/lib/bundler/vendored_thor.rb +8 -5
- data/lib/bundler/version.rb +23 -1
- data/lib/bundler/version_ranges.rb +76 -0
- data/lib/bundler/vlad.rb +8 -2
- data/lib/bundler/worker.rb +39 -6
- data/lib/bundler/yaml_serializer.rb +90 -0
- data/man/bundle-add.1 +58 -0
- data/man/bundle-add.1.txt +52 -0
- data/man/bundle-add.ronn +40 -0
- data/man/bundle-binstubs.1 +40 -0
- data/man/bundle-binstubs.1.txt +48 -0
- data/man/bundle-binstubs.ronn +43 -0
- 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 +256 -31
- 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 +165 -0
- data/man/bundle-exec.1.txt +178 -0
- data/man/bundle-exec.ronn +19 -3
- data/man/bundle-gem.1 +80 -0
- data/man/bundle-gem.1.txt +91 -0
- data/man/bundle-gem.ronn +78 -0
- 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/man/bundle-install.1 +308 -0
- data/man/bundle-install.1.txt +396 -0
- data/man/bundle-install.ronn +64 -67
- 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 +84 -0
- data/man/bundle-lock.1.txt +93 -0
- data/man/bundle-lock.ronn +94 -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/man/bundle-package.1 +55 -0
- data/man/bundle-package.1.txt +79 -0
- data/man/bundle-package.ronn +14 -8
- data/man/bundle-platform.1 +61 -0
- data/man/bundle-platform.1.txt +57 -0
- data/man/bundle-platform.ronn +1 -1
- 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 +180 -18
- data/man/bundle-viz.1 +39 -0
- data/man/bundle-viz.1.txt +39 -0
- data/man/bundle-viz.ronn +30 -0
- data/man/bundle.1 +136 -0
- data/man/bundle.1.txt +116 -0
- data/man/bundle.ronn +46 -33
- data/man/gemfile.5 +689 -0
- data/man/gemfile.5.ronn +127 -79
- data/man/gemfile.5.txt +653 -0
- data/man/index.txt +25 -7
- metadata +242 -95
- data/.gitignore +0 -16
- data/.rspec +0 -3
- data/.travis.yml +0 -110
- data/CODE_OF_CONDUCT.md +0 -40
- data/CONTRIBUTING.md +0 -32
- data/DEVELOPMENT.md +0 -119
- data/ISSUES.md +0 -96
- data/Rakefile +0 -302
- data/UPGRADING.md +0 -103
- data/bin/bundle +0 -21
- data/bin/bundler +0 -21
- data/lib/bundler/anonymizable_uri.rb +0 -32
- data/lib/bundler/environment.rb +0 -42
- data/lib/bundler/gem_installer.rb +0 -9
- data/lib/bundler/gem_path_manipulation.rb +0 -8
- data/lib/bundler/ssl_certs/AddTrustExternalCARoot.pem +0 -32
- data/lib/bundler/ssl_certs/Class3PublicPrimaryCertificationAuthority.pem +0 -14
- data/lib/bundler/ssl_certs/EntrustnetSecureServerCertificationAuthority.pem +0 -28
- data/lib/bundler/ssl_certs/GeoTrustGlobalCA.pem +0 -20
- data/lib/bundler/templates/newgem/.travis.yml.tt +0 -3
- data/lib/bundler/templates/newgem/test/minitest_helper.rb.tt +0 -4
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo.rb +0 -5
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/dependency_graph.rb +0 -266
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/errors.rb +0 -69
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/gem_metadata.rb +0 -3
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/resolution.rb +0 -412
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/state.rb +0 -43
- data/lib/bundler/vendor/thor-0.19.1/lib/thor/core_ext/io_binary_read.rb +0 -10
- data/lib/bundler/vendor/thor-0.19.1/lib/thor/core_ext/ordered_hash.rb +0 -98
- data/lib/bundler/vendor/thor-0.19.1/lib/thor/parser.rb +0 -4
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
class CLI::Info
|
5
|
+
attr_reader :gem_name, :options
|
6
|
+
def initialize(options, gem_name)
|
7
|
+
@options = options
|
8
|
+
@gem_name = gem_name
|
9
|
+
end
|
10
|
+
|
11
|
+
def run
|
12
|
+
spec = spec_for_gem(gem_name)
|
13
|
+
|
14
|
+
spec_not_found(gem_name) unless spec
|
15
|
+
return print_gem_path(spec) if @options[:path]
|
16
|
+
print_gem_info(spec)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def spec_for_gem(gem_name)
|
22
|
+
spec = Bundler.definition.specs.find {|s| s.name == gem_name }
|
23
|
+
spec || default_gem_spec(gem_name)
|
24
|
+
end
|
25
|
+
|
26
|
+
def default_gem_spec(gem_name)
|
27
|
+
return unless Gem::Specification.respond_to?(:find_all_by_name)
|
28
|
+
gem_spec = Gem::Specification.find_all_by_name(gem_name).last
|
29
|
+
return gem_spec if gem_spec && gem_spec.respond_to?(:default_gem?) && gem_spec.default_gem?
|
30
|
+
end
|
31
|
+
|
32
|
+
def spec_not_found(gem_name)
|
33
|
+
raise GemNotFound, Bundler::CLI::Common.gem_not_found_message(gem_name, Bundler.definition.dependencies)
|
34
|
+
end
|
35
|
+
|
36
|
+
def print_gem_path(spec)
|
37
|
+
Bundler.ui.info spec.full_gem_path
|
38
|
+
end
|
39
|
+
|
40
|
+
def print_gem_info(spec)
|
41
|
+
gem_info = String.new
|
42
|
+
gem_info << " * #{spec.name} (#{spec.version}#{spec.git_version})\n"
|
43
|
+
gem_info << "\tSummary: #{spec.summary}\n" if spec.summary
|
44
|
+
gem_info << "\tHomepage: #{spec.homepage}\n" if spec.homepage
|
45
|
+
gem_info << "\tPath: #{spec.full_gem_path}\n"
|
46
|
+
gem_info << "\tDefault Gem: yes" if spec.respond_to?(:default_gem?) && spec.default_gem?
|
47
|
+
Bundler.ui.info gem_info
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/bundler/cli/init.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Bundler
|
2
4
|
class CLI::Init
|
3
5
|
attr_reader :options
|
@@ -6,8 +8,13 @@ module Bundler
|
|
6
8
|
end
|
7
9
|
|
8
10
|
def run
|
9
|
-
if File.exist?(
|
10
|
-
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."
|
11
18
|
exit 1
|
12
19
|
end
|
13
20
|
|
@@ -17,17 +24,24 @@ module Bundler
|
|
17
24
|
Bundler.ui.error "Gem specification #{gemspec} doesn't exist"
|
18
25
|
exit 1
|
19
26
|
end
|
20
|
-
|
21
|
-
|
22
|
-
|
27
|
+
|
28
|
+
spec = Bundler.load_gemspec_uncached(gemspec)
|
29
|
+
|
30
|
+
File.open(gemfile, "wb") do |file|
|
23
31
|
file << "# Generated from #{gemspec}\n"
|
24
32
|
file << spec.to_gemfile
|
25
33
|
end
|
26
34
|
else
|
27
|
-
|
28
|
-
FileUtils.cp(File.expand_path('../../templates/Gemfile', __FILE__), 'Gemfile')
|
35
|
+
FileUtils.cp(File.expand_path("../../templates/#{gemfile}", __FILE__), gemfile)
|
29
36
|
end
|
37
|
+
|
38
|
+
puts "Writing new #{gemfile} to #{SharedHelpers.pwd}/#{gemfile}"
|
30
39
|
end
|
31
40
|
|
41
|
+
private
|
42
|
+
|
43
|
+
def gemfile
|
44
|
+
@gemfile ||= Bundler.feature_flag.init_gems_rb? ? "gems.rb" : "Gemfile"
|
45
|
+
end
|
32
46
|
end
|
33
47
|
end
|
data/lib/bundler/cli/inject.rb
CHANGED
@@ -1,33 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Bundler
|
2
4
|
class CLI::Inject
|
3
|
-
attr_reader :options, :name, :version, :gems
|
4
|
-
def initialize(options, name, version
|
5
|
+
attr_reader :options, :name, :version, :group, :source, :gems
|
6
|
+
def initialize(options, name, version)
|
5
7
|
@options = options
|
6
8
|
@name = name
|
7
|
-
@version = version
|
8
|
-
@
|
9
|
+
@version = version || last_version_number
|
10
|
+
@group = options[:group].split(",") unless options[:group].nil?
|
11
|
+
@source = options[:source]
|
12
|
+
@gems = []
|
9
13
|
end
|
10
14
|
|
11
15
|
def run
|
12
16
|
# The required arguments allow Thor to give useful feedback when the arguments
|
13
17
|
# are incorrect. This adds those first two arguments onto the list as a whole.
|
14
|
-
gems.unshift(version).unshift(name)
|
18
|
+
gems.unshift(source).unshift(group).unshift(version).unshift(name)
|
15
19
|
|
16
20
|
# Build an array of Dependency objects out of the arguments
|
17
21
|
deps = []
|
18
|
-
|
19
|
-
|
22
|
+
# when `inject` support addition of more than one gem, then this loop will
|
23
|
+
# help. Currently this loop is running once.
|
24
|
+
gems.each_slice(4) do |gem_name, gem_version, gem_group, gem_source|
|
25
|
+
ops = Gem::Requirement::OPS.map {|key, _val| key }
|
26
|
+
has_op = ops.any? {|op| gem_version.start_with? op }
|
27
|
+
gem_version = "~> #{gem_version}" unless has_op
|
28
|
+
deps << Bundler::Dependency.new(gem_name, gem_version, "group" => gem_group, "source" => gem_source)
|
20
29
|
end
|
21
30
|
|
22
|
-
added = Injector.inject(deps)
|
31
|
+
added = Injector.inject(deps, options)
|
23
32
|
|
24
33
|
if added.any?
|
25
34
|
Bundler.ui.confirm "Added to Gemfile:"
|
26
|
-
Bundler.ui.confirm
|
35
|
+
Bundler.ui.confirm(added.map do |d|
|
36
|
+
name = "'#{d.name}'"
|
37
|
+
requirement = ", '#{d.requirement}'"
|
38
|
+
group = ", :group => #{d.groups.inspect}" if d.groups != Array(:default)
|
39
|
+
source = ", :source => '#{d.source}'" unless d.source.nil?
|
40
|
+
%(gem #{name}#{requirement}#{group}#{source})
|
41
|
+
end.join("\n"))
|
27
42
|
else
|
28
|
-
Bundler.ui.confirm "All
|
43
|
+
Bundler.ui.confirm "All gems were already present in the Gemfile"
|
29
44
|
end
|
30
45
|
end
|
31
46
|
|
47
|
+
private
|
48
|
+
|
49
|
+
def last_version_number
|
50
|
+
definition = Bundler.definition(true)
|
51
|
+
definition.resolve_remotely!
|
52
|
+
specs = definition.index[name].sort_by(&:version)
|
53
|
+
unless options[:pre]
|
54
|
+
specs.delete_if {|b| b.respond_to?(:version) && b.version.prerelease? }
|
55
|
+
end
|
56
|
+
spec = specs.last
|
57
|
+
spec.version.to_s
|
58
|
+
end
|
32
59
|
end
|
33
60
|
end
|
data/lib/bundler/cli/install.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Bundler
|
2
4
|
class CLI::Install
|
3
5
|
attr_reader :options
|
@@ -10,104 +12,74 @@ module Bundler
|
|
10
12
|
|
11
13
|
warn_if_root
|
12
14
|
|
13
|
-
|
14
|
-
options[:without] = options[:without].map{|g| g.tr(' ', ':') }
|
15
|
-
end
|
15
|
+
normalize_groups
|
16
16
|
|
17
|
-
|
17
|
+
Bundler::SharedHelpers.set_env "RB_USER_INSTALL", "1" if Bundler::FREEBSD
|
18
18
|
|
19
|
-
#
|
19
|
+
# Disable color in deployment mode
|
20
20
|
Bundler.ui.shell = Thor::Shell::Basic.new if options[:deployment]
|
21
21
|
|
22
|
-
|
23
|
-
Bundler.ui.error "You have specified both a path to install your gems to, \n" \
|
24
|
-
"as well as --system. Please choose."
|
25
|
-
exit 1
|
26
|
-
end
|
22
|
+
check_for_options_conflicts
|
27
23
|
|
28
|
-
|
29
|
-
unless (Bundler.rubygems.security_policies.keys.include?(options["trust-policy"]))
|
30
|
-
Bundler.ui.error "Rubygems doesn't know about trust policy '#{options["trust-policy"]}'. " \
|
31
|
-
"The known policies are: #{Bundler.rubygems.security_policies.keys.join(', ')}."
|
32
|
-
exit 1
|
33
|
-
end
|
34
|
-
Bundler.settings["trust-policy"] = options["trust-policy"]
|
35
|
-
else
|
36
|
-
Bundler.settings["trust-policy"] = nil if Bundler.settings["trust-policy"]
|
37
|
-
end
|
24
|
+
check_trust_policy
|
38
25
|
|
39
|
-
if options[:deployment] || options[:frozen]
|
26
|
+
if options[:deployment] || options[:frozen] || Bundler.frozen_bundle?
|
40
27
|
unless Bundler.default_lockfile.exist?
|
41
|
-
flag
|
42
|
-
|
43
|
-
|
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 " \
|
32
|
+
"sure you have checked your #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} into version control " \
|
44
33
|
"before deploying."
|
45
34
|
end
|
46
35
|
|
47
|
-
if Bundler.app_cache.exist?
|
48
|
-
options[:local] = true
|
49
|
-
end
|
36
|
+
options[:local] = true if Bundler.app_cache.exist?
|
50
37
|
|
51
|
-
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
|
52
43
|
end
|
53
44
|
|
54
45
|
# When install is called with --no-deployment, disable deployment mode
|
55
46
|
if options[:deployment] == false
|
56
|
-
Bundler.settings.
|
47
|
+
Bundler.settings.set_command_option :frozen, nil
|
57
48
|
options[:system] = true
|
58
49
|
end
|
59
50
|
|
60
|
-
|
61
|
-
|
62
|
-
Bundler.settings[:path] = options["path"] if options["path"]
|
63
|
-
Bundler.settings[:path] ||= "bundle" if options["standalone"]
|
64
|
-
Bundler.settings[:bin] = options["binstubs"] if options["binstubs"]
|
65
|
-
Bundler.settings[:bin] = nil if options["binstubs"] && options["binstubs"].empty?
|
66
|
-
Bundler.settings[:shebang] = options["shebang"] if options["shebang"]
|
67
|
-
Bundler.settings[:jobs] = options["jobs"] if options["jobs"]
|
68
|
-
Bundler.settings[:no_prune] = true if options["no-prune"]
|
69
|
-
Bundler.settings[:no_install] = true if options["no-install"]
|
70
|
-
Bundler.settings[:clean] = options["clean"] if options["clean"]
|
71
|
-
Bundler.settings.without = options[:without]
|
51
|
+
normalize_settings
|
52
|
+
|
72
53
|
Bundler::Fetcher.disable_endpoint = options["full-index"]
|
73
|
-
Bundler.settings[:disable_shared_gems] = Bundler.settings[:path] ? '1' : nil
|
74
54
|
|
75
|
-
|
76
|
-
|
55
|
+
if options["binstubs"]
|
56
|
+
Bundler::SharedHelpers.major_deprecation 2,
|
57
|
+
"The --binstubs option will be removed in favor of `bundle binstubs`"
|
58
|
+
end
|
59
|
+
|
60
|
+
Plugin.gemfile_install(Bundler.default_gemfile) if Bundler.feature_flag.plugins?
|
77
61
|
|
78
62
|
definition = Bundler.definition
|
79
|
-
definition.
|
80
|
-
|
81
|
-
|
63
|
+
definition.validate_runtime!
|
64
|
+
|
65
|
+
installer = Installer.install(Bundler.root, definition, options)
|
66
|
+
Bundler.load.cache if Bundler.app_cache.exist? && !options["no-cache"] && !Bundler.frozen_bundle?
|
82
67
|
|
83
68
|
Bundler.ui.confirm "Bundle complete! #{dependencies_count_for(definition)}, #{gems_installed_for(definition)}."
|
84
|
-
|
69
|
+
Bundler::CLI::Common.output_without_groups_message
|
85
70
|
|
86
|
-
if Bundler.
|
87
|
-
|
88
|
-
relative_path = absolute_path.sub(File.expand_path('.'), '.')
|
89
|
-
Bundler.ui.confirm "Bundled gems are installed into #{relative_path}."
|
71
|
+
if Bundler.use_system_gems?
|
72
|
+
Bundler.ui.confirm "Use `bundle info [gemname]` to see where a bundled gem is installed."
|
90
73
|
else
|
91
|
-
Bundler.
|
74
|
+
relative_path = Bundler.configured_bundle_path.base_path_relative_to_pwd
|
75
|
+
Bundler.ui.confirm "Bundled gems are installed into `#{relative_path}`"
|
92
76
|
end
|
93
77
|
|
94
|
-
|
95
|
-
Bundler.ui.confirm "Post-install message from #{name}:"
|
96
|
-
Bundler.ui.info msg
|
97
|
-
end
|
78
|
+
Bundler::CLI::Common.output_post_install_messages installer.post_install_messages
|
98
79
|
|
99
|
-
|
100
|
-
Bundler.ui.error "Warning: the gem '#{name}' was found in multiple sources."
|
101
|
-
Bundler.ui.error "Installed from: #{installed_from_uri}"
|
102
|
-
Bundler.ui.error "Also found in:"
|
103
|
-
also_found_in_uris.each { |uri| Bundler.ui.error " * #{uri}" }
|
104
|
-
Bundler.ui.error "You should add a source requirement to restrict this gem to your preferred source."
|
105
|
-
Bundler.ui.error "For example:"
|
106
|
-
Bundler.ui.error " gem '#{name}', :source => '#{installed_from_uri}'"
|
107
|
-
Bundler.ui.error "Then uninstall the gem '#{name}' (or delete all bundled gems) and then install again."
|
108
|
-
end
|
80
|
+
warn_ambiguous_gems
|
109
81
|
|
110
|
-
if
|
82
|
+
if CLI::Common.clean_after_install?
|
111
83
|
require "bundler/cli/clean"
|
112
84
|
Bundler::CLI::Clean.new(options).run
|
113
85
|
end
|
@@ -124,33 +96,122 @@ module Bundler
|
|
124
96
|
WARN
|
125
97
|
end
|
126
98
|
raise e
|
99
|
+
rescue Gem::InvalidSpecificationException => e
|
100
|
+
Bundler.ui.warn "You have one or more invalid gemspecs that need to be fixed."
|
101
|
+
raise e
|
127
102
|
end
|
128
103
|
|
129
104
|
private
|
130
105
|
|
131
106
|
def warn_if_root
|
132
|
-
return if Bundler::WINDOWS || !Process.uid.zero?
|
107
|
+
return if Bundler.settings[:silence_root_warning] || Bundler::WINDOWS || !Process.uid.zero?
|
133
108
|
Bundler.ui.warn "Don't run Bundler as root. Bundler can ask for sudo " \
|
134
109
|
"if it is needed, and installing your bundle as root will break this " \
|
135
110
|
"application for all non-root users on this machine.", :wrap => true
|
136
111
|
end
|
137
112
|
|
138
|
-
def confirm_without_groups
|
139
|
-
if Bundler.settings.without.any?
|
140
|
-
require "bundler/cli/common"
|
141
|
-
Bundler.ui.confirm Bundler::CLI::Common.without_groups_message
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
113
|
def dependencies_count_for(definition)
|
146
114
|
count = definition.dependencies.count
|
147
|
-
"#{count} Gemfile #{count == 1 ?
|
115
|
+
"#{count} Gemfile #{count == 1 ? "dependency" : "dependencies"}"
|
148
116
|
end
|
149
117
|
|
150
118
|
def gems_installed_for(definition)
|
151
119
|
count = definition.specs.count
|
152
|
-
"#{count} #{count == 1 ?
|
120
|
+
"#{count} #{count == 1 ? "gem" : "gems"} now installed"
|
121
|
+
end
|
122
|
+
|
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(", ")}."
|
128
|
+
end
|
129
|
+
|
130
|
+
def check_for_options_conflicts
|
131
|
+
if (options[:path] || options[:deployment]) && options[:system]
|
132
|
+
error_message = String.new
|
133
|
+
error_message << "You have specified both --path as well as --system. Please choose only one option.\n" if options[:path]
|
134
|
+
error_message << "You have specified both --deployment as well as --system. Please choose only one option.\n" if options[:deployment]
|
135
|
+
raise InvalidOption.new(error_message)
|
136
|
+
end
|
153
137
|
end
|
154
138
|
|
139
|
+
def check_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(", ")}."
|
144
|
+
end
|
145
|
+
Bundler.settings.set_command_option_if_given :"trust-policy", trust_policy
|
146
|
+
end
|
147
|
+
|
148
|
+
def normalize_groups
|
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
|
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)
|
159
|
+
with -= options[:without] if options[:without]
|
160
|
+
|
161
|
+
without = options.fetch(:without, [])
|
162
|
+
without |= Bundler.settings[:without].map(&:to_s)
|
163
|
+
without -= options[:with] if options[:with]
|
164
|
+
|
165
|
+
options[:with] = with
|
166
|
+
options[:without] = without
|
167
|
+
end
|
168
|
+
|
169
|
+
def normalize_settings
|
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
|
178
|
+
|
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"]
|
182
|
+
|
183
|
+
Bundler.settings.set_command_option_if_given :shebang, options["shebang"]
|
184
|
+
|
185
|
+
Bundler.settings.set_command_option_if_given :jobs, options["jobs"]
|
186
|
+
|
187
|
+
Bundler.settings.set_command_option_if_given :no_prune, options["no-prune"]
|
188
|
+
|
189
|
+
Bundler.settings.set_command_option_if_given :no_install, options["no-install"]
|
190
|
+
|
191
|
+
Bundler.settings.set_command_option_if_given :clean, options["clean"]
|
192
|
+
|
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
|
200
|
+
|
201
|
+
options[:force] = options[:redownload]
|
202
|
+
end
|
203
|
+
|
204
|
+
def warn_ambiguous_gems
|
205
|
+
Installer.ambiguous_gems.to_a.each do |name, installed_from_uri, *also_found_in_uris|
|
206
|
+
Bundler.ui.error "Warning: the gem '#{name}' was found in multiple sources."
|
207
|
+
Bundler.ui.error "Installed from: #{installed_from_uri}"
|
208
|
+
Bundler.ui.error "Also found in:"
|
209
|
+
also_found_in_uris.each {|uri| Bundler.ui.error " * #{uri}" }
|
210
|
+
Bundler.ui.error "You should add a source requirement to restrict this gem to your preferred source."
|
211
|
+
Bundler.ui.error "For example:"
|
212
|
+
Bundler.ui.error " gem '#{name}', :source => '#{installed_from_uri}'"
|
213
|
+
Bundler.ui.error "Then uninstall the gem '#{name}' (or delete all bundled gems) and then install again."
|
214
|
+
end
|
215
|
+
end
|
155
216
|
end
|
156
217
|
end
|