Sha256: 6bd37a6fb8628492d8bfaa806c068fff9360aeb3e27f5c04c1830c7ab50f9d9c

Contents?: true

Size: 1.89 KB

Versions: 23

Compression:

Stored size: 1.89 KB

Contents

require 'pluginator'
require 'benchmark'

require 'pre-commit/utils/staged_files'
require 'pre-commit/configuration'
require 'pre-commit/list_evaluator'
require 'pre-commit/error_list'

module PreCommit
  class Runner
    include PreCommit::Utils::StagedFiles

    attr_reader :pluginator, :config, :debug

    def initialize(stderr = nil, staged_files = nil, config = nil, pluginator = nil)
      @stderr       = (stderr       or $stderr)
      @pluginator   = (pluginator   or PreCommit.pluginator)
      @config       = (config       or PreCommit::Configuration.new(@pluginator))
      @staged_files = staged_files
      @debug = ENV["PRE_COMMIT_DEBUG"]
    end

    def run(*args)
      set_staged_files(*args)
      run_single(:warnings)
      run_single(:checks  ) or return false
      true
    end

    def run_single(name)
      show_output(name, execute(list_to_run(name)))
    end

    def show_output(name, list)
      if list.any?
        @stderr.puts send(name, list)
        return false
      end
      true
    end

    def execute(list)
      list.map do |cmd|
        result = nil

        seconds = Benchmark.realtime do
          result = cmd.new(pluginator, config, list).call(staged_files.dup)
        end

        puts "#{cmd} #{seconds*1000}ms" if debug

        result
      end.compact
    end

    def list_to_run(name)
      list_evaluator.send(:"#{name}_evaluated", :list_to_run)
    end

    def list_evaluator
      @list_evaluator ||= PreCommit::ListEvaluator.new(config)
    end

    def warnings(list)
      <<-WARNINGS
pre-commit: Some warnings were raised. These will not stop commit:
#{errors_to_string(list)}
WARNINGS
    end

    def checks(list)
      <<-ERRORS
pre-commit: Stopping commit because of errors.
#{errors_to_string(list)}
pre-commit: You can bypass this check using `git commit -n`

ERRORS
    end

    def errors_to_string(list)
      list.map(&:to_s).join("\n")
    end

  end
end

Version data entries

23 entries across 23 versions & 1 rubygems

Version Path
pre-commit-0.40.0 lib/pre-commit/runner.rb
pre-commit-0.39.0 lib/pre-commit/runner.rb
pre-commit-0.38.1 lib/pre-commit/runner.rb
pre-commit-0.38.0 lib/pre-commit/runner.rb
pre-commit-0.37.0 lib/pre-commit/runner.rb
pre-commit-0.36.0 lib/pre-commit/runner.rb
pre-commit-0.35.0 lib/pre-commit/runner.rb
pre-commit-0.34.0 lib/pre-commit/runner.rb
pre-commit-0.33.0 lib/pre-commit/runner.rb
pre-commit-0.32.0 lib/pre-commit/runner.rb
pre-commit-0.31.0 lib/pre-commit/runner.rb
pre-commit-0.30.0 lib/pre-commit/runner.rb
pre-commit-0.29.0 lib/pre-commit/runner.rb
pre-commit-0.28.0 lib/pre-commit/runner.rb
pre-commit-0.27.0 lib/pre-commit/runner.rb
pre-commit-0.26.0 lib/pre-commit/runner.rb
pre-commit-0.25.0 lib/pre-commit/runner.rb
pre-commit-0.24.0 lib/pre-commit/runner.rb
pre-commit-0.23.0 lib/pre-commit/runner.rb
pre-commit-0.22.1 lib/pre-commit/runner.rb