108 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			108 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | require 'constants' | ||
|  | require 'set' | ||
|  | 
 | ||
|  | class PluginManager | ||
|  | 
 | ||
|  |   constructor :configurator, :plugin_manager_helper, :streaminator, :reportinator, :system_wrapper | ||
|  | 
 | ||
|  |   def setup | ||
|  |     @build_fail_registry = [] | ||
|  |     @plugin_objects = [] # so we can preserve order | ||
|  |   end | ||
|  |    | ||
|  |   def load_plugin_scripts(script_plugins, system_objects) | ||
|  |     environment = [] | ||
|  |      | ||
|  |     script_plugins.each do |plugin| | ||
|  |       # protect against instantiating object multiple times due to processing config multiple times (option files, etc) | ||
|  | 			next if (@plugin_manager_helper.include?(@plugin_objects, plugin)) | ||
|  |       begin | ||
|  |         @system_wrapper.require_file( "#{plugin}.rb" ) | ||
|  |         object = @plugin_manager_helper.instantiate_plugin_script( camelize(plugin), system_objects, plugin ) | ||
|  |         @plugin_objects << object | ||
|  |         environment += object.environment | ||
|  |          | ||
|  |         # add plugins to hash of all system objects | ||
|  |         system_objects[plugin.downcase.to_sym] = object | ||
|  |       rescue | ||
|  |         puts "Exception raised while trying to load plugin: #{plugin}" | ||
|  |         raise | ||
|  |       end | ||
|  |     end | ||
|  |      | ||
|  |     yield( { :environment => environment } ) if (environment.size > 0) | ||
|  |   end | ||
|  |    | ||
|  |   def plugins_failed? | ||
|  |     return (@build_fail_registry.size > 0) | ||
|  |   end | ||
|  |    | ||
|  |   def print_plugin_failures | ||
|  |     if (@build_fail_registry.size > 0) | ||
|  |       report = @reportinator.generate_banner('BUILD FAILURE SUMMARY') | ||
|  |        | ||
|  |       @build_fail_registry.each do |failure| | ||
|  |         report += "#{' - ' if (@build_fail_registry.size > 1)}#{failure}\n" | ||
|  |       end | ||
|  |        | ||
|  |       report += "\n" | ||
|  |        | ||
|  |       @streaminator.stderr_puts(report, Verbosity::ERRORS) | ||
|  |     end     | ||
|  |   end | ||
|  |    | ||
|  |   def register_build_failure(message) | ||
|  |     @build_fail_registry << message if (message and not message.empty?) | ||
|  |   end | ||
|  | 
 | ||
|  |   #### execute all plugin methods #### | ||
|  | 
 | ||
|  |   def pre_mock_generate(arg_hash); execute_plugins(:pre_mock_generate, arg_hash); end | ||
|  |   def post_mock_generate(arg_hash); execute_plugins(:post_mock_generate, arg_hash); end | ||
|  | 
 | ||
|  |   def pre_runner_generate(arg_hash); execute_plugins(:pre_runner_generate, arg_hash); end | ||
|  |   def post_runner_generate(arg_hash); execute_plugins(:post_runner_generate, arg_hash); end | ||
|  | 
 | ||
|  |   def pre_compile_execute(arg_hash); execute_plugins(:pre_compile_execute, arg_hash); end | ||
|  |   def post_compile_execute(arg_hash); execute_plugins(:post_compile_execute, arg_hash); end | ||
|  | 
 | ||
|  |   def pre_link_execute(arg_hash); execute_plugins(:pre_link_execute, arg_hash); end | ||
|  |   def post_link_execute(arg_hash); execute_plugins(:post_link_execute, arg_hash); end | ||
|  | 
 | ||
|  |   def pre_test_fixture_execute(arg_hash); execute_plugins(:pre_test_fixture_execute, arg_hash); end | ||
|  |   def post_test_fixture_execute(arg_hash) | ||
|  |     # special arbitration: raw test results are printed or taken over by plugins handling the job | ||
|  |     @streaminator.stdout_puts(arg_hash[:shell_result][:output]) if (@configurator.plugins_display_raw_test_results) | ||
|  |     execute_plugins(:post_test_fixture_execute, arg_hash) | ||
|  |   end | ||
|  | 
 | ||
|  |   def pre_test; execute_plugins(:pre_test); end | ||
|  |   def post_test; execute_plugins(:post_test); end | ||
|  | 
 | ||
|  |   def pre_release; execute_plugins(:pre_release); end | ||
|  |   def post_release; execute_plugins(:post_release); end | ||
|  |    | ||
|  |   def pre_build; execute_plugins(:pre_build); end | ||
|  |   def post_build; execute_plugins(:post_build); end | ||
|  |    | ||
|  |   def summary; execute_plugins(:summary); end | ||
|  |    | ||
|  |   private #################################### | ||
|  |    | ||
|  |   def camelize(underscored_name) | ||
|  |     return underscored_name.gsub(/(_|^)([a-z0-9])/) {$2.upcase} | ||
|  |   end | ||
|  | 
 | ||
|  |   def execute_plugins(method, *args) | ||
|  |     @plugin_objects.each do |plugin| | ||
|  |       begin | ||
|  |         plugin.send(method, *args) | ||
|  |       rescue | ||
|  |         puts "Exception raised in plugin: #{plugin.name}, in method #{method}" | ||
|  |         raise | ||
|  |       end | ||
|  |     end | ||
|  |   end | ||
|  | 
 | ||
|  | end |