File tree Expand file tree Collapse file tree 2 files changed +43
-1
lines changed Expand file tree Collapse file tree 2 files changed +43
-1
lines changed Original file line number Diff line number Diff line change @@ -342,7 +342,26 @@ def load_plugin(name)
342342 # done to avoid conflicts
343343 path = index . plugin_path ( name )
344344
345- Gem . add_to_load_path ( *index . load_paths ( name ) )
345+ paths = index . load_paths ( name )
346+ invalid_paths = paths . reject { |p | File . directory? ( p ) }
347+
348+ if invalid_paths . any?
349+ Bundler . ui . warn <<~MESSAGE
350+ The following plugin paths don't exist: #{ invalid_paths . join ( ", " ) } .
351+
352+ This can happen if the plugin was installed with a different version of Ruby that has since been uninstalled.
353+
354+ If you would like to reinstall the plugin, run:
355+
356+ bundler plugin uninstall #{ name } && bundler plugin install #{ name }
357+
358+ Continuing without installing plugin #{ name } .
359+ MESSAGE
360+
361+ return
362+ end
363+
364+ Gem . add_to_load_path ( *paths )
346365
347366 load path . join ( PLUGIN_FILE_NAME )
348367
Original file line number Diff line number Diff line change 333333 end . to output ( "win\n " ) . to_stdout
334334 end
335335 end
336+
337+ context "the plugin load_path is invalid" do
338+ before do
339+ allow ( index ) . to receive ( :load_paths ) . with ( "foo-plugin" ) .
340+ and_return ( [ "invalid-file-name1" , "invalid-file-name2" ] )
341+ end
342+
343+ it "outputs a useful warning" do
344+ msg =
345+ "The following plugin paths don't exist: invalid-file-name1, invalid-file-name2.\n \n " \
346+ "This can happen if the plugin was " \
347+ "installed with a different version of Ruby that has since been uninstalled.\n \n " \
348+ "If you would like to reinstall the plugin, run:\n \n " \
349+ "bundler plugin uninstall foo-plugin && bundler plugin install foo-plugin\n \n " \
350+ "Continuing without installing plugin foo-plugin.\n "
351+
352+ expect ( Bundler . ui ) . to receive ( :warn ) . with ( msg )
353+
354+ Plugin . hook ( Bundler ::Plugin ::Events ::EVENT1 )
355+
356+ expect ( subject . loaded? ( "foo-plugin" ) ) . to be_falsey
357+ end
358+ end
336359 end
337360end
You can’t perform that action at this time.
0 commit comments