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,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
module Plugin
|
5
|
+
# Dsl to parse the Gemfile looking for plugins to install
|
6
|
+
class DSL < Bundler::Dsl
|
7
|
+
class PluginGemfileError < PluginError; end
|
8
|
+
alias_method :_gem, :gem # To use for plugin installation as gem
|
9
|
+
|
10
|
+
# So that we don't have to override all there methods to dummy ones
|
11
|
+
# explicitly.
|
12
|
+
# They will be handled by method_missing
|
13
|
+
[:gemspec, :gem, :path, :install_if, :platforms, :env].each {|m| undef_method m }
|
14
|
+
|
15
|
+
# This lists the plugins that was added automatically and not specified by
|
16
|
+
# the user.
|
17
|
+
#
|
18
|
+
# When we encounter :type attribute with a source block, we add a plugin
|
19
|
+
# by name bundler-source-<type> to list of plugins to be installed.
|
20
|
+
#
|
21
|
+
# These plugins are optional and are not installed when there is conflict
|
22
|
+
# with any other plugin.
|
23
|
+
attr_reader :inferred_plugins
|
24
|
+
|
25
|
+
def initialize
|
26
|
+
super
|
27
|
+
@sources = Plugin::SourceList.new
|
28
|
+
@inferred_plugins = [] # The source plugins inferred from :type
|
29
|
+
end
|
30
|
+
|
31
|
+
def plugin(name, *args)
|
32
|
+
_gem(name, *args)
|
33
|
+
end
|
34
|
+
|
35
|
+
def method_missing(name, *args)
|
36
|
+
raise PluginGemfileError, "Undefined local variable or method `#{name}' for Gemfile" unless Bundler::Dsl.method_defined? name
|
37
|
+
end
|
38
|
+
|
39
|
+
def source(source, *args, &blk)
|
40
|
+
options = args.last.is_a?(Hash) ? args.pop.dup : {}
|
41
|
+
options = normalize_hash(options)
|
42
|
+
return super unless options.key?("type")
|
43
|
+
|
44
|
+
plugin_name = "bundler-source-#{options["type"]}"
|
45
|
+
|
46
|
+
return if @dependencies.any? {|d| d.name == plugin_name }
|
47
|
+
|
48
|
+
plugin(plugin_name)
|
49
|
+
@inferred_plugins << plugin_name
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
module Plugin
|
5
|
+
module Events
|
6
|
+
def self.define(const, event)
|
7
|
+
const = const.to_sym.freeze
|
8
|
+
if const_defined?(const) && const_get(const) != event
|
9
|
+
raise ArgumentError, "Attempting to reassign #{const} to a different value"
|
10
|
+
end
|
11
|
+
const_set(const, event) unless const_defined?(const)
|
12
|
+
@events ||= {}
|
13
|
+
@events[event] = const
|
14
|
+
end
|
15
|
+
private_class_method :define
|
16
|
+
|
17
|
+
def self.reset
|
18
|
+
@events.each_value do |const|
|
19
|
+
remove_const(const)
|
20
|
+
end
|
21
|
+
@events = nil
|
22
|
+
end
|
23
|
+
private_class_method :reset
|
24
|
+
|
25
|
+
# Check if an event has been defined
|
26
|
+
# @param event [String] An event to check
|
27
|
+
# @return [Boolean] A boolean indicating if the event has been defined
|
28
|
+
def self.defined_event?(event)
|
29
|
+
@events ||= {}
|
30
|
+
@events.key?(event)
|
31
|
+
end
|
32
|
+
|
33
|
+
# @!parse
|
34
|
+
# A hook called before each individual gem is installed
|
35
|
+
# Includes a Bundler::ParallelInstaller::SpecInstallation.
|
36
|
+
# No state, error, post_install_message will be present as nothing has installed yet
|
37
|
+
# GEM_BEFORE_INSTALL = "before-install"
|
38
|
+
define :GEM_BEFORE_INSTALL, "before-install"
|
39
|
+
|
40
|
+
# @!parse
|
41
|
+
# A hook called after each individual gem is installed
|
42
|
+
# Includes a Bundler::ParallelInstaller::SpecInstallation.
|
43
|
+
# - If state is failed, an error will be present.
|
44
|
+
# - If state is success, a post_install_message may be present.
|
45
|
+
# GEM_AFTER_INSTALL = "after-install"
|
46
|
+
define :GEM_AFTER_INSTALL, "after-install"
|
47
|
+
|
48
|
+
# @!parse
|
49
|
+
# A hook called before any gems install
|
50
|
+
# Includes an Array of Bundler::Dependency objects
|
51
|
+
# GEM_BEFORE_INSTALL_ALL = "before-install-all"
|
52
|
+
define :GEM_BEFORE_INSTALL_ALL, "before-install-all"
|
53
|
+
|
54
|
+
# @!parse
|
55
|
+
# A hook called after any gems install
|
56
|
+
# Includes an Array of Bundler::Dependency objects
|
57
|
+
# GEM_AFTER_INSTALL_ALL = "after-install-all"
|
58
|
+
define :GEM_AFTER_INSTALL_ALL, "after-install-all"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,165 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
# Manages which plugins are installed and their sources. This also is supposed to map
|
5
|
+
# which plugin does what (currently the features are not implemented so this class is
|
6
|
+
# now a stub class).
|
7
|
+
module Plugin
|
8
|
+
class Index
|
9
|
+
class CommandConflict < PluginError
|
10
|
+
def initialize(plugin, commands)
|
11
|
+
msg = "Command(s) `#{commands.join("`, `")}` declared by #{plugin} are already registered."
|
12
|
+
super msg
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class SourceConflict < PluginError
|
17
|
+
def initialize(plugin, sources)
|
18
|
+
msg = "Source(s) `#{sources.join("`, `")}` declared by #{plugin} are already registered."
|
19
|
+
super msg
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
attr_reader :commands
|
24
|
+
|
25
|
+
def initialize
|
26
|
+
@plugin_paths = {}
|
27
|
+
@commands = {}
|
28
|
+
@sources = {}
|
29
|
+
@hooks = {}
|
30
|
+
@load_paths = {}
|
31
|
+
|
32
|
+
begin
|
33
|
+
load_index(global_index_file, true)
|
34
|
+
rescue GenericSystemCallError
|
35
|
+
# no need to fail when on a read-only FS, for example
|
36
|
+
nil
|
37
|
+
end
|
38
|
+
load_index(local_index_file) if SharedHelpers.in_bundle?
|
39
|
+
end
|
40
|
+
|
41
|
+
# This function is to be called when a new plugin is installed. This
|
42
|
+
# function shall add the functions of the plugin to existing maps and also
|
43
|
+
# the name to source location.
|
44
|
+
#
|
45
|
+
# @param [String] name of the plugin to be registered
|
46
|
+
# @param [String] path where the plugin is installed
|
47
|
+
# @param [Array<String>] load_paths for the plugin
|
48
|
+
# @param [Array<String>] commands that are handled by the plugin
|
49
|
+
# @param [Array<String>] sources that are handled by the plugin
|
50
|
+
def register_plugin(name, path, load_paths, commands, sources, hooks)
|
51
|
+
old_commands = @commands.dup
|
52
|
+
|
53
|
+
common = commands & @commands.keys
|
54
|
+
raise CommandConflict.new(name, common) unless common.empty?
|
55
|
+
commands.each {|c| @commands[c] = name }
|
56
|
+
|
57
|
+
common = sources & @sources.keys
|
58
|
+
raise SourceConflict.new(name, common) unless common.empty?
|
59
|
+
sources.each {|k| @sources[k] = name }
|
60
|
+
|
61
|
+
hooks.each do |event|
|
62
|
+
event_hooks = (@hooks[event] ||= []) << name
|
63
|
+
event_hooks.uniq!
|
64
|
+
end
|
65
|
+
|
66
|
+
@plugin_paths[name] = path
|
67
|
+
@load_paths[name] = load_paths
|
68
|
+
save_index
|
69
|
+
rescue StandardError
|
70
|
+
@commands = old_commands
|
71
|
+
raise
|
72
|
+
end
|
73
|
+
|
74
|
+
# Path of default index file
|
75
|
+
def index_file
|
76
|
+
Plugin.root.join("index")
|
77
|
+
end
|
78
|
+
|
79
|
+
# Path where the global index file is stored
|
80
|
+
def global_index_file
|
81
|
+
Plugin.global_root.join("index")
|
82
|
+
end
|
83
|
+
|
84
|
+
# Path where the local index file is stored
|
85
|
+
def local_index_file
|
86
|
+
Plugin.local_root.join("index")
|
87
|
+
end
|
88
|
+
|
89
|
+
def plugin_path(name)
|
90
|
+
Pathname.new @plugin_paths[name]
|
91
|
+
end
|
92
|
+
|
93
|
+
def load_paths(name)
|
94
|
+
@load_paths[name]
|
95
|
+
end
|
96
|
+
|
97
|
+
# Fetch the name of plugin handling the command
|
98
|
+
def command_plugin(command)
|
99
|
+
@commands[command]
|
100
|
+
end
|
101
|
+
|
102
|
+
def installed?(name)
|
103
|
+
@plugin_paths[name]
|
104
|
+
end
|
105
|
+
|
106
|
+
def source?(source)
|
107
|
+
@sources.key? source
|
108
|
+
end
|
109
|
+
|
110
|
+
def source_plugin(name)
|
111
|
+
@sources[name]
|
112
|
+
end
|
113
|
+
|
114
|
+
# Returns the list of plugin names handling the passed event
|
115
|
+
def hook_plugins(event)
|
116
|
+
@hooks[event] || []
|
117
|
+
end
|
118
|
+
|
119
|
+
private
|
120
|
+
|
121
|
+
# Reads the index file from the directory and initializes the instance
|
122
|
+
# variables.
|
123
|
+
#
|
124
|
+
# It skips the sources if the second param is true
|
125
|
+
# @param [Pathname] index file path
|
126
|
+
# @param [Boolean] is the index file global index
|
127
|
+
def load_index(index_file, global = false)
|
128
|
+
SharedHelpers.filesystem_access(index_file, :read) do |index_f|
|
129
|
+
valid_file = index_f && index_f.exist? && !index_f.size.zero?
|
130
|
+
break unless valid_file
|
131
|
+
|
132
|
+
data = index_f.read
|
133
|
+
|
134
|
+
require "bundler/yaml_serializer"
|
135
|
+
index = YAMLSerializer.load(data)
|
136
|
+
|
137
|
+
@commands.merge!(index["commands"])
|
138
|
+
@hooks.merge!(index["hooks"])
|
139
|
+
@load_paths.merge!(index["load_paths"])
|
140
|
+
@plugin_paths.merge!(index["plugin_paths"])
|
141
|
+
@sources.merge!(index["sources"]) unless global
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
# Should be called when any of the instance variables change. Stores the
|
146
|
+
# instance variables in YAML format. (The instance variables are supposed
|
147
|
+
# to be only String key value pairs)
|
148
|
+
def save_index
|
149
|
+
index = {
|
150
|
+
"commands" => @commands,
|
151
|
+
"hooks" => @hooks,
|
152
|
+
"load_paths" => @load_paths,
|
153
|
+
"plugin_paths" => @plugin_paths,
|
154
|
+
"sources" => @sources,
|
155
|
+
}
|
156
|
+
|
157
|
+
require "bundler/yaml_serializer"
|
158
|
+
SharedHelpers.filesystem_access(index_file) do |index_f|
|
159
|
+
FileUtils.mkdir_p(index_f.dirname)
|
160
|
+
File.open(index_f, "w") {|f| f.puts YAMLSerializer.dump(index) }
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
# Handles the installation of plugin in appropriate directories.
|
5
|
+
#
|
6
|
+
# This class is supposed to be wrapper over the existing gem installation infra
|
7
|
+
# but currently it itself handles everything as the Source's subclasses (e.g. Source::RubyGems)
|
8
|
+
# are heavily dependent on the Gemfile.
|
9
|
+
module Plugin
|
10
|
+
class Installer
|
11
|
+
autoload :Rubygems, "bundler/plugin/installer/rubygems"
|
12
|
+
autoload :Git, "bundler/plugin/installer/git"
|
13
|
+
|
14
|
+
def install(names, options)
|
15
|
+
version = options[:version] || [">= 0"]
|
16
|
+
Bundler.settings.temporary(:lockfile_uses_separate_rubygems_sources => false, :disable_multisource => false) do
|
17
|
+
if options[:git]
|
18
|
+
install_git(names, version, options)
|
19
|
+
else
|
20
|
+
sources = options[:source] || Bundler.rubygems.sources
|
21
|
+
install_rubygems(names, version, sources)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Installs the plugin from Definition object created by limited parsing of
|
27
|
+
# Gemfile searching for plugins to be installed
|
28
|
+
#
|
29
|
+
# @param [Definition] definition object
|
30
|
+
# @return [Hash] map of names to their specs they are installed with
|
31
|
+
def install_definition(definition)
|
32
|
+
def definition.lock(*); end
|
33
|
+
definition.resolve_remotely!
|
34
|
+
specs = definition.specs
|
35
|
+
|
36
|
+
install_from_specs specs
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def install_git(names, version, options)
|
42
|
+
uri = options.delete(:git)
|
43
|
+
options["uri"] = uri
|
44
|
+
|
45
|
+
source_list = SourceList.new
|
46
|
+
source_list.add_git_source(options)
|
47
|
+
|
48
|
+
# To support both sources
|
49
|
+
if options[:source]
|
50
|
+
source_list.add_rubygems_source("remotes" => options[:source])
|
51
|
+
end
|
52
|
+
|
53
|
+
deps = names.map {|name| Dependency.new name, version }
|
54
|
+
|
55
|
+
definition = Definition.new(nil, deps, source_list, true)
|
56
|
+
install_definition(definition)
|
57
|
+
end
|
58
|
+
|
59
|
+
# Installs the plugin from rubygems source and returns the path where the
|
60
|
+
# plugin was installed
|
61
|
+
#
|
62
|
+
# @param [String] name of the plugin gem to search in the source
|
63
|
+
# @param [Array] version of the gem to install
|
64
|
+
# @param [String, Array<String>] source(s) to resolve the gem
|
65
|
+
#
|
66
|
+
# @return [Hash] map of names to the specs of plugins installed
|
67
|
+
def install_rubygems(names, version, sources)
|
68
|
+
deps = names.map {|name| Dependency.new name, version }
|
69
|
+
|
70
|
+
source_list = SourceList.new
|
71
|
+
source_list.add_rubygems_source("remotes" => sources)
|
72
|
+
|
73
|
+
definition = Definition.new(nil, deps, source_list, true)
|
74
|
+
install_definition(definition)
|
75
|
+
end
|
76
|
+
|
77
|
+
# Installs the plugins and deps from the provided specs and returns map of
|
78
|
+
# gems to their paths
|
79
|
+
#
|
80
|
+
# @param specs to install
|
81
|
+
#
|
82
|
+
# @return [Hash] map of names to the specs
|
83
|
+
def install_from_specs(specs)
|
84
|
+
paths = {}
|
85
|
+
|
86
|
+
specs.each do |spec|
|
87
|
+
spec.source.install spec
|
88
|
+
|
89
|
+
paths[spec.name] = spec
|
90
|
+
end
|
91
|
+
|
92
|
+
paths
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
module Plugin
|
5
|
+
class Installer
|
6
|
+
class Git < Bundler::Source::Git
|
7
|
+
def cache_path
|
8
|
+
@cache_path ||= begin
|
9
|
+
git_scope = "#{base_name}-#{uri_hash}"
|
10
|
+
|
11
|
+
Plugin.cache.join("bundler", "git", git_scope)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def install_path
|
16
|
+
@install_path ||= begin
|
17
|
+
git_scope = "#{base_name}-#{shortref_for_path(revision)}"
|
18
|
+
|
19
|
+
Plugin.root.join("bundler", "gems", git_scope)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def version_message(spec)
|
24
|
+
"#{spec.name} #{spec.version}"
|
25
|
+
end
|
26
|
+
|
27
|
+
def root
|
28
|
+
Plugin.root
|
29
|
+
end
|
30
|
+
|
31
|
+
def generate_bin(spec, disable_extensions = false)
|
32
|
+
# Need to find a way without code duplication
|
33
|
+
# For now, we can ignore this
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
module Plugin
|
5
|
+
class Installer
|
6
|
+
class Rubygems < Bundler::Source::Rubygems
|
7
|
+
def version_message(spec)
|
8
|
+
"#{spec.name} #{spec.version}"
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def requires_sudo?
|
14
|
+
false # Will change on implementation of project level plugins
|
15
|
+
end
|
16
|
+
|
17
|
+
def rubygems_dir
|
18
|
+
Plugin.root
|
19
|
+
end
|
20
|
+
|
21
|
+
def cache_path
|
22
|
+
Plugin.cache
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
# SourceList object to be used while parsing the Gemfile, setting the
|
5
|
+
# approptiate options to be used with Source classes for plugin installation
|
6
|
+
module Plugin
|
7
|
+
class SourceList < Bundler::SourceList
|
8
|
+
def add_git_source(options = {})
|
9
|
+
add_source_to_list Plugin::Installer::Git.new(options), git_sources
|
10
|
+
end
|
11
|
+
|
12
|
+
def add_rubygems_source(options = {})
|
13
|
+
add_source_to_list Plugin::Installer::Rubygems.new(options), @rubygems_sources
|
14
|
+
end
|
15
|
+
|
16
|
+
def all_sources
|
17
|
+
path_sources + git_sources + rubygems_sources + [metadata_source]
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def rubygems_aggregate_class
|
23
|
+
Plugin::Installer::Rubygems
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|