mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	[rubygems/rubygems] fix dangling empty hooks
it turns out that running `bundle plugin uninstall some-plugin` would remove that plugin from the list of hooks, but if the list of hooks for an event was now empty, we would serialize the empty array into yaml as an empty single bullet item. which would then get unserialized as a plugin with the name empty string. which we would then try to load and explode. 😬
545ebba9a5
			
			
This commit is contained in:
		
							parent
							
								
									a3d2200b2a
								
							
						
					
					
						commit
						c5f78ade5a
					
				
					 2 changed files with 10 additions and 1 deletions
				
			
		|  | @ -74,7 +74,10 @@ module Bundler | ||||||
|       def unregister_plugin(name) |       def unregister_plugin(name) | ||||||
|         @commands.delete_if {|_, v| v == name } |         @commands.delete_if {|_, v| v == name } | ||||||
|         @sources.delete_if {|_, v| v == name } |         @sources.delete_if {|_, v| v == name } | ||||||
|         @hooks.each {|_, plugin_names| plugin_names.delete(name) } |         @hooks.each do |hook, names| | ||||||
|  |           names.delete(name) | ||||||
|  |           @hooks.delete(hook) if names.empty? | ||||||
|  |         end | ||||||
|         @plugin_paths.delete(name) |         @plugin_paths.delete(name) | ||||||
|         @load_paths.delete(name) |         @load_paths.delete(name) | ||||||
|         save_index |         save_index | ||||||
|  |  | ||||||
|  | @ -98,6 +98,12 @@ RSpec.describe Bundler::Plugin::Index do | ||||||
|       expect(index.hook_plugins("after-bar")).to eq([plugin_name]) |       expect(index.hook_plugins("after-bar")).to eq([plugin_name]) | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|  |     it "is gone after unregistration" do | ||||||
|  |       expect(index.index_file.read).to include("after-bar:\n  - \"new-plugin\"\n") | ||||||
|  |       index.unregister_plugin(plugin_name) | ||||||
|  |       expect(index.index_file.read).to_not include("after-bar:\n  - \n") | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|     context "that are not registered" do |     context "that are not registered" do | ||||||
|       let(:file) { double("index-file") } |       let(:file) { double("index-file") } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andre Arko
						Andre Arko