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,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "bundler/vendored_thor"
|
4
|
+
module Bundler
|
5
|
+
class CLI::Plugin < Thor
|
6
|
+
desc "install PLUGINS", "Install the plugin from the source"
|
7
|
+
long_desc <<-D
|
8
|
+
Install plugins either from the rubygems source provided (with --source option) or from a git source provided with (--git option). If no sources are provided, it uses Gem.sources
|
9
|
+
D
|
10
|
+
method_option "source", :type => :string, :default => nil, :banner =>
|
11
|
+
"URL of the RubyGems source to fetch the plugin from"
|
12
|
+
method_option "version", :type => :string, :default => nil, :banner =>
|
13
|
+
"The version of the plugin to fetch"
|
14
|
+
method_option "git", :type => :string, :default => nil, :banner =>
|
15
|
+
"URL of the git repo to fetch from"
|
16
|
+
method_option "branch", :type => :string, :default => nil, :banner =>
|
17
|
+
"The git branch to checkout"
|
18
|
+
method_option "ref", :type => :string, :default => nil, :banner =>
|
19
|
+
"The git revision to check out"
|
20
|
+
def install(*plugins)
|
21
|
+
Bundler::Plugin.install(plugins, options)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
class CLI::Pristine
|
5
|
+
def initialize(gems)
|
6
|
+
@gems = gems
|
7
|
+
end
|
8
|
+
|
9
|
+
def run
|
10
|
+
CLI::Common.ensure_all_gems_in_lockfile!(@gems)
|
11
|
+
definition = Bundler.definition
|
12
|
+
definition.validate_runtime!
|
13
|
+
installer = Bundler::Installer.new(Bundler.root, definition)
|
14
|
+
|
15
|
+
Bundler.load.specs.each do |spec|
|
16
|
+
next if spec.name == "bundler" # Source::Rubygems doesn't install bundler
|
17
|
+
next if !@gems.empty? && !@gems.include?(spec.name)
|
18
|
+
|
19
|
+
gem_name = "#{spec.name} (#{spec.version}#{spec.git_version})"
|
20
|
+
gem_name += " (#{spec.platform})" if !spec.platform.nil? && spec.platform != Gem::Platform::RUBY
|
21
|
+
|
22
|
+
case source = spec.source
|
23
|
+
when Source::Rubygems
|
24
|
+
cached_gem = spec.cache_file
|
25
|
+
unless File.exist?(cached_gem)
|
26
|
+
Bundler.ui.error("Failed to pristine #{gem_name}. Cached gem #{cached_gem} does not exist.")
|
27
|
+
next
|
28
|
+
end
|
29
|
+
|
30
|
+
FileUtils.rm_rf spec.full_gem_path
|
31
|
+
when Source::Git
|
32
|
+
source.remote!
|
33
|
+
if extension_cache_path = source.extension_cache_path(spec)
|
34
|
+
FileUtils.rm_rf extension_cache_path
|
35
|
+
end
|
36
|
+
FileUtils.rm_rf spec.extension_dir if spec.respond_to?(:extension_dir)
|
37
|
+
FileUtils.rm_rf spec.full_gem_path
|
38
|
+
else
|
39
|
+
Bundler.ui.warn("Cannot pristine #{gem_name}. Gem is sourced from local path.")
|
40
|
+
next
|
41
|
+
end
|
42
|
+
|
43
|
+
Bundler::GemInstaller.new(spec, installer, false, 0, true).install_from_spec
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
class CLI::Remove
|
5
|
+
def initialize(gems, options)
|
6
|
+
@gems = gems
|
7
|
+
@options = options
|
8
|
+
end
|
9
|
+
|
10
|
+
def run
|
11
|
+
raise InvalidOption, "Please specify gems to remove." if @gems.empty?
|
12
|
+
|
13
|
+
Injector.remove(@gems, {})
|
14
|
+
|
15
|
+
Installer.install(Bundler.root, Bundler.definition) if @options["install"]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
class CLI::Show
|
5
|
+
attr_reader :options, :gem_name, :latest_specs
|
6
|
+
def initialize(options, gem_name)
|
7
|
+
@options = options
|
8
|
+
@gem_name = gem_name
|
9
|
+
@verbose = options[:verbose] || options[:outdated]
|
10
|
+
@latest_specs = fetch_latest_specs if @verbose
|
11
|
+
end
|
12
|
+
|
13
|
+
def run
|
14
|
+
Bundler.ui.silence do
|
15
|
+
Bundler.definition.validate_runtime!
|
16
|
+
Bundler.load.lock
|
17
|
+
end
|
18
|
+
|
19
|
+
if gem_name
|
20
|
+
if gem_name == "bundler"
|
21
|
+
path = File.expand_path("../../../..", __FILE__)
|
22
|
+
else
|
23
|
+
spec = Bundler::CLI::Common.select_spec(gem_name, :regex_match)
|
24
|
+
return unless spec
|
25
|
+
path = spec.full_gem_path
|
26
|
+
unless File.directory?(path)
|
27
|
+
Bundler.ui.warn "The gem #{gem_name} has been deleted. It was installed at:"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
return Bundler.ui.info(path)
|
31
|
+
end
|
32
|
+
|
33
|
+
if options[:paths]
|
34
|
+
Bundler.load.specs.sort_by(&:name).map do |s|
|
35
|
+
Bundler.ui.info s.full_gem_path
|
36
|
+
end
|
37
|
+
else
|
38
|
+
Bundler.ui.info "Gems included by the bundle:"
|
39
|
+
Bundler.load.specs.sort_by(&:name).each do |s|
|
40
|
+
desc = " * #{s.name} (#{s.version}#{s.git_version})"
|
41
|
+
if @verbose
|
42
|
+
latest = latest_specs.find {|l| l.name == s.name }
|
43
|
+
Bundler.ui.info <<-END.gsub(/^ +/, "")
|
44
|
+
#{desc}
|
45
|
+
\tSummary: #{s.summary || "No description available."}
|
46
|
+
\tHomepage: #{s.homepage || "No website available."}
|
47
|
+
\tStatus: #{outdated?(s, latest) ? "Outdated - #{s.version} < #{latest.version}" : "Up to date"}
|
48
|
+
END
|
49
|
+
else
|
50
|
+
Bundler.ui.info desc
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
def fetch_latest_specs
|
59
|
+
definition = Bundler.definition(true)
|
60
|
+
if options[:outdated]
|
61
|
+
Bundler.ui.info "Fetching remote specs for outdated check...\n\n"
|
62
|
+
Bundler.ui.silence { definition.resolve_remotely! }
|
63
|
+
else
|
64
|
+
definition.resolve_with_cache!
|
65
|
+
end
|
66
|
+
Bundler.reset!
|
67
|
+
definition.specs
|
68
|
+
end
|
69
|
+
|
70
|
+
def outdated?(current, latest)
|
71
|
+
return false unless latest
|
72
|
+
Gem::Version.new(current.version) < Gem::Version.new(latest.version)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
class CLI::Update
|
5
|
+
attr_reader :options, :gems
|
6
|
+
def initialize(options, gems)
|
7
|
+
@options = options
|
8
|
+
@gems = gems
|
9
|
+
end
|
10
|
+
|
11
|
+
def run
|
12
|
+
Bundler.ui.level = "error" if options[:quiet]
|
13
|
+
|
14
|
+
Plugin.gemfile_install(Bundler.default_gemfile) if Bundler.feature_flag.plugins?
|
15
|
+
|
16
|
+
sources = Array(options[:source])
|
17
|
+
groups = Array(options[:group]).map(&:to_sym)
|
18
|
+
|
19
|
+
full_update = gems.empty? && sources.empty? && groups.empty? && !options[:ruby] && !options[:bundler]
|
20
|
+
|
21
|
+
if full_update && !options[:all]
|
22
|
+
if Bundler.feature_flag.update_requires_all_flag?
|
23
|
+
raise InvalidOption, "To update everything, pass the `--all` flag."
|
24
|
+
end
|
25
|
+
SharedHelpers.major_deprecation 3, "Pass --all to `bundle update` to update everything"
|
26
|
+
elsif !full_update && options[:all]
|
27
|
+
raise InvalidOption, "Cannot specify --all along with specific options."
|
28
|
+
end
|
29
|
+
|
30
|
+
if full_update
|
31
|
+
# We're doing a full update
|
32
|
+
Bundler.definition(true)
|
33
|
+
else
|
34
|
+
unless Bundler.default_lockfile.exist?
|
35
|
+
raise GemfileLockNotFound, "This Bundle hasn't been installed yet. " \
|
36
|
+
"Run `bundle install` to update and install the bundled gems."
|
37
|
+
end
|
38
|
+
Bundler::CLI::Common.ensure_all_gems_in_lockfile!(gems)
|
39
|
+
|
40
|
+
if groups.any?
|
41
|
+
deps = Bundler.definition.dependencies.select {|d| (d.groups & groups).any? }
|
42
|
+
gems.concat(deps.map(&:name))
|
43
|
+
end
|
44
|
+
|
45
|
+
Bundler.definition(:gems => gems, :sources => sources, :ruby => options[:ruby],
|
46
|
+
:lock_shared_dependencies => options[:conservative],
|
47
|
+
:bundler => options[:bundler])
|
48
|
+
end
|
49
|
+
|
50
|
+
Bundler::CLI::Common.configure_gem_version_promoter(Bundler.definition, options)
|
51
|
+
|
52
|
+
Bundler::Fetcher.disable_endpoint = options["full-index"]
|
53
|
+
|
54
|
+
opts = options.dup
|
55
|
+
opts["update"] = true
|
56
|
+
opts["local"] = options[:local]
|
57
|
+
|
58
|
+
Bundler.settings.set_command_option_if_given :jobs, opts["jobs"]
|
59
|
+
|
60
|
+
Bundler.definition.validate_runtime!
|
61
|
+
installer = Installer.install Bundler.root, Bundler.definition, opts
|
62
|
+
Bundler.load.cache if Bundler.app_cache.exist?
|
63
|
+
|
64
|
+
if CLI::Common.clean_after_install?
|
65
|
+
require "bundler/cli/clean"
|
66
|
+
Bundler::CLI::Clean.new(options).run
|
67
|
+
end
|
68
|
+
|
69
|
+
if locked_gems = Bundler.definition.locked_gems
|
70
|
+
gems.each do |name|
|
71
|
+
locked_version = locked_gems.specs.find {|s| s.name == name }
|
72
|
+
locked_version &&= locked_version.version
|
73
|
+
next unless locked_version
|
74
|
+
new_version = Bundler.definition.specs[name].first
|
75
|
+
new_version &&= new_version.version
|
76
|
+
if !new_version
|
77
|
+
Bundler.ui.warn "Bundler attempted to update #{name} but it was removed from the bundle"
|
78
|
+
elsif new_version < locked_version
|
79
|
+
Bundler.ui.warn "Note: #{name} version regressed from #{locked_version} to #{new_version}"
|
80
|
+
elsif new_version == locked_version
|
81
|
+
Bundler.ui.warn "Bundler attempted to update #{name} but its version stayed the same"
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
Bundler.ui.confirm "Bundle updated!"
|
87
|
+
Bundler::CLI::Common.output_without_groups_message
|
88
|
+
Bundler::CLI::Common.output_post_install_messages installer.post_install_messages
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
class CLI::Viz
|
5
|
+
attr_reader :options, :gem_name
|
6
|
+
def initialize(options)
|
7
|
+
@options = options
|
8
|
+
end
|
9
|
+
|
10
|
+
def run
|
11
|
+
# make sure we get the right `graphviz`. There is also a `graphviz`
|
12
|
+
# gem we're not built to support
|
13
|
+
gem "ruby-graphviz"
|
14
|
+
require "graphviz"
|
15
|
+
|
16
|
+
options[:without] = options[:without].join(":").tr(" ", ":").split(":")
|
17
|
+
output_file = File.expand_path(options[:file])
|
18
|
+
|
19
|
+
graph = Graph.new(Bundler.load, output_file, options[:version], options[:requirements], options[:format], options[:without])
|
20
|
+
graph.viz
|
21
|
+
rescue LoadError => e
|
22
|
+
Bundler.ui.error e.inspect
|
23
|
+
Bundler.ui.warn "Make sure you have the graphviz ruby gem. You can install it with:"
|
24
|
+
Bundler.ui.warn "`gem install ruby-graphviz`"
|
25
|
+
rescue StandardError => e
|
26
|
+
raise unless e.message =~ /GraphViz not installed or dot not in PATH/
|
27
|
+
Bundler.ui.error e.message
|
28
|
+
Bundler.ui.warn "Please install GraphViz. On a Mac with Homebrew, you can run `brew install graphviz`."
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "pathname"
|
4
|
+
require "set"
|
5
|
+
|
6
|
+
module Bundler
|
7
|
+
class CompactIndexClient
|
8
|
+
DEBUG_MUTEX = Mutex.new
|
9
|
+
def self.debug
|
10
|
+
return unless ENV["DEBUG_COMPACT_INDEX"]
|
11
|
+
DEBUG_MUTEX.synchronize { warn("[#{self}] #{yield}") }
|
12
|
+
end
|
13
|
+
|
14
|
+
class Error < StandardError; end
|
15
|
+
|
16
|
+
require "bundler/compact_index_client/cache"
|
17
|
+
require "bundler/compact_index_client/updater"
|
18
|
+
|
19
|
+
attr_reader :directory
|
20
|
+
|
21
|
+
# @return [Lambda] A lambda that takes an array of inputs and a block, and
|
22
|
+
# maps the inputs with the block in parallel.
|
23
|
+
#
|
24
|
+
attr_accessor :in_parallel
|
25
|
+
|
26
|
+
def initialize(directory, fetcher)
|
27
|
+
@directory = Pathname.new(directory)
|
28
|
+
@updater = Updater.new(fetcher)
|
29
|
+
@cache = Cache.new(@directory)
|
30
|
+
@endpoints = Set.new
|
31
|
+
@info_checksums_by_name = {}
|
32
|
+
@parsed_checksums = false
|
33
|
+
@mutex = Mutex.new
|
34
|
+
@in_parallel = lambda do |inputs, &blk|
|
35
|
+
inputs.map(&blk)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def names
|
40
|
+
Bundler::CompactIndexClient.debug { "/names" }
|
41
|
+
update(@cache.names_path, "names")
|
42
|
+
@cache.names
|
43
|
+
end
|
44
|
+
|
45
|
+
def versions
|
46
|
+
Bundler::CompactIndexClient.debug { "/versions" }
|
47
|
+
update(@cache.versions_path, "versions")
|
48
|
+
versions, @info_checksums_by_name = @cache.versions
|
49
|
+
versions
|
50
|
+
end
|
51
|
+
|
52
|
+
def dependencies(names)
|
53
|
+
Bundler::CompactIndexClient.debug { "dependencies(#{names})" }
|
54
|
+
in_parallel.call(names) do |name|
|
55
|
+
update_info(name)
|
56
|
+
@cache.dependencies(name).map {|d| d.unshift(name) }
|
57
|
+
end.flatten(1)
|
58
|
+
end
|
59
|
+
|
60
|
+
def spec(name, version, platform = nil)
|
61
|
+
Bundler::CompactIndexClient.debug { "spec(name = #{name}, version = #{version}, platform = #{platform})" }
|
62
|
+
update_info(name)
|
63
|
+
@cache.specific_dependency(name, version, platform)
|
64
|
+
end
|
65
|
+
|
66
|
+
def update_and_parse_checksums!
|
67
|
+
Bundler::CompactIndexClient.debug { "update_and_parse_checksums!" }
|
68
|
+
return @info_checksums_by_name if @parsed_checksums
|
69
|
+
update(@cache.versions_path, "versions")
|
70
|
+
@info_checksums_by_name = @cache.checksums
|
71
|
+
@parsed_checksums = true
|
72
|
+
end
|
73
|
+
|
74
|
+
private
|
75
|
+
|
76
|
+
def update(local_path, remote_path)
|
77
|
+
Bundler::CompactIndexClient.debug { "update(#{local_path}, #{remote_path})" }
|
78
|
+
unless synchronize { @endpoints.add?(remote_path) }
|
79
|
+
Bundler::CompactIndexClient.debug { "already fetched #{remote_path}" }
|
80
|
+
return
|
81
|
+
end
|
82
|
+
@updater.update(local_path, url(remote_path))
|
83
|
+
end
|
84
|
+
|
85
|
+
def update_info(name)
|
86
|
+
Bundler::CompactIndexClient.debug { "update_info(#{name})" }
|
87
|
+
path = @cache.info_path(name)
|
88
|
+
checksum = @updater.checksum_for_file(path)
|
89
|
+
unless existing = @info_checksums_by_name[name]
|
90
|
+
Bundler::CompactIndexClient.debug { "skipping updating info for #{name} since it is missing from versions" }
|
91
|
+
return
|
92
|
+
end
|
93
|
+
if checksum == existing
|
94
|
+
Bundler::CompactIndexClient.debug { "skipping updating info for #{name} since the versions checksum matches the local checksum" }
|
95
|
+
return
|
96
|
+
end
|
97
|
+
Bundler::CompactIndexClient.debug { "updating info for #{name} since the versions checksum #{existing} != the local checksum #{checksum}" }
|
98
|
+
update(path, "info/#{name}")
|
99
|
+
end
|
100
|
+
|
101
|
+
def url(path)
|
102
|
+
path
|
103
|
+
end
|
104
|
+
|
105
|
+
def synchronize
|
106
|
+
@mutex.synchronize { yield }
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,118 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
class CompactIndexClient
|
5
|
+
class Cache
|
6
|
+
attr_reader :directory
|
7
|
+
|
8
|
+
def initialize(directory)
|
9
|
+
@directory = Pathname.new(directory).expand_path
|
10
|
+
info_roots.each do |dir|
|
11
|
+
SharedHelpers.filesystem_access(dir) do
|
12
|
+
FileUtils.mkdir_p(dir)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def names
|
18
|
+
lines(names_path)
|
19
|
+
end
|
20
|
+
|
21
|
+
def names_path
|
22
|
+
directory.join("names")
|
23
|
+
end
|
24
|
+
|
25
|
+
def versions
|
26
|
+
versions_by_name = Hash.new {|hash, key| hash[key] = [] }
|
27
|
+
info_checksums_by_name = {}
|
28
|
+
|
29
|
+
lines(versions_path).each do |line|
|
30
|
+
name, versions_string, info_checksum = line.split(" ", 3)
|
31
|
+
info_checksums_by_name[name] = info_checksum || ""
|
32
|
+
versions_string.split(",").each do |version|
|
33
|
+
if version.start_with?("-")
|
34
|
+
version = version[1..-1].split("-", 2).unshift(name)
|
35
|
+
versions_by_name[name].delete(version)
|
36
|
+
else
|
37
|
+
version = version.split("-", 2).unshift(name)
|
38
|
+
versions_by_name[name] << version
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
[versions_by_name, info_checksums_by_name]
|
44
|
+
end
|
45
|
+
|
46
|
+
def versions_path
|
47
|
+
directory.join("versions")
|
48
|
+
end
|
49
|
+
|
50
|
+
def checksums
|
51
|
+
checksums = {}
|
52
|
+
|
53
|
+
lines(versions_path).each do |line|
|
54
|
+
name, _, checksum = line.split(" ", 3)
|
55
|
+
checksums[name] = checksum
|
56
|
+
end
|
57
|
+
|
58
|
+
checksums
|
59
|
+
end
|
60
|
+
|
61
|
+
def dependencies(name)
|
62
|
+
lines(info_path(name)).map do |line|
|
63
|
+
parse_gem(line)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def info_path(name)
|
68
|
+
name = name.to_s
|
69
|
+
if name =~ /[^a-z0-9_-]/
|
70
|
+
name += "-#{SharedHelpers.digest(:MD5).hexdigest(name).downcase}"
|
71
|
+
info_roots.last.join(name)
|
72
|
+
else
|
73
|
+
info_roots.first.join(name)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def specific_dependency(name, version, platform)
|
78
|
+
pattern = [version, platform].compact.join("-")
|
79
|
+
return nil if pattern.empty?
|
80
|
+
|
81
|
+
gem_lines = info_path(name).read
|
82
|
+
gem_line = gem_lines[/^#{Regexp.escape(pattern)}\b.*/, 0]
|
83
|
+
gem_line ? parse_gem(gem_line) : nil
|
84
|
+
end
|
85
|
+
|
86
|
+
private
|
87
|
+
|
88
|
+
def lines(path)
|
89
|
+
return [] unless path.file?
|
90
|
+
lines = SharedHelpers.filesystem_access(path, :read, &:read).split("\n")
|
91
|
+
header = lines.index("---")
|
92
|
+
header ? lines[header + 1..-1] : lines
|
93
|
+
end
|
94
|
+
|
95
|
+
def parse_gem(string)
|
96
|
+
version_and_platform, rest = string.split(" ", 2)
|
97
|
+
version, platform = version_and_platform.split("-", 2)
|
98
|
+
dependencies, requirements = rest.split("|", 2).map {|s| s.split(",") } if rest
|
99
|
+
dependencies = dependencies ? dependencies.map {|d| parse_dependency(d) } : []
|
100
|
+
requirements = requirements ? requirements.map {|r| parse_dependency(r) } : []
|
101
|
+
[version, platform, dependencies, requirements]
|
102
|
+
end
|
103
|
+
|
104
|
+
def parse_dependency(string)
|
105
|
+
dependency = string.split(":")
|
106
|
+
dependency[-1] = dependency[-1].split("&") if dependency.size > 1
|
107
|
+
dependency
|
108
|
+
end
|
109
|
+
|
110
|
+
def info_roots
|
111
|
+
[
|
112
|
+
directory.join("info"),
|
113
|
+
directory.join("info-special-characters"),
|
114
|
+
]
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|