class Overcommit::Printer
Provide a set of callbacks which can be executed as events occur during the course of {HookRunner#run}.
Attributes
Public Class Methods
Source
# File lib/overcommit/printer.rb, line 11 def initialize(config, logger, context) @config = config @log = logger @context = context @lock = Monitor.new # Need to use monitor so we can have re-entrant locks synchronize_all_methods end
Public Instance Methods
Source
# File lib/overcommit/printer.rb, line 37 def end_hook(hook, status, output) # Want to print the header for quiet hooks only if the result wasn't good # so that the user knows what failed print_header(hook) if (!hook.quiet? && !@config['quiet']) || status != :pass print_result(hook, status, output) end
Executed at the end of an individual hook run.
Source
# File lib/overcommit/printer.rb, line 79 def hook_run_failed(message) log.newline log.log message log.newline end
Source
# File lib/overcommit/printer.rb, line 28 def hook_skipped(hook) log.warning "Skipping #{hook.name}" end
Source
# File lib/overcommit/printer.rb, line 45 def interrupt_triggered log.error "\nInterrupt signal received. Stopping hooks..." end
Source
# File lib/overcommit/printer.rb, line 24 def nothing_to_run log.debug "✓ No applicable #{hook_script_name} hooks to run" end
Source
# File lib/overcommit/printer.rb, line 32 def required_hook_not_skipped(hook) log.warning "Cannot skip #{hook.name} since it is required" end
Source
# File lib/overcommit/printer.rb, line 57 def run_failed log.newline log.error "✗ One or more #{hook_script_name} hooks failed" log.newline end
Executed when one or more hooks by the end of the run.
Source
# File lib/overcommit/printer.rb, line 50 def run_interrupted log.newline log.warning '⚠ Hook run interrupted by user' log.warning "⚠ If files appear modified/missing, check your stash to recover them\n" end
Executed when a hook run was interrupted/cancelled by user.
Source
# File lib/overcommit/printer.rb, line 71 def run_succeeded unless @config['quiet'] log.newline log.success "✓ All #{hook_script_name} hooks passed" log.newline end end
Executed when no hooks failed by the end of the run.
Source
# File lib/overcommit/printer.rb, line 64 def run_warned log.newline log.warning "⚠ All #{hook_script_name} hooks passed, but with warnings" log.newline end
Executed when no hooks failed by the end of the run, but some warned.
Source
# File lib/overcommit/printer.rb, line 20 def start_run log.bold "Running #{hook_script_name} hooks" unless @config['quiet'] end
Executed at the very beginning of running the collection of hooks.
Private Instance Methods
Source
# File lib/overcommit/printer.rb, line 119 def hook_script_name @context.hook_script_name end
Source
# File lib/overcommit/printer.rb, line 87 def print_header(hook) hook_name = "[#{hook.name}] " log.partial hook.description log.partial '.' * [70 - hook.description.length - hook_name.length, 0].max log.partial hook_name log.flush end
Source
# File lib/overcommit/printer.rb, line 115 def print_report(output, format = :log) log.send(format, output) unless output.nil? || output.empty? end
Source
# File lib/overcommit/printer.rb, line 95 def print_result(hook, status, output) # rubocop:disable Metrics/CyclomaticComplexity case status when :pass log.success 'OK' unless @config['quiet'] || hook.quiet? when :warn log.warning 'WARNING' print_report(output, :bold_warning) when :fail log.error 'FAILED' print_report(output, :bold_error) when :interrupt log.error 'INTERRUPTED' print_report(output, :bold_error) else log.error '???' print_report("Hook returned unknown status `#{status.inspect}` -- ignoring.", :bold_error) end end
Source
# File lib/overcommit/printer.rb, line 126 def synchronize_all_methods methods = self.class.instance_methods - self.class.superclass.instance_methods methods.each do |method_name| old_method = :"old_#{method_name}" new_method = :"synchronized_#{method_name}" self.class.__send__(:alias_method, old_method, method_name) self.class.send(:define_method, new_method) do |*args| @lock.synchronize { __send__(old_method, *args) } end self.class.__send__(:alias_method, method_name, new_method) end end
Get all public methods that were defined on this class and wrap them with synchronization locks so we ensure the output isn’t interleaved amongst the various threads.