summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorSutou Kouhei <kou@clear-code.com>2022-09-13 09:57:42 +0900
committergit <svn-admin@ruby-lang.org>2023-05-25 21:51:15 +0000
commitd83f32c34b1d0e4dd49dd1f0af1b665c022b2872 (patch)
tree3a50d7b0c5d292251513e6dd0df157bed39d0562 /lib
parente87f6c899e55f4d9452ce4d75cf2a725ae736aff (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.rb15
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