bundler 2.0.2
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 +7 -0
- data/CHANGELOG.md +3111 -0
- data/LICENSE.md +23 -0
- data/README.md +63 -0
- data/bundler.gemspec +65 -0
- data/exe/bundle +31 -0
- data/exe/bundle_ruby +60 -0
- data/exe/bundler +4 -0
- data/lib/bundler.rb +567 -0
- data/lib/bundler/build_metadata.rb +53 -0
- data/lib/bundler/capistrano.rb +22 -0
- data/lib/bundler/cli.rb +792 -0
- data/lib/bundler/cli/add.rb +35 -0
- data/lib/bundler/cli/binstubs.rb +49 -0
- data/lib/bundler/cli/cache.rb +36 -0
- data/lib/bundler/cli/check.rb +38 -0
- data/lib/bundler/cli/clean.rb +25 -0
- data/lib/bundler/cli/common.rb +102 -0
- data/lib/bundler/cli/config.rb +119 -0
- data/lib/bundler/cli/console.rb +43 -0
- data/lib/bundler/cli/doctor.rb +140 -0
- data/lib/bundler/cli/exec.rb +105 -0
- data/lib/bundler/cli/gem.rb +252 -0
- data/lib/bundler/cli/info.rb +50 -0
- data/lib/bundler/cli/init.rb +47 -0
- data/lib/bundler/cli/inject.rb +60 -0
- data/lib/bundler/cli/install.rb +218 -0
- 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 +26 -0
- data/lib/bundler/cli/outdated.rb +266 -0
- data/lib/bundler/cli/package.rb +49 -0
- data/lib/bundler/cli/platform.rb +46 -0
- 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 +75 -0
- data/lib/bundler/cli/update.rb +91 -0
- data/lib/bundler/cli/viz.rb +31 -0
- 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 +13 -0
- data/lib/bundler/constants.rb +7 -0
- data/lib/bundler/current_ruby.rb +94 -0
- data/lib/bundler/definition.rb +995 -0
- data/lib/bundler/dep_proxy.rb +48 -0
- data/lib/bundler/dependency.rb +139 -0
- data/lib/bundler/deployment.rb +69 -0
- data/lib/bundler/deprecate.rb +44 -0
- data/lib/bundler/dsl.rb +615 -0
- data/lib/bundler/endpoint_specification.rb +141 -0
- data/lib/bundler/env.rb +149 -0
- data/lib/bundler/environment_preserver.rb +59 -0
- data/lib/bundler/errors.rb +158 -0
- data/lib/bundler/feature_flag.rb +75 -0
- data/lib/bundler/fetcher.rb +312 -0
- 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 +131 -0
- data/lib/bundler/gem_helper.rb +217 -0
- data/lib/bundler/gem_helpers.rb +101 -0
- data/lib/bundler/gem_remote_fetcher.rb +43 -0
- data/lib/bundler/gem_tasks.rb +7 -0
- data/lib/bundler/gem_version_promoter.rb +190 -0
- data/lib/bundler/gemdeps.rb +29 -0
- data/lib/bundler/graph.rb +152 -0
- data/lib/bundler/index.rb +213 -0
- data/lib/bundler/injector.rb +253 -0
- data/lib/bundler/inline.rb +74 -0
- data/lib/bundler/installer.rb +318 -0
- data/lib/bundler/installer/gem_installer.rb +85 -0
- data/lib/bundler/installer/parallel_installer.rb +229 -0
- data/lib/bundler/installer/standalone.rb +53 -0
- data/lib/bundler/lazy_specification.rb +123 -0
- data/lib/bundler/lockfile_generator.rb +95 -0
- data/lib/bundler/lockfile_parser.rb +256 -0
- data/lib/bundler/match_platform.rb +24 -0
- data/lib/bundler/mirror.rb +223 -0
- data/lib/bundler/plugin.rb +294 -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 +165 -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 +37 -0
- data/lib/bundler/remote_specification.rb +114 -0
- data/lib/bundler/resolver.rb +373 -0
- data/lib/bundler/resolver/spec_group.rb +106 -0
- data/lib/bundler/retry.rb +66 -0
- data/lib/bundler/ruby_dsl.rb +18 -0
- data/lib/bundler/ruby_version.rb +152 -0
- data/lib/bundler/rubygems_ext.rb +209 -0
- data/lib/bundler/rubygems_gem_installer.rb +99 -0
- data/lib/bundler/rubygems_integration.rb +915 -0
- data/lib/bundler/runtime.rb +322 -0
- data/lib/bundler/settings.rb +464 -0
- data/lib/bundler/settings/validator.rb +102 -0
- data/lib/bundler/setup.rb +28 -0
- data/lib/bundler/shared_helpers.rb +386 -0
- data/lib/bundler/similarity_detector.rb +63 -0
- data/lib/bundler/source.rb +94 -0
- data/lib/bundler/source/gemspec.rb +18 -0
- data/lib/bundler/source/git.rb +329 -0
- data/lib/bundler/source/git/git_proxy.rb +262 -0
- data/lib/bundler/source/metadata.rb +62 -0
- data/lib/bundler/source/path.rb +249 -0
- data/lib/bundler/source/path/installer.rb +74 -0
- data/lib/bundler/source/rubygems.rb +539 -0
- data/lib/bundler/source/rubygems/remote.rb +69 -0
- data/lib/bundler/source_list.rb +186 -0
- data/lib/bundler/spec_set.rb +208 -0
- data/lib/bundler/ssl_certs/.document +1 -0
- data/lib/bundler/ssl_certs/certificate_manager.rb +66 -0
- data/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +21 -0
- data/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +23 -0
- data/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +25 -0
- data/lib/bundler/stub_specification.rb +108 -0
- data/lib/bundler/templates/.document +1 -0
- data/lib/bundler/templates/Executable +29 -0
- data/lib/bundler/templates/Executable.bundler +105 -0
- data/lib/bundler/templates/Executable.standalone +14 -0
- data/lib/bundler/templates/Gemfile +7 -0
- data/lib/bundler/templates/gems.rb +8 -0
- data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +74 -0
- data/lib/bundler/templates/newgem/Gemfile.tt +4 -0
- data/lib/bundler/templates/newgem/LICENSE.txt.tt +21 -0
- data/lib/bundler/templates/newgem/README.md.tt +47 -0
- data/lib/bundler/templates/newgem/Rakefile.tt +29 -0
- data/lib/bundler/templates/newgem/bin/console.tt +14 -0
- data/lib/bundler/templates/newgem/bin/setup.tt +8 -0
- data/lib/bundler/templates/newgem/exe/newgem.tt +3 -0
- data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +3 -0
- data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +9 -0
- data/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +6 -0
- data/lib/bundler/templates/newgem/gitignore.tt +20 -0
- data/lib/bundler/templates/newgem/lib/newgem.rb.tt +13 -0
- data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +7 -0
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +50 -0
- data/lib/bundler/templates/newgem/rspec.tt +3 -0
- data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +9 -0
- data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +14 -0
- data/lib/bundler/templates/newgem/test/newgem_test.rb.tt +11 -0
- data/lib/bundler/templates/newgem/test/test_helper.rb.tt +8 -0
- data/lib/bundler/templates/newgem/travis.yml.tt +7 -0
- data/lib/bundler/ui.rb +9 -0
- data/lib/bundler/ui/rg_proxy.rb +19 -0
- data/lib/bundler/ui/shell.rb +146 -0
- data/lib/bundler/ui/silent.rb +69 -0
- data/lib/bundler/uri_credentials_filter.rb +37 -0
- data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1741 -0
- data/lib/bundler/vendor/fileutils/lib/fileutils/version.rb +5 -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/lib/molinillo/modules/specification_provider.rb +101 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +67 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +837 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +46 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +58 -0
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +27 -0
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1233 -0
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +129 -0
- data/lib/bundler/vendor/thor/lib/thor.rb +509 -0
- data/lib/bundler/vendor/thor/lib/thor/actions.rb +331 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +104 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +60 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +118 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +143 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +373 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +109 -0
- data/lib/bundler/vendor/thor/lib/thor/base.rb +678 -0
- data/lib/bundler/vendor/thor/lib/thor/command.rb +135 -0
- data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +97 -0
- 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/lib/thor/error.rb +114 -0
- data/lib/bundler/vendor/thor/lib/thor/group.rb +281 -0
- data/lib/bundler/vendor/thor/lib/thor/invocation.rb +177 -0
- data/lib/bundler/vendor/thor/lib/thor/line_editor.rb +17 -0
- data/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +37 -0
- data/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +88 -0
- data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -0
- data/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +70 -0
- data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +175 -0
- data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +146 -0
- data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +226 -0
- data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +71 -0
- data/lib/bundler/vendor/thor/lib/thor/runner.rb +324 -0
- data/lib/bundler/vendor/thor/lib/thor/shell.rb +81 -0
- data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +482 -0
- data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +149 -0
- data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +126 -0
- data/lib/bundler/vendor/thor/lib/thor/util.rb +268 -0
- data/lib/bundler/vendor/thor/lib/thor/version.rb +3 -0
- data/lib/bundler/vendored_fileutils.rb +9 -0
- data/lib/bundler/vendored_molinillo.rb +4 -0
- data/lib/bundler/vendored_persistent.rb +52 -0
- data/lib/bundler/vendored_thor.rb +8 -0
- data/lib/bundler/version.rb +28 -0
- data/lib/bundler/version_ranges.rb +76 -0
- data/lib/bundler/vlad.rb +17 -0
- data/lib/bundler/worker.rb +106 -0
- 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 +397 -0
- 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 +152 -0
- 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 +378 -0
- 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 +72 -0
- data/man/bundle-platform.1 +61 -0
- data/man/bundle-platform.1.txt +57 -0
- data/man/bundle-platform.ronn +42 -0
- data/man/bundle-pristine.1 +34 -0
- data/man/bundle-pristine.1.txt +44 -0
- data/man/bundle-pristine.ronn +34 -0
- data/man/bundle-remove.1 +31 -0
- data/man/bundle-remove.1.txt +34 -0
- data/man/bundle-remove.ronn +23 -0
- data/man/bundle-show.1 +23 -0
- data/man/bundle-show.1.txt +27 -0
- data/man/bundle-show.ronn +21 -0
- data/man/bundle-update.1 +394 -0
- data/man/bundle-update.1.txt +391 -0
- data/man/bundle-update.ronn +350 -0
- 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 +111 -0
- data/man/gemfile.5 +689 -0
- data/man/gemfile.5.ronn +521 -0
- data/man/gemfile.5.txt +653 -0
- data/man/index.txt +25 -0
- metadata +463 -0
@@ -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
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
class CLI::Init
|
5
|
+
attr_reader :options
|
6
|
+
def initialize(options)
|
7
|
+
@options = options
|
8
|
+
end
|
9
|
+
|
10
|
+
def run
|
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."
|
18
|
+
exit 1
|
19
|
+
end
|
20
|
+
|
21
|
+
if options[:gemspec]
|
22
|
+
gemspec = File.expand_path(options[:gemspec])
|
23
|
+
unless File.exist?(gemspec)
|
24
|
+
Bundler.ui.error "Gem specification #{gemspec} doesn't exist"
|
25
|
+
exit 1
|
26
|
+
end
|
27
|
+
|
28
|
+
spec = Bundler.load_gemspec_uncached(gemspec)
|
29
|
+
|
30
|
+
File.open(gemfile, "wb") do |file|
|
31
|
+
file << "# Generated from #{gemspec}\n"
|
32
|
+
file << spec.to_gemfile
|
33
|
+
end
|
34
|
+
else
|
35
|
+
FileUtils.cp(File.expand_path("../../templates/#{gemfile}", __FILE__), gemfile)
|
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"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
class CLI::Inject
|
5
|
+
attr_reader :options, :name, :version, :group, :source, :gems
|
6
|
+
def initialize(options, name, version)
|
7
|
+
@options = options
|
8
|
+
@name = name
|
9
|
+
@version = version || last_version_number
|
10
|
+
@group = options[:group].split(",") unless options[:group].nil?
|
11
|
+
@source = options[:source]
|
12
|
+
@gems = []
|
13
|
+
end
|
14
|
+
|
15
|
+
def run
|
16
|
+
# The required arguments allow Thor to give useful feedback when the arguments
|
17
|
+
# are incorrect. This adds those first two arguments onto the list as a whole.
|
18
|
+
gems.unshift(source).unshift(group).unshift(version).unshift(name)
|
19
|
+
|
20
|
+
# Build an array of Dependency objects out of the arguments
|
21
|
+
deps = []
|
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)
|
29
|
+
end
|
30
|
+
|
31
|
+
added = Injector.inject(deps, options)
|
32
|
+
|
33
|
+
if added.any?
|
34
|
+
Bundler.ui.confirm "Added to Gemfile:"
|
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"))
|
42
|
+
else
|
43
|
+
Bundler.ui.confirm "All gems were already present in the Gemfile"
|
44
|
+
end
|
45
|
+
end
|
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
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,218 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
class CLI::Install
|
5
|
+
attr_reader :options
|
6
|
+
def initialize(options)
|
7
|
+
@options = options
|
8
|
+
end
|
9
|
+
|
10
|
+
def run
|
11
|
+
Bundler.ui.level = "error" if options[:quiet]
|
12
|
+
|
13
|
+
warn_if_root
|
14
|
+
|
15
|
+
normalize_groups
|
16
|
+
|
17
|
+
Bundler::SharedHelpers.set_env "RB_USER_INSTALL", "1" if Bundler::FREEBSD
|
18
|
+
|
19
|
+
# Disable color in deployment mode
|
20
|
+
Bundler.ui.shell = Thor::Shell::Basic.new if options[:deployment]
|
21
|
+
|
22
|
+
check_for_options_conflicts
|
23
|
+
|
24
|
+
check_trust_policy
|
25
|
+
|
26
|
+
if options[:deployment] || options[:frozen] || Bundler.frozen_bundle?
|
27
|
+
unless Bundler.default_lockfile.exist?
|
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 " \
|
33
|
+
"before deploying."
|
34
|
+
end
|
35
|
+
|
36
|
+
options[:local] = true if Bundler.app_cache.exist?
|
37
|
+
|
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
|
43
|
+
end
|
44
|
+
|
45
|
+
# When install is called with --no-deployment, disable deployment mode
|
46
|
+
if options[:deployment] == false
|
47
|
+
Bundler.settings.set_command_option :frozen, nil
|
48
|
+
options[:system] = true
|
49
|
+
end
|
50
|
+
|
51
|
+
normalize_settings
|
52
|
+
|
53
|
+
Bundler::Fetcher.disable_endpoint = options["full-index"]
|
54
|
+
|
55
|
+
if options["binstubs"]
|
56
|
+
Bundler::SharedHelpers.major_deprecation 3,
|
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?
|
61
|
+
|
62
|
+
definition = Bundler.definition
|
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?
|
67
|
+
|
68
|
+
Bundler.ui.confirm "Bundle complete! #{dependencies_count_for(definition)}, #{gems_installed_for(definition)}."
|
69
|
+
Bundler::CLI::Common.output_without_groups_message
|
70
|
+
|
71
|
+
if Bundler.use_system_gems?
|
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}`"
|
76
|
+
end
|
77
|
+
|
78
|
+
Bundler::CLI::Common.output_post_install_messages installer.post_install_messages
|
79
|
+
|
80
|
+
warn_ambiguous_gems
|
81
|
+
|
82
|
+
if CLI::Common.clean_after_install?
|
83
|
+
require "bundler/cli/clean"
|
84
|
+
Bundler::CLI::Clean.new(options).run
|
85
|
+
end
|
86
|
+
rescue GemNotFound, VersionConflict => e
|
87
|
+
if options[:local] && Bundler.app_cache.exist?
|
88
|
+
Bundler.ui.warn "Some gems seem to be missing from your #{Bundler.settings.app_cache_path} directory."
|
89
|
+
end
|
90
|
+
|
91
|
+
unless Bundler.definition.has_rubygems_remotes?
|
92
|
+
Bundler.ui.warn <<-WARN, :wrap => true
|
93
|
+
Your Gemfile has no gem server sources. If you need gems that are \
|
94
|
+
not already on your machine, add a line like this to your Gemfile:
|
95
|
+
source 'https://rubygems.org'
|
96
|
+
WARN
|
97
|
+
end
|
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
|
102
|
+
end
|
103
|
+
|
104
|
+
private
|
105
|
+
|
106
|
+
def warn_if_root
|
107
|
+
return if Bundler.settings[:silence_root_warning] || Bundler::WINDOWS || !Process.uid.zero?
|
108
|
+
Bundler.ui.warn "Don't run Bundler as root. Bundler can ask for sudo " \
|
109
|
+
"if it is needed, and installing your bundle as root will break this " \
|
110
|
+
"application for all non-root users on this machine.", :wrap => true
|
111
|
+
end
|
112
|
+
|
113
|
+
def dependencies_count_for(definition)
|
114
|
+
count = definition.dependencies.count
|
115
|
+
"#{count} Gemfile #{count == 1 ? "dependency" : "dependencies"}"
|
116
|
+
end
|
117
|
+
|
118
|
+
def gems_installed_for(definition)
|
119
|
+
count = definition.specs.count
|
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
|
137
|
+
end
|
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
|
+
# TODO: remove this when we drop Bundler 1.x support
|
206
|
+
Installer.ambiguous_gems.to_a.each do |name, installed_from_uri, *also_found_in_uris|
|
207
|
+
Bundler.ui.warn "Warning: the gem '#{name}' was found in multiple sources."
|
208
|
+
Bundler.ui.warn "Installed from: #{installed_from_uri}"
|
209
|
+
Bundler.ui.warn "Also found in:"
|
210
|
+
also_found_in_uris.each {|uri| Bundler.ui.warn " * #{uri}" }
|
211
|
+
Bundler.ui.warn "You should add a source requirement to restrict this gem to your preferred source."
|
212
|
+
Bundler.ui.warn "For example:"
|
213
|
+
Bundler.ui.warn " gem '#{name}', :source => '#{installed_from_uri}'"
|
214
|
+
Bundler.ui.warn "Then uninstall the gem '#{name}' (or delete all bundled gems) and then install again."
|
215
|
+
end
|
216
|
+
end
|
217
|
+
end
|
218
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rbconfig"
|
4
|
+
|
5
|
+
module Bundler
|
6
|
+
class CLI::Issue
|
7
|
+
def run
|
8
|
+
Bundler.ui.info <<-EOS.gsub(/^ {8}/, "")
|
9
|
+
Did you find an issue with Bundler? Before filing a new issue,
|
10
|
+
be sure to check out these resources:
|
11
|
+
|
12
|
+
1. Check out our troubleshooting guide for quick fixes to common issues:
|
13
|
+
https://github.com/bundler/bundler/blob/master/doc/TROUBLESHOOTING.md
|
14
|
+
|
15
|
+
2. Instructions for common Bundler uses can be found on the documentation
|
16
|
+
site: https://bundler.io/
|
17
|
+
|
18
|
+
3. Information about each Bundler command can be found in the Bundler
|
19
|
+
man pages: https://bundler.io/man/bundle.1.html
|
20
|
+
|
21
|
+
Hopefully the troubleshooting steps above resolved your problem! If things
|
22
|
+
still aren't working the way you expect them to, please let us know so
|
23
|
+
that we can diagnose and help fix the problem you're having. Please
|
24
|
+
view the Filing Issues guide for more information:
|
25
|
+
https://github.com/bundler/bundler/blob/master/doc/contributing/ISSUES.md
|
26
|
+
|
27
|
+
EOS
|
28
|
+
|
29
|
+
Bundler.ui.info Bundler::Env.report
|
30
|
+
|
31
|
+
Bundler.ui.info "\n## Bundle Doctor"
|
32
|
+
doctor
|
33
|
+
end
|
34
|
+
|
35
|
+
def doctor
|
36
|
+
require "bundler/cli/doctor"
|
37
|
+
Bundler::CLI::Doctor.new({}).run
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -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
|