diff options
author | Sutou Kouhei <kou@clear-code.com> | 2022-09-13 09:57:42 +0900 |
---|---|---|
committer | git <svn-admin@ruby-lang.org> | 2023-05-25 21:51:15 +0000 |
commit | d83f32c34b1d0e4dd49dd1f0af1b665c022b2872 (patch) | |
tree | 3a50d7b0c5d292251513e6dd0df157bed39d0562 /lib | |
parent | e87f6c899e55f4d9452ce4d75cf2a725ae736aff (diff) |
[rubygems/rubygems] Load plugin immediately
We can install RubyGems plugin by "gem install XXX". The installed
plugin is used from the NEXT "gem ...".
For example, "gem install gem-src kaminari" doesn't use gem-src plugin
for kaminari. "gem install gem-src && gem install kaminari" uses
gem-src plugin for kaminari.
How about loading a plugin immediately when the plugin is installed?
If this proposal is implemented, "gem install gem-src kaminari" works
like "gem install gem-src && gem install kaminari".
https://github.com/rubygems/rubygems/commit/4917d96f4c
Diffstat (limited to 'lib')
-rw-r--r-- | lib/rubygems/installer.rb | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb index 0534d7c36b..162a50fdb7 100644 --- a/lib/rubygems/installer.rb +++ b/lib/rubygems/installer.rb @@ -343,6 +343,8 @@ class Gem::Installer Gem::Specification.add_spec(spec) + load_plugin + run_post_install_hooks spec @@ -1006,4 +1008,17 @@ TEXT "" end end + + def load_plugin + specs = Gem::Specification.find_all_by_name(spec.name) + # If old version already exists, this plugin isn't loaded + # immediately. It's for avoiding a case that multiple versions + # are loaded at the same time. + return unless specs.size == 1 + + plugin_files = spec.plugins.map do |plugin| + File.join(@plugins_dir, "#{spec.name}_plugin#{File.extname(plugin)}") + end + Gem.load_plugin_files(plugin_files) + end end |