class Overcommit::Printer
Provide a set of callbacks which can be executed as events occur during the course of {HookRunner#run}.
Attributes
log[R]
Public Class Methods
new(config, logger, context)
click to toggle 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
end_hook(hook, status, output)
click to toggle source
Executed at the end of an individual hook run.
# 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
hook_run_failed(message)
click to toggle source
# File lib/overcommit/printer.rb, line 81 def hook_run_failed(message) log.newline log.log message log.newline end
hook_skipped(hook)
click to toggle source
# File lib/overcommit/printer.rb, line 28 def hook_skipped(hook) log.warning "Skipping #{hook.name}" end
interrupt_triggered()
click to toggle source
# File lib/overcommit/printer.rb, line 45 def interrupt_triggered log.newline log.error 'Interrupt signal received. Stopping hooks...' end
nothing_to_run()
click to toggle source
# File lib/overcommit/printer.rb, line 24 def nothing_to_run log.debug "✓ No applicable #{hook_script_name} hooks to run" end
required_hook_not_skipped(hook)
click to toggle 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
run_failed()
click to toggle source
Executed when one or more hooks by the end of the run.
# File lib/overcommit/printer.rb, line 59 def run_failed log.newline log.error "✗ One or more #{hook_script_name} hooks failed" log.newline end
run_interrupted()
click to toggle source
Executed when a hook run was interrupted/cancelled by user.
# File lib/overcommit/printer.rb, line 51 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' log.newline end
run_succeeded()
click to toggle source
Executed when no hooks failed by the end of the run.
# File lib/overcommit/printer.rb, line 73 def run_succeeded unless @config['quiet'] log.newline log.success "✓ All #{hook_script_name} hooks passed" log.newline end end
run_warned()
click to toggle source
Executed when no hooks failed by the end of the run, but some warned.
# File lib/overcommit/printer.rb, line 66 def run_warned log.newline log.warning "⚠ All #{hook_script_name} hooks passed, but with warnings" log.newline end
start_run()
click to toggle source
Executed at the very beginning of running the collection of hooks.
# File lib/overcommit/printer.rb, line 20 def start_run log.bold "Running #{hook_script_name} hooks" unless @config['quiet'] end
Private Instance Methods
hook_script_name()
click to toggle source
# File lib/overcommit/printer.rb, line 121 def hook_script_name @context.hook_script_name end
print_header(hook)
click to toggle source
# File lib/overcommit/printer.rb, line 89 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 end
print_report(output, format = :log)
click to toggle source
# File lib/overcommit/printer.rb, line 117 def print_report(output, format = :log) log.send(format, output) unless output.nil? || output.empty? end
print_result(hook, status, output)
click to toggle source
# File lib/overcommit/printer.rb, line 96 def print_result(hook, status, output) # rubocop:disable Metrics/CyclomaticComplexity case status when :pass log.success 'OK' unless @config['quiet'] || hook.quiet? print_report(output) 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
synchronize_all_methods()
click to toggle source
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.
# File lib/overcommit/printer.rb, line 128 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